Journey Manager (JM) The transaction engine for the platform. | System Manager / DevOps | All versions This feature is related to all versions.
After a user submits an application form, it has to be reviewed and a decision has to be made whether to approve or decline the application. A review workflow can be as simple as one step review or a multi-step group review. The later is a collaboration job that implements the simplest group review process, so we will use to illustrate how a collaboration job works. TheJob Example 2 implements the review workflow using the Form - Job Example 2 form and the Review and Approval - Multi Step Group Review job controller, which is the job service template.
The review workflow is shown below.
Below is the Job Example 2 form, which is built using our Composer product.
{
"jobDetails": {
"name": "Review and Approval - Multi Step Group Review",
"version": "4.2.0"
},
"properties": [
{ "name": "Task Form Code", "value": "$func.startFormCode()" }
],
"steps": [
{
"name": "Start",
"type": "start",
"actions": [
{
"name": "Handle Submission",
"type": "Job Form Start",
"properties": [
{ "name": "Process Message Send Email", "value": "$func.formProperty('Start Send Email')" },
{ "name": "Process Message Text", "value": "$func.formProperty('Start Process Message')" }
]
}
],
"routes": [
{ "name": "Default", "nextStep": "Initial Review" }
]
},
{
"name": "Initial Review",
"type": "",
"actions": [
{
"name": "Create Task",
"type": "Job Task Assign",
"properties": [
{ "name": "Process Message Send Email", "value": "$func.formProperty('Initial Review Send Email')" },
{ "name": "Process Message Submission Step", "value": "Start" },
{ "name": "Process Message Text", "value": "$func.formProperty('Initial Review Process Message')" },
{ "name": "Task Assign Group", "value": "$func.formProperty('Initial Review Group')" },
{ "name": "Task Enable Claiming", "value": "$func.formProperty('Initial Review Enable Claiming')" },
{ "name": "Task Message", "value": "$func.formProperty('Initial Review Task Message')" },
{ "name": "Task Review Previous Step", "value": "true" },
{ "name": "Task Subject", "value": "$func.formProperty('Initial Review Task Subject')" },
{ "name": "Task Type", "value": "Review" }
]
},
{
"name": "Handle Submission",
"type": "Job Task Wait",
"properties": [
{ "name": "Conditional Route Name", "value": "#if ( $formDataMap.routeName == 'Approve' && $formDataMap.loanAmount >= 20000 ) Exceeds Threshold #end" }
]
}
],
"routes": [
{ "name": "Approve", "nextStep": "Application Delivery" },
{ "name": "Decline", "nextStep": "Applicant Update" },
{ "name": "Exceeds Threshold", "nextStep": "Additional Review", "display": "false" },
{ "name": "Terminate", "nextStep": "Terminated Initial" }
]
},
{
"name": "Additional Review",
"type": "",
"actions": [
{
"name": "Create Task",
"type": "Job Task Assign",
"properties": [
{ "name": "Process Message Submission Step", "value": "Start" },
{ "name": "Process Message Text", "value": "$func.formProperty('Additional Review Process Message')" },
{ "name": "Task Assign Group", "value": "$func.formProperty('Additional Review Group')" },
{ "name": "Task Enable Claiming", "value": "$func.formProperty('Additional Review Enable Claiming')" },
{ "name": "Task Message", "value": "$func.formProperty('Additional Review Task Message')" },
{ "name": "Task Review Previous Step", "value": "true" },
{ "name": "Task Subject", "value": "$func.formProperty('Additional Review Task Subject')" },
{ "name": "Task Type", "value": "Review" }
]
},
{
"name": "Handle Submission",
"type": "Job Task Wait"
}
],
"routes": [
{ "name": "Approve", "nextStep": "Application Delivery" },
{ "name": "Decline", "nextStep": "Applicant Update" },
{ "name": "Terminate", "nextStep": "Terminated Additional" }
]
},
{
"name": "Applicant Update",
"type": "",
"actions": [
{
"name": "Create Task",
"type": "Job Task Assign",
"properties": [
{ "name": "Process Message Submission", "value": "$func.startSubmission()" },
{ "name": "Process Message Text", "value": "$func.formProperty('Applicant Update Process Message')" },
{ "name": "Task Assign User", "value": "$func.startUser()" },
{ "name": "Task Message", "value": "$func.formProperty('Applicant Update Task Message')" },
{ "name": "Task Review Previous Step", "value": "true" },
{ "name": "Task Subject", "value": "$func.formProperty('Applicant Update Task Subject')" },
{ "name": "Task Type", "value": "Review" }
]
},
{
"name": "Handle Submission",
"type": "Job Task Wait"
}
],
"routes": [
{ "name": "Update", "nextStep": "##PREVIOUS_STEP" },
{ "name": "Terminate", "nextStep": "Terminated Applicant" }
]
},
{
"name": "Application Delivery",
"type": "",
"actions": [
{
"name": "Application Delivery",
"type": "Job Delivery"
},
{
"name": "Application Delivery Wait",
"type": "Job Delivery Wait"
}
],
"routes": [
{ "name": "Default", "nextStep": "Approved Complete" }
]
},
{
"name": "Approved Complete",
"type": "endpoint",
"actions": [
{
"name": "Process Message",
"type": "Job Process Message",
"properties": [
{ "name": "Process Message Send Email", "value": "$func.formProperty('Approved Complete Send Email')" },
{ "name": "Process Message Submission Step", "value": "Start" },
{ "name": "Process Message Text", "value": "$func.formProperty('Approved Complete Process Message')" }
]
}
]
},
{
"name": "Terminated Initial",
"type": "endpoint",
"actions": [
{
"name": "Process Message",
"type": "Job Process Message",
"properties": [
{ "name": "Process Message Send Email", "value": "$func.formProperty('Terminated Initial Send Email')" },
{ "name": "Process Message Submission Step", "value": "Start" },
{ "name": "Process Message Text", "value": "$func.formProperty('Terminated Initial Process Message')" }
]
}
]
},
{
"name": "Terminated Additional",
"type": "endpoint",
"actions": [
{
"name": "Process Message",
"type": "Job Process Message",
"properties": [
{ "name": "Process Message Send Email", "value": "$func.formProperty('Terminated Additional Send Email')" },
{ "name": "Process Message Submission Step", "value": "Start" },
{ "name": "Process Message Text", "value": "$func.formProperty('Terminated Additional Process Message')" }
]
}
]
},
{
"name": "Terminated Applicant",
"type": "endpoint",
"actions": [
{
"name": "Process Message",
"type": "Job Process Message",
"properties": [
{ "name": "Process Message Send Email", "value": "$func.formProperty('Terminated Applicant Send Email')" },
{ "name": "Process Message Submission Step", "value": "Start" },
{ "name": "Process Message Text", "value": "$func.formProperty('Terminated Applicant Process Message')" }
]
}
]
}
]
}
This example uses the following users, which are the actors in the job definition above.
Group | Login | Name | Description |
---|---|---|---|
Job Applicants | anne | Anne Applicant | Anne is the applicant. |
Job Reviewers | roger | Roger Reviewer | Roger looks after the Initial Review step. |
Job Managers | mike | Mike Manager | Mike looks performs the Additional Review. |
Job Coordinators | cat | Cat Coordinator | Cat looks after the collaboration job as a whole and needs to track where collaboration jobs are up to using the Reviews page. |
The review workflow has the following route options at each user's step.
Step |
Group |
Login |
Description |
---|---|---|---|
Start |
Job Applicants | anne |
Anne starts the collaboration job (Start step) by the initial submission. |
Initial Review | Job Reviewers | roger |
Roger can either: Approve: A Conditional Route Rule checks if the loan amount is:
Decline: Routed to the Applicant Update Step Terminate: Routed to the Terminated Initial endpoint |
Additional Review | Job Managers | mike |
Mike can either Approve: Routed to Application Delivery step then to the Approved Complete endpoint, Decline: The reviewer enters feedback and the job is routed to the Applicant Update Step Terminate: Routed to the Terminated Additional endpoint |
Applicant Update | Job Applicants | anne |
Anne can read the feedback from the reviewer, plus she can: Update: Anne can update the form and the route it back to the review step that declined the application. Terminate: Routed to the Terminated Applicant endpoint. |
You can see that the Roger's Approve action, the Conditional Route Rule, is the Conditional Route Name. The following action property belongs to the Task Wait Service, which defines a rule that is applied with the collaboration job on the Manager server side. The rule is shown below:
{ "name": "Conditional Route Name", "value": "#if ( $formDataMap.routeName == 'Approve' && $formDataMap.loanAmount >= 20000 ) Exceeds Threshold #end" }
The following example shows the listed routes where the Exceeds Threshold has the display attribute set to false, so this route is not put in the Available Routes, as shown below:
"routes": [
{ "name": "Approve", "nextStep": "Application Delivery" },
{ "name": "Decline", "nextStep": "Applicant Update" },
{ "name": "Exceeds Threshold", "nextStep": "Additional Review", "display": "false" },
{ "name": "Terminate", "nextStep": "Terminated Initial" }
]
The Anne's Update action is a previous step. The following shows the routes for the Applicant Update step. When the Initial Review declines it will be sent back to the Initial Review, and same with the Additional Review.
"routes": [
{ "name": "Update", "nextStep": "##PREVIOUS_STEP" },
{ "name": "Terminate", "nextStep": "Terminated Applicant" }
]
Now, you can run the example and see how collaboration job works.
The routes in the form use radio buttons. If you use more that one radio button groups to control the Route Name, see collaboration job configuration in Composer.
Because the loan amount was greater that $20,000, the collaboration job is routed to Mike.
Below is the summary of what is visible and editable in each application form section.
Section | Start | Initial Review | Additional Review | Application Update |
---|---|---|---|---|
User Details | Editable | Read Only | Read Only | Editable |
Request | Editable | Read Only | Read Only | Editable |
Request - Choose | Hidden | Hidden | Hidden | Visible |
Approve | Hidden | Visible | Visible | Hidden |
This concludes the example.
You can download the complete code example here.
Next, learn about customer onboarding collaboration jobs.