Multiple Approvals on a Single Record

You can set up a record to request a single approval or multiple approvals. If you request multiple approvals, you can do it in one of two ways:

  • Single approval status field

  • Multiple approval status fields (one for each approval)

Single Approval Status Field for Multiple Approvals

If you use a single approval status field (for example, one named "Approval Status"), then each stage of the approval process is requested individually, one after the other. After each approval is requested and obtained, the field is set to Approved. When the record is resubmitted for the next approval, the field is set to Pending Approval and the process is repeated until all required approvals are obtained.

Using Multiple Approval Status Fields for Multiple Approvals

The best practice is to use multiple approval status fields, which makes it easier to differentiate each approval on the record. This is especially true if some business logic depends on each approval.

Multiple approvals are processed in serial fashion; you can submit a new approval only after the previous approval process on the record has been completed.

Here's an example of how you might set up multiple approval status fields.

  1. Start by creating a fixed choice list (for example, Stage Status) including each record that will need approval. In this example, these are:

    • Technical Proposal

    • Financial Proposal

    • Contract

  2. Next, create a fixed-choice list including each approval status (you can use the standard list values from ZCX_HOLD_STATUS):

    • Technical Approval Status

    • Financial Approval Status

    • Contract Approval Status

  3. Create a new BPM process using Default Serial Approval Process.

  4. Create three workflows with the following criteria:

    • heldEntityStatusField = 'TechnicalApprovalStatus_c'OWF criteria: isAttributeChanged('StageStatus') && StageStatus = 'Technical Proposal'

    • heldEntityStatusField = 'TechnicalApprovalStatus_c' OWF criteria: isAttributeChanged('StageStatus') && StageStatus = 'Technical Proposal'

    • heldEntityStatusField = 'ContractApprovalStatus_c' OWF criteria: isAttributeChanged('StageStatus') && and StageStatus = 'Contract'

For the first approval, the Sales officer prepares the Technical Proposal document with revenue lines and sends it for manager approval. After it is approved, the Technical Approval Status field is changed to Approved. The same document is submitted to the customer for signature.

For the second approval, the sales officer prepares the Financial Proposal document (which lists payment terms) and submits it for approval by the Regional Manager and the CEO. After it is approved, the Financial Approval Status field is changed to Approved. The same document is submitted to the customer for signature.

For the third approval, after several stages in Opportunity, the Contract document is prepared and sent for approval by the CEO and Regional Manager. After it is approved, the Contract Approval Status field is changed to Approved. The document is submitted to customer for contract activation. If the customer rejects the terms, revise the contract and repeat the third approval process.

Error Behavior

If multiple approvals are submitted in parallel, then error notifications should be sent to the opportunity owner, who can manually ensure that the approval is resubmitted after the current approval is completed.