🧭 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 Approver
field 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_approved
custbody_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