Skip to main content

Approval Process Design Canvas

The approval process design canvas defines how an approval starts and flows: record triggers, approval rules, data changes, human tasks, conditional routing, service calls, notifications, external callbacks, and completion paths.

Open Approval Process Management, then choose Open approval process design canvas on a process.

The canvas has four parts:

PartLocationResponsibility
Top actionsCanvas top barBack, trigger method, copy, save, publish, save and publish, and the current version
Node libraryLeftAdds approval, data processing, human processing, condition, message, service call, and wait callback nodes
CanvasCenterArranges nodes and connects processing routes
Configuration panelRightEdits the selected node, connection, or trigger settings

1. Top Actions​

ActionDescription
BackReturns to approval process management; unsaved changes require confirmation first
Current versionShows the version currently loaded in the designer
Trigger methodOpens the process trigger settings without selecting a node
CopyValidates the current canvas and creates a separate draft process from it
SaveCreates a new draft version from the current canvas
Save & publishCreates and immediately publishes a new version
PublishPublishes the selected saved draft or archived version when there are no unsaved changes

2. Trigger Method​

At least one trigger must be enabled before the process can be saved.

TriggerBehavior
Trigger on createStarts the process when a record is created in the related form
Trigger on updateStarts the process when a related-form record is edited
Trigger on deleteStarts the process when a related-form record is deleted
Trigger from form buttonStarts the process when the configured custom button is selected for a related-form record

Update triggers support three modes:

ModeBehavior
Every updateEvery edit can start the process
Only when selected fields changeStarts only when at least one configured field changes; at least one field must be selected
Only when condition matchesStarts only when the configured related-form condition evaluates as matched

Trigger From A Form Button​

Use a button trigger when approval must be an explicit business action, such as “Submit contract”, “Request review”, or “Apply for release”.

  1. Open Button Design for the process's related form, then create and enable a custom button.
  2. Select View Page - Header, List Page - Row Action, List Page - Batch Action, View Page List - Row Action, or View Page List - Batch Action. The placement determines the applicable page: view-page placements use View Page, and list-page placements use List Page.
  3. Return to the approval design canvas and open Trigger method.
  4. Enable Trigger from form button, select the custom button, then save and publish the approval process.
  5. Select the button at its configured location. For a batch action, select the records first.

The button location determines which records enter approval:

Button locationApproval target
View Page - HeaderThe current record on the view page
View Page List - Row ActionThe record in that view-page list row
View Page List - Batch ActionOnly the records selected in that view-page list
List Page - Row ActionThe record in that list-page row
List Page - Batch ActionOnly the records selected on the list page

A View Page List can be a child-form list or a related-form list. Its button belongs to the form represented by that list, so it starts the approval process published for that form. The approval target is the row record or selected list records—not the main record displayed on the view page. Each selected record creates its own approval submission and instance when the trigger conditions match.

The button selector only lists enabled custom buttons whose placement and applicable page are valid. If the selected button is deleted, disabled, or moved to an incompatible placement or applicable page, the process cannot be saved or published until a valid button is selected.

Reopening the trigger settings reuses the loaded custom button list for the same related form.

A button trigger records the member who clicked it. Later nodes can use Variable → Button clicker while the button trigger is enabled. Disabling it clears existing Button clicker selections on the canvas and keeps other people and field settings.

Button-triggered approval is submitted on the server. When the same click also matches button-triggered automation, approval submissions, automation executions, and their background-work commands are committed together. If any selected record fails submission validation, none of those workflow submissions are committed. After a successful submission, background workers continue running them even if the page is closed. Automation starts independently and does not wait for the approval result.

3. Node Library​

NodePurpose
StartEntry point; the canvas keeps exactly one start node
ApprovalCreates approval tasks for one or more approvers
Data ProcessingCreates a record, or updates the current record and its related data
Human ProcessingLets the configured handlers complete a form data task
BranchRoutes data to matched and unmatched paths
Service CallRuns a Studio script or a published service-call OpenLink integration flow
MessageSends a configured Approval Center message
Wait CallbackPauses the process until an external callback is correlated to the instance
EndMarks a normal completion point; the canvas keeps exactly one end node

The canvas keeps one start node and one end node, and a message node can act as a notification terminal without an outgoing connection.

4. Node Configuration​

Approval Node​

Approval nodes configure task assignment and decision behavior.

SettingDescription
ApproversSelect members or other available principals from the approval directory; at least one approver is required
Approver availabilityEither block when approvers cannot be resolved, or route to configured fallback approvers
Fallback approversRequired when fallback routing is selected
Approval modeParallel creates the approval tasks together; serial processes approvers in order
Serial approval orderSerial approval only; drag approvers to set the order, and approvers resolved from form fields run after the fixed members
Decision policyParallel approval supports any one, everyone, or at least N approvals; serial approval requires everyone in sequence
Allow approveAllows approvers to approve the instance
Allow rejectAllows approvers to reject the instance
Allow returnAllows approvers to return the instance
Allow withdrawAllows the initiator to withdraw while the process is pending at this approval step
Required commentsControls whether approve, reject, or return actions require a comment
Due inSets a task deadline in minutes, hours, or days; it takes effect with an enabled policy in Approval Center > Timeout Policies

An approval node has exactly one continuing route, and it must be the approved route. Rejected and returned decisions finish the instance with that outcome.

For button triggers, the Configure people dialog for primary and fallback approvers offers Button clicker under Variable. It hides Data field when no member fields are available.

Data Processing Node​

Data processing nodes write form data while the process runs.

SettingDescription
OperationCreate data creates a record; Update data updates the current related-form record and its related data
Target formRequired for Create data; only enabled forms can be selected, and the assignment list follows the selected form
Submit approval after createStarts the form approval of the new record after it is created
Field assignmentsFields written by the node; each assignment selects a field and one value source: a fixed value, an empty value, a field of the triggering record, or the output of an upstream node. Required fields are added automatically and cannot be removed

Creating data requires the Created By system field, and updating data requires Updated By; the created-by field cannot be assigned when updating.

For button triggers, Button clicker is available as a trigger source for field assignments. It writes the clicking member's ID.

Human Processing Node​

Human processing nodes create a form data task for the configured handlers before the process continues.

SettingDescription
HandlersRequired; fixed members, related-form fields that resolve to the handlers, or the button clicker for button triggers
TargetWhat the handlers work on: edit the current data, create new data, edit related form data, or select existing data and link it
Target formRequired when creating data, editing related form data, or linking existing data
Required when creatingMarks the data created by the node as required
Related fieldRequired when editing related form data or linking existing data; it links the current record with the target form
Fields to processFields the handlers fill in; required when editing the current data or editing related form data
Default valuesValues applied when the handler creates data
Trigger form approval after submitAvailable when the node creates data or edits related form data

For button triggers, the Configure people dialog lists Button clicker under Variable. It hides Data field when no member fields are available.

Branch Node​

Branch nodes read fields from the related form and route the process through two required outputs: Matched (Y) and Unmatched (N).

Conditions support nested AND/OR groups and operators such as equals, not equals, contains, comparison, in, empty, and not empty. Available value editors depend on the selected field type.

A branch node must contain at least one valid condition and exactly one connection for each matched and unmatched output. When the upstream path has already passed through a wait callback node, a later branch can also evaluate the callback outcome.

Service Call Node​

Service call nodes run an internal capability or call an external system while the approval runs. Pick the mode by what the target is:

ModeRequirements
Studio ScriptCall tenant capabilities such as context.form.* and context.http.*; the script must exist in the current space and be published before it can be selected
Integration FlowSelect a published service-call inbound or outbound OpenLink flow whose local form matches the approval process related form

Set Up A Studio Script Call​

  1. In Soln Studio, create the script and publish it; the approval node can only select published assets
  2. Add a Service Call node on the canvas and set the mode to Studio Script
  3. Select the script asset and its entry file
  4. Read the payload preview in the configuration panel and check that every field API name the script reads exists in record.data
  5. Connect one incoming route and one outgoing route, then save and publish the process

Set Up An Integration Flow Call​

  1. In OpenLink, create an inbound or outbound flow, set its trigger to Service Call, and bind the same local form as the approval process
  2. Save, publish, and enable the flow
  3. On the canvas, add a Service Call node and set the mode to Integration Flow
  4. Select the published flow; the picker only lists flows that are published, use the service-call trigger, and match the related form
  5. Connect one incoming route and one outgoing route, then save and publish the process

What The Target Receives​

The node sends the same soln.runtime-context/v1 context to a script and to an OpenLink flow. The configuration panel shows a copyable preview for the current process.

FieldPurpose
record.idRecord attached to this approval
record.dataRelated-form values at the moment the node runs, keyed by field API name
form.apiNameAPI name of the related form
source.instanceId, source.nodeKeyCurrent approval instance and node
source.triggerRecord action and changed fields that started the approval
source.callbackLatest callback result when an upstream wait callback has completed
runtime.traceIdStable trace ID of this node execution; use it as the idempotency key of an external request

Runtime Behavior​

ResultEffect
The script or flow finishes successfullyThe node completes and the process continues along its outgoing route
The script returns a failure (ok: false, success: false, or a status of failed, failure, error, or rejected), throws, or its published entry file is unavailableThe node blocks and the instance waits at this node
The flow execution failsThe node blocks in the same way; fix the cause and retry, and the retry re-runs the same instance and node

Service call nodes require one incoming connection and exactly one outgoing connection. A missing script or integration flow prevents saving and publishing.

Troubleshooting​

SymptomWhat to check
The script or flow is not in the pickerThe asset must be published, the flow must use the service-call trigger, and its local form must equal the related form of the process
The node is blocked after publishingRead the execution logs: a script error, a failure return value, or a flow execution error all block the node
The script cannot read a fieldField API names must match the preview; record.data is a snapshot taken when the node runs
The external call runs twiceUse runtime.traceId as the idempotency key of the external request

Message Node​

Message nodes use the Approval Center message channel and an active inbox-capable message template. The delivery type is fixed to Inbox message and the channel is fixed to the Approval Center, so the node always sends into the Approval Center inbox.

Recipient sources include:

  • Process context: initiator, submitter, or current approval assignees
  • Fixed members
  • A compatible recipient field from the related form
  • Variable → Button clicker for button triggers

A message node requires a template and a complete recipient configuration. It can continue to another node or act as a notification terminal without an outgoing connection.

The recipient Configure people dialog hides Data field when no member fields are available. Message template input mappings can also read source.trigger.buttonClickerId.

Wait Callback Node​

Use a wait callback when an external system accepts a job first and returns the result later: the process starts the external work, waits, and resumes when the callback arrives.

Service Call → Wait Callback → next node

Do not place a condition, message, or approval node between the service call and the wait callback.

Prepare The Callback Flow​

  1. In OpenLink, create an inbound flow and set its trigger to Webhook
  2. Bind the same local form as the approval process
  3. Set the target action to Complete Workflow Callback
  4. Save, publish, and enable the flow
  5. Copy the Webhook URL that the flow exposes; the wait callback node shows the same address

A service-call flow cannot be used as the callback endpoint.

Configure The Node​

  1. Connect Wait Callback directly after the service call node that starts the external work
  2. Select the published inbound Webhook flow
  3. Configure the correlation key template; the default value is {{data.record.id}}
  4. Pass the rendered key to the external system and require it to return the same value
  5. Connect exactly one outgoing route, then save and publish the process

The key must identify exactly one pending wait inside the same tenant and callback flow. When one record can have several waiting approvals at the same time, build the key from the approval instance or the external task identity instead of the record alone.

What The External System Sends​

The external system posts the callback to the Webhook URL shown in the panel:

{
"callbackId": "review-result-8f1d31",
"correlationKey": "record-7c831b",
"status": "succeeded",
"result": { "decision": "approved", "comment": "Risk review passed" },
"error": null,
"completedAt": "2026-09-10T08:30:00.000Z"
}
FieldRequiredDescription
callbackIdYesUnique identifier of this callback from the external system
correlationKeyYesMust exactly match the rendered correlation key
statusYesMust be succeeded; approval callbacks do not accept failed or canceled
resultYesCallback result object
result.decisionNoapproved, rejected, or returned; it decides how the process continues
errorYesMust be null on success
completedAtNoISO date-time or null

A matching callback completes the wait node and resumes the approval instance. When the external job fails, keep it retryable or return a successful callback that carries a routable business outcome in result.

Route On The Callback Result​

Place a branch node after the wait callback and select the Callback Result field to branch on approved, rejected, or returned. The field is available only when the branch upstream path has passed through a wait callback node; later service-call and message nodes can also read the last result from source.callback.

Troubleshooting​

SymptomWhat to check
The instance stays at the wait nodeThe external system must post to the Webhook URL with the exact correlationKey; the callback flow must be published and enabled
WORKFLOW_CALLBACK_WAIT_NOT_FOUNDThe correlation key does not match a pending wait in this tenant and flow, or the key template renders a different value than the one sent out
WORKFLOW_CALLBACK_WAIT_NOT_UNIQUESeveral waits share the same key; include the approval instance or external task identity in the key
The callback is rejectedstatus must be succeeded, error must be null, and the callback must belong to an approval wait
The branch node has no callback result fieldThe branch is not downstream of a wait callback node

The full payload, callback contract, and script examples are documented in Workflow Integration.

5. Validation, Saving, And Publishing​

Canvas Validation​

Copying, saving, or publishing requires a valid canvas. Key checks include:

  • Exactly one start node and one end node
  • At least one create, update, delete, or form-button trigger is enabled
  • An enabled form-button trigger selects an enabled custom button with a placement and applicable page supported by the related form
  • The start node has no incoming connection and exactly one outgoing connection
  • Every non-start node is reachable from the start node
  • Every node except the start node has exactly one incoming connection
  • Approval, data processing, human processing, condition, service call, and wait callback nodes have exactly one outgoing connection, connected from another side of the node
  • Approval nodes have exactly one outgoing connection and it carries the approved result
  • Every condition has at least one rule and complete matched and unmatched routes
  • Data processing nodes have an operation, a target form when creating data, at least one field assignment, and the required created-by or updated-by field
  • Human processing nodes have handlers, a target, the target form and related field required by that target, and the fields to process when they edit data
  • A wait callback is directly preceded by a service call
  • Message templates, recipients, scripts, integration flows, and correlation keys are complete
  • Every route can reach the end node or a terminal message node

Save And Publish​

ActionDescription
SaveCreates a new draft version from the current canvas
Save & publishCreates and immediately publishes a new version
PublishPublishes the selected saved draft or archived version when there are no unsaved changes

A process has a runnable version only after publishing, and its status is managed in Approval Process Management.

Copy The Current Process​

Click Copy to create a new approval process from the current valid graph and trigger configuration. The copy dialog asks only for a new name and an optional description; Soln generates the new code and keeps the source related form.

Valid unsaved changes on the screen are included. The new process is an independent draft and does not copy publication state, approval instances, tasks, or execution logs.

  1. Configure create, update, delete, or form-button triggers
  2. Add approval nodes and set approvers, availability policy, decision policy, allowed actions, and deadline
  3. Add data processing nodes to create or update form data
  4. Add human processing nodes when a handler must complete a form data task
  5. Add conditions for data-based branching
  6. Add service calls for scripts or integration flows
  7. Add a wait callback only when an external asynchronous result is required
  8. Add message nodes for process notifications
  9. Connect every required route and review the configuration panel warnings
  10. Save a draft version, or save and publish when ready
  11. Test with a related-form record or the configured form button, then review the execution logs