Approval Workflow Components
A basic approval workflow requires these minimum components:
State 1: Waiting for Approval
→
State 2: Approved
State 1: Waiting for Approval
→
State 3: Rejected
- Entry State: Waiting for Approval (where records wait for action)
- End States: Approved and Rejected (logical endpoints)
- Transitions: At least 2—one for approval, one for rejection
- Optional: Transition from Rejected back to Waiting for re-approval
Step-Based Approach to Building Approvals
Step 1: Create States and Buttons
- Create each state (Waiting, Approved, Rejected)
- Configure Add Button actions in Waiting state
- Configure transitions to end states
- Test with Workflow History to verify flow
Step 2: Restrict Actions with Conditions
Add conditions so only the approver sees the buttons. May require a workflow field to store the current approver identity.
Step 3: Adjust Display Characteristics
Lock records or hide fields at end states to prevent unauthorized modifications.
Step 4: Define Approval Statuses
Create a custom list for approval statuses and set values at each state transition.
Step 5: Add Notifications
Configure Send Email actions to notify approvers of pending items and submitters of approval status.
Key Approval Actions
Add Button
Adds custom buttons (Approve, Reject) to the record form. Buttons trigger transitions to other states.
Triggers: Before Record Load, Entry
Remove Button
Removes standard NetSuite buttons. Cannot remove custom buttons—delete/inactivate the Add Button action instead.
Triggers: Before Record Load, Entry
Lock Record
Makes record read-only by removing Edit button. Add to each state where locking is needed.
Triggers: Before Record Load, Entry
Send Email
Sends notifications to approvers (pending items) and submitters (status updates).
Triggers: After Record Submit only
Understanding End States
End states have no outgoing transitions. There are two types:
Exiting End States (Default)
- Workflow continues processing on record visits
- Actions execute every time record transitions to the state
- Shown with end arrow in Workflow Manager
Non-Exiting End States
- Halts further processing after actions complete
- Freezes record at this state
- Commonly used to prevent modifications after approval
- Enable via "Do Not Exit Workflow" checkbox
- Shown with cyclical icon in lower-left corner
✅ When to Use Non-Exiting
Approved state: Use non-exiting + Lock Record to prevent modifications.
Rejected state: Leave as exiting so records can return to Waiting for Approval.
💡 Execution Log Benefit
Non-exiting end states result in cleaner execution logs—only one entry for initial workflow execution instead of entries every time the record is viewed.
Configuring Button Transitions
When using buttons to trigger transitions, configure the Transition On field appropriately:
- Create Add Button action with button label (e.g., "Approve Review")
- Draw transition from current state to target state
- Edit transition and set Transition On = Entry
- In the Initiate Condition, select the button that triggers this transition
⚠️ Transition On for Buttons
When configuring button-triggered transitions, Transition On should typically be set to Entry or left blank, not Before/After Record Submit.
Multi-Level Approval with Looping
For hierarchical approvals (e.g., manager → director → VP), use looping logic:
Pattern: Check for More Approvers
State 1: Waiting for Approval
→
State 1A: More Approvers?
→
State 2: Approved
↑ Loop back if more approvers ↩
- Create a workflow field to track "Current Approver"
- When approved, transition to "More Approvers?" state
- In that state, check if supervisor exists (join to Employee record)
- If supervisor exists: Set Current Approver = Supervisor, transition back to Waiting
- If no supervisor: Transition to final Approved state
📋 Supervisor Hierarchy
Use a record join to access the Employee record's Supervisor field. When Current Approver's Supervisor is empty, all approvals are complete!