{"id":9326,"date":"2019-04-01T17:16:41","date_gmt":"2019-04-01T22:16:41","guid":{"rendered":"https:\/\/www.mrc-productivity.com\/docs\/?page_id=9326"},"modified":"2023-08-11T15:19:08","modified_gmt":"2023-08-11T20:19:08","slug":"workflow-designer","status":"publish","type":"ht_kb","link":"https:\/\/www.mrc-productivity.com\/docs\/knowledge-base\/workflow-designer","title":{"rendered":"Workflow Designer"},"content":{"rendered":"\n<p>This feature is designed for the developer who wants to customize maintenance applications with a variety of programmatic elements, such as conditional actions, API invoking, easier error message implementation, or even better server-side error checking. Often times, the solution for these needs was to write external objects. However, the feedback we continually received from our customers was that they want to work in m-Power as much as possible, and not need to resort to writing external objects outside of m-Power. With that feedback in mind, we implemented the Workflow Designer. The designer gives you a graphical interface to load a variety of actions or conditions to control the behavior of the program once submit is clicked.<\/p>\n\n\n\n<div class=\"wp-block-group\"><div class=\"wp-block-group__inner-container is-layout-flow wp-block-group-is-layout-flow\">\n<h3 class=\"wp-block-heading\" id=\"supported-templates\">Supported Templates<\/h3>\n\n\n\n<p><strong>Sky: <\/strong>Display and Maintain Rows, Single Row Maintainer, and Display and Maintain Rows Calendar<br><strong>Bootstrap: <\/strong>Data List with Web Form, Single Row Web Form, and Calendar.<\/p>\n<\/div><\/div>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"video-walkthrough\">Video Walkthrough<\/h2>\n\n\n\n<figure class=\"wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\n<iframe title=\"Meet the Workflow Designer\" width=\"643\" height=\"362\" src=\"https:\/\/www.youtube.com\/embed\/VohtdcEx18Q?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe>\n<\/div><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"getting-started\">Getting Started<\/h2>\n\n\n\n<p>Clicking the &#8220;Application Workflow&#8221; button on the Build and Customize screen of a maintainer will open the Workflow Designer screen. Clicking the &#8220;Add actions&#8221; button will open a dialog to choose the desired action. All action and condition windows offer a tooltip helper when hovering over the form label.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"setting-a-condition\">Setting a Condition<\/h2>\n\n\n\n<p>After setting a condition, choose the action to follow if the criteria is true or false. If the maintainer should submit as normal, leave the appropriate condition result with no action.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><a href=\"\/docs\/images\/workflow\/condition.jpg\"><img decoding=\"async\" src=\"\/docs\/images\/workflow\/condition.jpg\" alt=\"Setting a Condition\"\/><\/a><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"compare-a-field-value\">Compare a Field Value<\/h3>\n\n\n\n<p><strong>Name: <\/strong>Name the conditional check.<br><strong>Field: <\/strong>Select a field from your current maintainer, the username, or a field from a previous step&#8217;s data lookup.<br><strong>Relation: <\/strong>Operator to compare the value.<br><strong>Value: <\/strong>You may hardcode a value, select a field from the current maintainer, the username, or a field from a previous step&#8217;s data lookup.<br><strong>Use Case: <\/strong>Can be used to make sure a field is greater than another field. Such as an ship date must always be after an order date. Hardcode the comparison value where if a feedback field is equal to &#8216;NEGATIVE&#8217; to initiate a follow up email. If used after a lookup data action, pass a value to the data lookup to confirm a product number exists in your products table before an order can be placed. Countless other use cases are at your disposal.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><a href=\"\/docs\/images\/workflow\/compare_val.jpg\"><img decoding=\"async\" src=\"\/docs\/images\/workflow\/compare_val.jpg\" alt=\"Comparing a Field Value\"\/><\/a><\/figure>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"validate-email-address\">Validate an Email Address<\/h4>\n\n\n\n<p><strong>Name: <\/strong>Name the conditional check.<br><strong>Field: <\/strong>Select the email field from your current maintainer.<br><strong>Relation: <\/strong>Is a valid email address.<br><strong>Validation: <\/strong>Requires an &#8216;@&#8217; symbol, at least 1 character before and after the &#8216;@&#8217; symbol, and a &#8216;.&#8217; after the &#8216;@&#8217; symbol.<br><strong>Use Case: <\/strong>Can be used to make sure an input contains a valid email address upon form submission. Include a &#8220;Return an Error Message&#8221; action if this condition result is FALSE.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" width=\"798\" height=\"360\" src=\"https:\/\/www.mrc-productivity.com\/docs\/images\/validEmail-1.jpg\" alt=\"Validate an Email Address\" class=\"wp-image-11773\" srcset=\"https:\/\/www.mrc-productivity.com\/docs\/images\/validEmail-1.jpg 798w, https:\/\/www.mrc-productivity.com\/docs\/images\/validEmail-1-300x135.jpg 300w, https:\/\/www.mrc-productivity.com\/docs\/images\/validEmail-1-150x68.jpg 150w, https:\/\/www.mrc-productivity.com\/docs\/images\/validEmail-1-768x346.jpg 768w, https:\/\/www.mrc-productivity.com\/docs\/images\/validEmail-1-50x23.jpg 50w, https:\/\/www.mrc-productivity.com\/docs\/images\/validEmail-1-60x27.jpg 60w, https:\/\/www.mrc-productivity.com\/docs\/images\/validEmail-1-100x45.jpg 100w\" sizes=\"(max-width: 798px) 100vw, 798px\" \/><\/figure>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"validate-ssn\">Validate a Social Security Number<\/h4>\n\n\n\n<p><strong>Name: <\/strong>Name the conditional check.<br><strong>Field: <\/strong>Select the Social Security Number field.<br><strong>Relation: <\/strong>Is a valid SSN.<br><strong>Validation: <\/strong>Requires 9 digits (i.e. 999999999) or 9 digits with appropriate dashes (i.e. 999-99-9999).<br><strong>Use Case: <\/strong>Can be used to make sure an input contains a valid Social Security Number upon form submission. Include a &#8220;Return an Error Message&#8221; action if this condition result is FALSE.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" width=\"800\" height=\"356\" src=\"https:\/\/www.mrc-productivity.com\/docs\/images\/validSSN-1.jpg\" alt=\"\" class=\"wp-image-11778\" srcset=\"https:\/\/www.mrc-productivity.com\/docs\/images\/validSSN-1.jpg 800w, https:\/\/www.mrc-productivity.com\/docs\/images\/validSSN-1-300x134.jpg 300w, https:\/\/www.mrc-productivity.com\/docs\/images\/validSSN-1-150x67.jpg 150w, https:\/\/www.mrc-productivity.com\/docs\/images\/validSSN-1-768x342.jpg 768w, https:\/\/www.mrc-productivity.com\/docs\/images\/validSSN-1-50x22.jpg 50w, https:\/\/www.mrc-productivity.com\/docs\/images\/validSSN-1-60x27.jpg 60w, https:\/\/www.mrc-productivity.com\/docs\/images\/validSSN-1-100x45.jpg 100w\" sizes=\"(max-width: 800px) 100vw, 800px\" \/><\/figure>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"validate-password\">Validate a Password<\/h4>\n\n\n\n<p><strong>Name: <\/strong>Name the conditional check.<br><strong>Field: <\/strong>Select the password field from your current maintainer.<br><strong>Relation: <\/strong>Is a valid password type.<br><strong># Special Chars: <\/strong>The number of required special characters in the password.<br><strong># Upper Case:<\/strong> The number of upper case letters required.<br><strong>Min Password Length:<\/strong> The minimum number of characters allowed for the password.<br><strong>Special Chars Allowed:<\/strong> The characters considered\/allowed as special characters in the password.<br><strong>Use Case: <\/strong>Can be used to customize user password criteria if using a maintainer for users to control their own passwords. Include a &#8220;Return an Error Message&#8221; action if this condition result is FALSE.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" width=\"799\" height=\"443\" src=\"https:\/\/www.mrc-productivity.com\/docs\/images\/validPassword-1.jpg\" alt=\"\" class=\"wp-image-11779\" srcset=\"https:\/\/www.mrc-productivity.com\/docs\/images\/validPassword-1.jpg 799w, https:\/\/www.mrc-productivity.com\/docs\/images\/validPassword-1-300x166.jpg 300w, https:\/\/www.mrc-productivity.com\/docs\/images\/validPassword-1-150x83.jpg 150w, https:\/\/www.mrc-productivity.com\/docs\/images\/validPassword-1-768x426.jpg 768w, https:\/\/www.mrc-productivity.com\/docs\/images\/validPassword-1-50x28.jpg 50w, https:\/\/www.mrc-productivity.com\/docs\/images\/validPassword-1-60x33.jpg 60w, https:\/\/www.mrc-productivity.com\/docs\/images\/validPassword-1-100x55.jpg 100w\" sizes=\"(max-width: 799px) 100vw, 799px\" \/><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"check-if-a-field-has-changed\">Check if a Field Has Changed<\/h3>\n\n\n\n<p><strong>Name: <\/strong>Name the conditional check.<br><strong>Field: <\/strong>Select the field from the current maintainer to check if the value has changed (add\/update).<br><strong>Use Case:<\/strong> Perform an action if a field has changed. For example, if the order shipping date has changed, send an email to the account manager and the client.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><a href=\"\/docs\/images\/workflow\/field_change.jpg\"><img decoding=\"async\" src=\"\/docs\/images\/workflow\/field_change.jpg\" alt=\"Checking if a Value Has Changed\"\/><\/a><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"check-the-action-mode\">Check the action mode<\/h3>\n\n\n\n<p><strong>Name: <\/strong>Name the conditional check.<br><strong>Action Mode: <\/strong>Select the action mode to trigger the next step.<br><strong>Use Case:<\/strong> Perform an action based off the action mode. If an order is added, send a confirmation email and write the order record to a sales table. If an order is updated AND the status has changed to &#8216;SHIPPED&#8217;, send an email to the customer.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><a href=\"\/docs\/images\/workflow\/check_act.jpg\"><img decoding=\"async\" src=\"\/docs\/images\/workflow\/check_act.jpg\" alt=\"Checking the Action Mode\"\/><\/a><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"check-the-user-s-role\">Check the user&#8217;s role<\/h3>\n\n\n\n<p><strong>Prerequisites: <\/strong>Security enabled, Roles previously created.<br><strong>Name: <\/strong>Name the conditional check.<br><strong>Relation: <\/strong>Either &#8216;Equal To&#8217; or &#8216;Not equal&#8217;<br><strong>Role: <\/strong>List of roles created from the &#8216;Manage Runtime Roles&#8217; in the &#8216;Users, Menu &amp; Security&#8217; screen.<br><strong>Use Case:<\/strong> Can be helpful for role based validation. For example, make sure only certain roles are able to delete records.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><a href=\"\/docs\/images\/workflow\/check_role.jpg\"><img decoding=\"async\" src=\"\/docs\/images\/workflow\/check_role.jpg\" alt=\"Checking the User Role\"\/><\/a><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"compare-a-date-field-to-a-calculated-date-value\">Compare a date field to a calculated date value<\/h3>\n\n\n\n<p><strong>Prerequisites: <\/strong>Must be used with a true date field.<br><strong>Name: <\/strong>Name the conditional check.<br><strong>Field: <\/strong>Select a true date field from the current maintainer or from a date field from a previous step&#8217;s data lookup.<br><strong>Relation: <\/strong>Operator to compare the date.<br><strong>+\/-: <\/strong>Add or subtract from the current date.<br><strong>#: <\/strong>Number of units to add or subtract from.<br><strong>Date Measure: <\/strong>Select days, months, or years to calculate.<br><strong>Use Case:<\/strong> If an order needs 7 days minimum processing time, if the ship date is within 7 days of the current date, return an error message.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><a href=\"\/docs\/images\/workflow\/compare_date.jpg\"><img decoding=\"async\" src=\"\/docs\/images\/workflow\/compare_date.jpg\" alt=\"Compare a Date Field\"\/><\/a><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"lookup-returns-at-least-one-record\">Lookup returns at least one record<\/h3>\n\n\n\n<p><strong>Prerequisites: <\/strong>Lookup Data step must proceed this condition.<br><strong>Name: <\/strong>Name the conditional check.<br><strong>Condition: <\/strong>Specifies that records have been found from the data lookup step.<br><strong>Use Case:<\/strong> After passing a customer number to a data lookup over the customers table, if at least one customer record is found, perform another conditional check to make sure said customer is not in an accounting hold status.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><a href=\"\/docs\/images\/workflow\/data_returned.jpg\"><img decoding=\"async\" src=\"\/docs\/images\/workflow\/data_returned.jpg\" alt=\"Lookup has Records\"\/><\/a><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"lookup-returns-no-records\">Lookup returns no records<\/h3>\n\n\n\n<p><strong>Prerequisites: <\/strong>Lookup Data step must proceed this condition.<br><strong>Name: <\/strong>Name the conditional check.<br><strong>Condition: <\/strong>Specifies that records have not been found from the data lookup step.<br><strong>Use Case:<\/strong> After passing a customer number to a data lookup over the customers table, if no records are returned, call an error message action for that customer not existing.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><a href=\"\/docs\/images\/workflow\/no_data.jpg\"><img decoding=\"async\" src=\"\/docs\/images\/workflow\/no_data.jpg\" alt=\"Lookup has No Records\"\/><\/a><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"triggering-an-action\">Triggering an Action<\/h2>\n\n\n\n<p>Select the action to execute when the form is submitted.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"lookup-data-via-retrieval\">Lookup Data via Retrieval<\/h3>\n\n\n\n<p>Useful when needing to pass a form value to a retrieval for finding form specific data.<\/p>\n\n\n\n<p><strong>Prerequisites: <\/strong>Previously created retrieval.<br><strong>Name: <\/strong>Name the Lookup action.<br><strong>Retrieval: <\/strong>Select the appropriate retrieval from the current dictionary.<br><strong>Additional URL Parameters: <\/strong>(Optional) Passing parameters to the retrieval can help filter the data so only the desired records are returned.<br><strong>Map Available Fields To Lookup List:<\/strong>Select the fields to map from selected retrieval to the current maintainer. Additionally, you may select the username or a field from a previous step&#8217;s data lookup. Map additional fields as necessary.<br><strong>Use Case:<\/strong> Pass the form&#8217;s customer number to a customer master retrieval to make sure the customer is a current customer.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><a href=\"\/docs\/images\/workflow\/data_lookup.jpg\"><img decoding=\"async\" src=\"\/docs\/images\/workflow\/data_lookup.jpg\" alt=\"Lookup Data via Retrieval\"\/><\/a><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"return-an-error-message\">Return an Error Message<\/h3>\n\n\n\n<p>Useful for several conditional checks such as field\/form validation, action mode validation, role based validation, etc. This is a server side validation check via java prior to writing to the database.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><a href=\"\/docs\/images\/workflow\/return_error.jpg\"><img decoding=\"async\" src=\"\/docs\/images\/workflow\/return_error.jpg\" alt=\"Return an Error Message\"\/><\/a><\/figure>\n\n\n\n<p><strong>Prerequisites: <\/strong>Setting a condition.<br><strong>Name: <\/strong>Name the error action.<br><strong>Error Message: <\/strong>The text that will be displayed as the error message.<br><strong>Apply Error to specific field:<\/strong>(Optional, Bootstrap only) If a field is selected, the error message will appear below the specified field. If not selected, a general error message will appear above the form.<br><strong>Use Case:<\/strong> Return a custom error message if a custom field condition is not met, if records are not returned from a data lookup step, or if a user&#8217;s role is not permitted a certain action.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><a href=\"\/docs\/images\/workflow\/field_specific_error.jpg\"><img decoding=\"async\" src=\"\/docs\/images\/workflow\/field_specific_error.jpg\" alt=\"Field Specific Error\"\/><\/a><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"call-a-task-group\">Call a Task Group<\/h3>\n\n\n\n<p><strong>Prerequisites: <\/strong>Previously created task group in the <a href=\"\/docs\/knowledge-base\/messaging-and-scheduled-tasks\" target=\"_blank\" rel=\"noreferrer noopener\">Messaging and Scheduled Task utility<\/a>.<br><strong>Name: <\/strong>Name the action.<br><strong>Task Group: <\/strong>Select the appropriate task group<br><strong>Map Fields to Task Group:<\/strong> (Optional) Passes form values from the maintainer to the task group. Map additional fields as necessary. Note that fields\/calculations from a proceeding &#8216;Lookup Data with a Retrieval&#8217; action can be passed as parameters to the task group as well.<br><strong>Use Case:<\/strong> Call a task group to trigger a report be emailed passing through the customer number to filter the emailed report.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><a href=\"\/docs\/images\/workflow\/task_group.jpg\"><img decoding=\"async\" src=\"\/docs\/images\/workflow\/task_group.jpg\" alt=\"Call a Task Group\"\/><\/a><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"set-a-field-value\">Set a Field Value<\/h3>\n\n\n\n<p><strong>Name: <\/strong>Name the action.<br><strong>Field to Set: <\/strong>Select the appropriate field to set a value.<br><strong>Value: <\/strong>Hard code a value or select a field to copy from. You may select a field from the current maintainer, the username, or a field from a previous data lookup step.<br><strong>Event:<\/strong> Specify when the field value will be set, which is either when the maintainer form is loaded or when the maintainer form is submitted. <br><strong>Use Case:<\/strong> If in add mode, set an order status to &#8216;PLACED&#8217; to begin processing.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><a href=\"\/docs\/images\/workflow\/set_value.jpg\"><img decoding=\"async\" src=\"\/docs\/images\/workflow\/set_value.jpg\" alt=\"Set a Field Value\"\/><\/a><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"send-an-email\">Send an Email<\/h3>\n\n\n\n<p><strong>Prerequisites: <\/strong>Email server set up through Messaging and Scheduled Task Utility message configuration.<br><strong>Name: <\/strong>Name the action.<br><strong>To: <\/strong>Specify the recipient. You can hard code an email address and\/or select a field that contains the email address from the drop down. Separate multiple addresses\/fields with commas.<br><strong>CC: <\/strong>(Optional) Specify the optional CC recipient. You can hard code an email address and\/or select a field that contains the email address from the drop down. Separate multiple addresses\/fields with commas.<br><strong>Address List: <\/strong>(Optional) Select a distribution address list. A single email will be sent to all the email addresses produced by the list.<br><strong>Map Fields to Address List: <\/strong>(Optional) Pass values from the form to filter the list of address list recipients. Only available after selecting an address list.<br><strong>Subject: <\/strong>The subject of the email. You can substitute field values into the subject using the drop down button on the right side of the input<br><strong>Email Message: <\/strong>Serves as the body of the email. Include fields from the maintainer or from previous step&#8217;s data lookup. Type [[ to see a list of available fields to include in the email.<br><strong>Use Case:<\/strong> Send a text only email to an account manager an salesman after an order is placed.<\/p>\n\n\n\n<p><strong>Note:<\/strong> Emails sent through this method are interactive. The users&#8217; browser will pause until all emails are sent. If there are many emails to be sent, consider using a task group instead which will send them in batch while the user continues to work.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><a href=\"\/docs\/images\/workflow\/email.jpg\"><img decoding=\"async\" src=\"\/docs\/images\/workflow\/email.jpg\" alt=\"Send an Email\"\/><\/a><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"send-an-sms-text-message\">Send an SMS text message<\/h3>\n\n\n\n<p><strong>Prerequisites: <\/strong><a href=\"https:\/\/www.mrc-productivity.com\/docs\/utilities\/working-with-the-messaging-scheduled-tasks-plug-in#configure\" target=\"_blank\" rel=\"noreferrer noopener\">SMS connection info set up through Messaging and Scheduled Task Utility message configuration.<\/a><br><strong>Name: <\/strong>Name the action.<br><strong>To: <\/strong>Specify the mobile recipient. You can hard code a mobile number and\/or select a field that contains the mobile number from the drop down. Separate multiple numbers\/fields with commas.<br><strong>Address List: <\/strong>(Optional) Select a distribution address list. A single message will be sent to all phone numbers produced by the list.<br><strong>Map Fields to Address List: <\/strong>(Optional) Pass values from the form to filter the list of address list recipients. Only available after selecting an address list.<br><strong>SMS Message: <\/strong>Serves as the body of the SMS message. Include fields from the maintainer or from previous step&#8217;s data lookup. Type [[ to see a list of available fields to include in the message.<br><strong>Use Case:<\/strong> Send an SMS text message to a customer notifying them once an order status has been sent to &#8216;SHIPPED&#8217;.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><a href=\"\/docs\/images\/workflow\/SMS.jpg\"><img decoding=\"async\" src=\"\/docs\/images\/workflow\/SMS.jpg\" alt=\"Send an SMS Message\"\/><\/a><\/figure>\n\n\n\n<p><a href=\"https:\/\/www.mrc-productivity.com\/docs\/utilities\/working-with-the-messaging-scheduled-tasks-plug-in#configure\" target=\"_blank\" rel=\"noreferrer noopener\"><\/a><\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"redirect-to-another-page\">Redirect to Another Page<\/h3>\n\n\n\n<p><strong>Name: <\/strong>Name the action.<br><strong>Application Type: <\/strong>Select the application type to redirect to.<br><strong>Select Application: <\/strong>Select the application for the redirect.<br><strong>URL: <\/strong>This will be auto-populated if selecting an application. Additionally, you may hardcode any URL you wish to redirect.<br><strong>Map Fields: <\/strong>Select fields from the maintainer form or previous lookup step to the redirect application.<br><strong>Use Case:<\/strong> Redirect the user to a confirmation retrieval after submitting a new record.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><a href=\"\/docs\/images\/workflow\/redirect.jpg\"><img decoding=\"async\" src=\"\/docs\/images\/workflow\/redirect.jpg\" alt=\"Redirect to Another Page\"\/><\/a><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"write-record-via-maintainer\">Write Record via Maintainer<\/h3>\n\n\n\n<p>Calls another maintainer to write to a table in one step mode.<\/p>\n\n\n\n<p><strong>Name: <\/strong>Name the action.<br><strong>Select Maintainer: <\/strong>Select the maintainer that will write to the database.<br><strong>Action Mode: <\/strong>Specify whether to add, update, delete, or copy data on the database.<br><strong>Additional URL Parameters: <\/strong>Pass additional parameters to the maintainer when called.<br><strong>Map Fields: <\/strong>Select fields from the maintainer form or previous lookup step to the called maintainer.<br><strong>Use Case:<\/strong> If a record is added to one table and must be added to certain subsequent tables, use this action to write the records to the other tables using different maintainers.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><a href=\"\/docs\/images\/workflow\/maintainer.jpg\"><img decoding=\"async\" src=\"\/docs\/images\/workflow\/maintainer.jpg\" alt=\"Write Record via Maintainer\"\/><\/a><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"call-a-third-party-api\">Call a Third Party API<\/h3>\n\n\n\n<p><strong>Name: <\/strong>Name the action.<br><strong>Type of API: <\/strong>Choose either POST or GET API methods.<br><strong>API URL: <\/strong>The URL to call the API.<br><strong>API Headers <\/strong>Specify a comma separated list of any required API Headers (HeaderName:HeaderValue). Type [ to pick from a list of fields to include in the headers.<br><strong>API Message Body Format: <\/strong>Specify a custom API body or use m-Power&#8217;s default JSON format. The m-Power default json format is : {field: value, field2:value2,..}<br><strong>API Message Body: <\/strong>Only available if using custom body format. The API body to POST. Type [ to pick from a list of fields to include in the body.<br><strong>Use Case:<\/strong> Post a new order record to a third party billing service.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><a href=\"\/docs\/images\/workflow\/api.jpg\"><img decoding=\"async\" src=\"\/docs\/images\/workflow\/api.jpg\" alt=\"Call an API\"\/><\/a><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"copy-connect-to-existing-action\">Copy\/Connect to Existing Action<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"copying-a-step\">Copying a Step<\/h3>\n\n\n\n<p>Selecting this option allows the developer the ability to duplicate\/copy an action or condition and branch off from the step of origin. This prevents the need to manually recreate steps.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><a href=\"\/docs\/images\/workflow\/copy_1.jpg\"><img decoding=\"async\" src=\"\/docs\/images\/workflow\/copy_1.jpg\" alt=\"Copying an Action\"\/><\/a><\/figure>\n\n\n\n<figure class=\"wp-block-image\"><a href=\"\/docs\/images\/workflow\/copy_2.jpg\"><img decoding=\"async\" src=\"\/docs\/images\/workflow\/copy_2.jpg\" alt=\"Copying an Action\"\/><\/a><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"connecting-a-step\">Connecting a Step<\/h3>\n\n\n\n<p>Selecting this option allows the developer the ability to connect steps together. This is helpful when wanting to perform the same action after different conditions. You may remove a connection by clicking the red &#8216;X&#8217; on the connection line.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><a href=\"\/docs\/images\/workflow\/connect.jpg\"><img decoding=\"async\" src=\"\/docs\/images\/workflow\/connect.jpg\" alt=\"Connecting Steps\"\/><\/a><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"inserting-removing-steps\">Inserting\/Removing Steps<\/h3>\n\n\n\n<p>You may insert a step inbetween existing steps by clicking the green &#8216;+&#8217; on the connection line. You may also remove a connection between steps by clicking the red &#8216;X&#8217;.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"other-notes\">Other Notes<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Promoting to production: <\/strong>Promoting a maintainer via the Promotion Utility will automatically promote the workflow\/status file. Otherwise, this file is generated in mrcjava\/WEB-INF\/classes\/[DICTIONARY] as MXXXXXs.json. Replace MXXXXX with the maintainer application number.<\/li>\n\n\n\n<li><strong>Browser Support:<\/strong> All modern browsers are supported. Internet Explorer does not support the workflow designer in the development interface. However, runtime capabilities are supported. For example, a developer can create a workflow design in Chrome and a user can execute said maintainer with workflow in Internet Explorer.<\/li>\n\n\n\n<li><strong>User Role Support: <\/strong>Only menu version 3+ can support using user roles. Please follow this tech blog to <a href=\"https:\/\/www.mrc-productivity.com\/techblog\/?p=9644\" target=\"_blank\" rel=\"noreferrer noopener\">upgrade your menu<\/a> if needed.<\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>This feature is designed for the developer who wants to customize maintenance applications with a variety of programmatic elements, such as conditional actions, API invoking, easier error message implementation, or even better server-side error checking. Often times, the solution for these needs was to write external objects. However, the feedback&#8230;<\/p>\n","protected":false},"author":1,"comment_status":"closed","ping_status":"closed","template":"","format":"standard","meta":{"footnotes":""},"ht-kb-category":[252],"ht-kb-tag":[],"class_list":["post-9326","ht_kb","type-ht_kb","status-publish","format-standard","hentry","ht_kb_category-maintainer"],"_links":{"self":[{"href":"https:\/\/www.mrc-productivity.com\/docs\/wp-json\/wp\/v2\/ht-kb\/9326","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.mrc-productivity.com\/docs\/wp-json\/wp\/v2\/ht-kb"}],"about":[{"href":"https:\/\/www.mrc-productivity.com\/docs\/wp-json\/wp\/v2\/types\/ht_kb"}],"author":[{"embeddable":true,"href":"https:\/\/www.mrc-productivity.com\/docs\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.mrc-productivity.com\/docs\/wp-json\/wp\/v2\/comments?post=9326"}],"version-history":[{"count":50,"href":"https:\/\/www.mrc-productivity.com\/docs\/wp-json\/wp\/v2\/ht-kb\/9326\/revisions"}],"predecessor-version":[{"id":13163,"href":"https:\/\/www.mrc-productivity.com\/docs\/wp-json\/wp\/v2\/ht-kb\/9326\/revisions\/13163"}],"wp:attachment":[{"href":"https:\/\/www.mrc-productivity.com\/docs\/wp-json\/wp\/v2\/media?parent=9326"}],"wp:term":[{"taxonomy":"ht_kb_category","embeddable":true,"href":"https:\/\/www.mrc-productivity.com\/docs\/wp-json\/wp\/v2\/ht-kb-category?post=9326"},{"taxonomy":"ht_kb_tag","embeddable":true,"href":"https:\/\/www.mrc-productivity.com\/docs\/wp-json\/wp\/v2\/ht-kb-tag?post=9326"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}