The quick answer
For a server-triggered workflow formula, use the concatenation operator || or nested two-argument CONCAT calls. CONCAT(field1,field2,field3) supplies too many arguments. Verify the source fields separately; this example uses three scalar text values.
Before you start
This is a synthetic local exercise, not an account deployment. Formula Lab runs an actual bounded scalar parser against explicit text stand-ins. The prepared order model evaluates the saved workflow action against that order's values. Neither proves production workflow execution.
The original forum question included two List/Record fields. Their display-text conversion and field tokens are outside this walkthrough. Do not infer that concatenating an internal ID produces its display name.
Existing SO-9921 for Pine Ridge Services already has an assigned order number, text PO # PO-784 and Memo Priority shipment. The prepared stored Free-Form Text destination Reference Label starts blank. Build Order Reference Label is a Testing workflow for the current owner, with On Create clear, On View Or Update enabled and initiation Trigger Type Before Record Submit. The workflow is saved for Sales Orders, State 1 is the reachable start state and the action is enabled. A native account also needs an applicable, enabled workflow and the correct execution eligibility; Testing here uses the current owner. Field creation and workflow deployment are not shown.
Oracle documents server-triggered workflow formulas as SQL expressions. Client-triggered actions have a separate formula context. The recorded controls use an older product-video reference; current account forms can differ.
01 · Inspect the three arguments
Open the existing local order. Confirm its number, PO #, memo and blank Reference Label. Its single Site Inspection row is quantity 2 at 40.00, total 80.00.
In Formula Lab, click Evaluate formula with the initial expression:
CONCAT({tranid},{otherrefnum},{memo})
The local result says Invalid Expression and shows the two-argument signature. Oracle's CONCAT reference takes char1 and char2.
02 · Test the expression
Replace the expression with:
{tranid}||' / '||{otherrefnum}||
' / '||{memo}
The line break is only formatting; the entered expression is equivalent on one line. Click Evaluate formula. The three explicit text values produce SO-9921 / PO-784 / Priority shipment.
With this expression, the literal separators remain when a source evaluates as blank. A blank PO # would produce SO-9921 / / Priority shipment. Conditional separators require separate tested logic.
03 · Save the server action
Open Build Order Reference Label, select State 1, then its existing Set Field Value action. Confirm Trigger On: Before Record Submit. This is the action's server-side trigger; initiation settings, conditions and execution eligibility still determine whether the action is reached.
Under Parameters, the prepared destination is Reference Label, and Formula is selected. Expand the Formula box using its native resize handle if needed to see the entire expression. Replace the invalid expression with the same tested || expression. Click Save, reopen the action and inspect the retained Formula. Close it with Cancel.
04 · Submit and reload
Return to SO-9921 and click Edit. Reference Label is still blank before submission: in this prepared exercise, saving configuration has not updated this existing order. Click Save. The local workflow model now evaluates the saved action on the existing-record update.
In this local model, reload the View page. Reference Label retains SO-9921 / PO-784 / Priority shipment.
Check Items. Pine Ridge Services still has Site Inspection, quantity 2, rate 40.00 and amount 80.00. No new order or fulfillment was created.
Common questions
Why does three-argument CONCAT fail?
Oracle-style CONCAT takes two operands. Nest two-argument calls or use || to combine more values in this server-side SQL formula context. The recording enters ||; nested CONCAT is an alternative, not a separately demonstrated workflow.
Does this convert List/Record fields to display names?
No. All demonstrated sources are scalar text. Establish the correct field tokens and display-value behavior in the intended account separately; do not invent .id, .text or colon syntax.
Can I use this formula in After Field Edit?
Do not copy a server SQL expression into a client-triggered formula context. This prepared action uses Before Record Submit. Check the supported syntax for the actual trigger and action.
Why use an existing order?
Its transaction number is already assigned. This does not establish when an automatically generated number becomes available during every Create/save context.
Does opening the order populate the label?
Not in this prepared workflow. Its initiation and action are tied to submission. The exercise saves an existing edit, then reloads the stored result; real accounts can have other automation.