Multi-Step Group Review Collaboration Jobs

   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.

Configure a Form

Below is the Job Example 2 form, which is built using our Composer product.

Configure Manager

  1. Open the Job Example 2 form.
  2. Select the form version 3 because it has the following features:
    • The visibility and editability rules based on the collaboration job step.
    • The radio buttons.
    • The job service template.
  3. Click Services of the latest form version to configure its job controller service and select the Review and Approval - Multi Step Group Review - v1 from the Job Controller Service dropdown list as the template.
  4. Select the Job Properties tab to configure the Reviewer Groups as shown below. Properties can use data extracts and other model elements.
  5. Check the Review and Approval - Multi Step Group Review job controller's definitions, as shown below.
  6. {
      "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')" }
              ]
            }
          ]
        }
      ]
    }

Configure Users and Groups

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.

Route Options

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:

  • Below or equal to threshold the route stays as Approved and is routed to Application Delivery then to the Approved Complete endpoint.
  • Above the route is changes to Exceeds Threshold and is routed to the Additional Review.

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.

Form - Anne

  1. Log on to Journey Space as Anne.
  2. Fills in the personal details.
  3. Enter the desired loan amount and the reason for the loan.
  4. Click Submits.

Initial Review - Roger

  1. Log on to Journey Space as Roger.
  2. Check the group task, claim it and open it for the review.
  3. Review the applicant details' section.
  4. Review the application loan amount and the reason for the loan.
  5. The application doesn't have sufficient information to justify the loan, so Roger decides to decline the application. He selects the Decline radio button and adds a comment for Anne "What car do you want?".
  6. The application goes back to Anne, so she can update or terminate (cancel) it.
Note

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.

Applicant Update - Anne

  1. Log on to Journey Space as Anne.
  2. Check the tasks assigned to her.
  3. Open the form and select the Request page that now has the Choose section so Anne can either update or terminate (cancel) the application.
  4. Select the Update radio button to provide the required additional information, such as the new car make in the Reason For Loan field.
  5. Clicks Submit.

Initial Review - Roger

  1. Log on to Journey Space as Roger.
  2. View the updated task.
  3. Click Claim and Open to view the Request - Reason For Loan section. The updated comment is sufficient, so the application can be approved.
  4. Select the Approve radio button to approve the application.

Additional Review - Mike

Because the loan amount was greater that $20,000, the collaboration job is routed to Mike.

  1. Log on to Journey Space as Mike.
  2. View the task.
  3. Click Claim and Open and review the Personal Details and Request sections.
  4. Navigate to the Approval section and select the Approve radio button.
  5. The application is approved now so the applicant loan will be served.

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.

Download

You can download the complete code example here.

Next, learn about customer onboarding collaboration jobs.