๐งญ Introduction
Approvals are at the heart of every organizationโs internal control and compliance process. Whether itโs a Purchase Order, Expense Report, or Sales Discount, NetSuite provides a visual automation tool called SuiteFlow to manage these approvals seamlessly.
While a simple one-level approval might work for smaller companies, larger organizations need multi-level, conditional, and parallel approval workflows to match their structure.
This guide will show you how to:
โ
Design multi-tier approval chains
โ
Create conditional approval routing (by department or amount)
โ
Send email alerts and record changes automatically
โ
Build audit-ready approval tracking
๐ก What Is an Approval Workflow?
An Approval Workflow in NetSuite defines how a transaction moves from submission to approval or rejection.
Each step can trigger an action โ updating a field, locking the record, or sending notifications.
SuiteFlow enables you to:
- Automate record approval based on rules
- Assign tasks to users or roles
- Prevent unauthorized edits
- Maintain an audit trail for compliance
๐งฉ Key Concepts
| Term | Meaning |
|---|---|
| Workflow States | Distinct stages (Pending Approval โ Manager Review โ Approved) |
| Transitions | Conditions that move a record between states |
| Actions | Automated operations (Send Email, Set Field, Lock Record) |
| Conditions | Logical checks (e.g., Total > 5000) |
| Buttons | User-triggered actions (Approve / Reject) |
โ๏ธ Step-by-Step: Building a Multi-Level Approval Workflow
1๏ธโฃ Create a New Workflow
- Navigate to Customization โ Workflow โ Workflows โ New
- Record Type: Purchase Order
- Name: Purchase Order Approval Workflow
- Initiation: On Create & On Edit
- Release Status: Testing
2๏ธโฃ Add Workflow States
Define your stages clearly:
- Pending Approval
- Manager Review
- CFO Approval
- Approved
- Rejected
๐ก Tip: Keep state names intuitive; theyโll appear in the UI.
3๏ธโฃ Set Entry Conditions
In the main workflow definition, add entry criteria:
Status = Pending Approval
AND Total > 0
This ensures the workflow triggers only for new or editable records awaiting approval.
4๏ธโฃ Configure Pending Approval State
Actions to Add:
- Set Field Value: Status โ Pending Approval
- Send Email: Notify Manager (use
${transaction.createdby}as sender) - Lock Record: Prevent edits during review
Transition โ Manager Review
Condition: Total >= 5000
5๏ธโฃ Configure Manager Review
Actions:
- Add โApproveโ and โRejectโ buttons
- Set
Next Approverfield to CFO (if Total > 25,000)
Transition โ CFO Approval
Condition: Total >= 25000
Else โ Approved
6๏ธโฃ Configure CFO Approval
Actions:
- Send notification to CFO
- Unlock Record if Approved
- Set custom field
custbody_approval_status = Approved
Transition โ Approved
๐งฎ Example: Parallel Approvals (Finance + Operations)
To build parallel approvals, create two approval states:
- Finance Approval
- Operations Approval
Add a field flag on record:custbody_finance_approvedcustbody_ops_approved
Transition โ Final Approval
Condition:
{custbody_finance_approved} = true AND {custbody_ops_approved} = true
โ Both teams can approve independently, and the record finalizes automatically.
๐ง Example: Conditional Approvals by Department
Use formulas to route approvals dynamically:
CASE
WHEN {department} = 'Sales' THEN 'Sales Director'
WHEN {department} = 'Finance' THEN 'CFO'
ELSE 'Operations Manager'
END
Use this in a transition condition or custom field to select approver role.
๐ฌ Email Notifications
Add โSend Emailโ actions in each state.
Use dynamic FreeMarker variables for personalization:
<p>Dear ${approver.firstname},</p>
<p>You have a new Purchase Order (#${transaction.tranid}) awaiting approval.</p>
<p>Total Amount: ${transaction.total}</p>
<p><a href="${transaction.url}">View Record</a></p>
โ Helps keep approvers informed and ensures faster action.
๐ Tracking & Reporting Approvals
Option 1 โ Saved Search:
- Type: Transaction โ Purchase Order
- Add Filter:
Approval Status = Pending / Approved - Columns: Approver, Amount, Date Approved
Option 2 โ SuiteAnalytics Workbook:
- Create dataset using fields:
Total,Approver,Status - Add pivot table: Approvals by Department
- Add chart: Average Approval Time by Amount
๐ Best Practices
โ
Always lock records during approval to avoid mid-process edits.
โ
Use clear email templates and roles (no personal emails).
โ
Document approval thresholds (Manager = up to $25k, CFO > $25k).
โ
Test all paths in Sandbox before release.
โ
Keep workflow versions โ donโt overwrite working ones.
โก Common Issues & Fixes
| Issue | Cause | Fix |
|---|---|---|
| Workflow not triggering | Wrong status or initiation type | Use On Create & On Edit |
| Approver not receiving email | Recipient field misconfigured | Use Employee Field โ Next Approver |
| Record stuck in state | Missing transition condition | Add default transition path |
| Approval skipped | Condition overlap | Use exclusive ranges (e.g., 0โ5000, 5001โ25000) |
๐งฐ Optional: Hybrid Workflow + SuiteScript
You can enhance SuiteFlow using a Workflow Action Script for complex logic.
Example โ Set dynamic approver from department head:
/**
* @NApiVersion 2.1
* @NScriptType WorkflowActionScript
*/
define(['N/search', 'N/record'], (search, record) => {
const onAction = (context) => {
const rec = context.newRecord;
const dept = rec.getValue('department');
const deptHead = search.lookupFields({
type: 'department',
id: dept,
columns: ['custrecord_department_head']
}).custrecord_department_head[0].value;
rec.setValue('nextapprover', deptHead);
};
return { onAction };
});
โ SuiteScript + Workflow together = maximum flexibility.
๐ Related Tutorials
- ๐ Creating Dynamic Email Templates in NetSuite
- ๐ SuiteScript Security & Governance Best Practices
- ๐ Integration Logging Dashboard for Monitoring
โ FAQ
Q1. Can I use workflows for Expense Reports or Journal Entries?
Yes โ any record type that supports SuiteFlow can have an approval workflow.
Q2. Can workflows handle imported records?
Yes, if Trigger on Create is checked.
Q3. Can I add time-based escalation (auto-approve)?
Yes โ use a Scheduled Action that sets status = Approved after X days.
Q4. How can I track who approved?
Add custom field custbody_approved_by and set via workflow or script.
๐งญ Summary
Advanced Approval Workflows in NetSuite empower businesses to automate complex decision chains with transparency and control.
By leveraging SuiteFlowโs visual builder, conditional routing, and email automation, you can create a scalable approval system that aligns with corporate policies โ and is fully audit-ready.
From purchase approvals to cross-department sign-offs, this setup ensures your organization runs faster, smarter, and more compliantly.
Leave a Reply