Reference Library

Appendices & Checklists

Comprehensive reference materials, interactive examples, and implementation checklists to support your NetSuite journey.

Appendix A: Glossary of NetSuite Terms

A comprehensive dictionary of NetSuite terminology, acronyms, and concepts commonly encountered during implementations.

A
Account
A record in the Chart of Accounts used to categorize financial transactions. Types include Asset, Liability, Equity, Income, Expense, and COGS.
Advanced Revenue Management (ARM)
NetSuite module for ASC 606/IFRS 15 compliance, automating revenue recognition across multiple performance obligations.
Allocation Schedule
A configuration that distributes amounts across multiple segments (subsidiaries, departments, classes, locations) based on defined percentages or formulas.
Approval Routing
Automated workflow that routes transactions to designated approvers based on criteria like amount thresholds, departments, or custom fields.
Assembly Item
An item type representing a finished product manufactured from component items defined in a Bill of Materials (BOM).
Advanced Inventory Management (AIM)
NetSuite module providing advanced warehouse operations including bin management, wave picking, cycle counting, and barcode scanning integration.
AI Connector Service
NetSuite's built-in MCP server that enables AI assistants like ChatGPT and Claude to securely connect and interact with NetSuite data via OAuth 2.0 authentication.
B
Bill of Materials (BOM)
A list of raw materials, components, and quantities needed to manufacture an assembly item. Supports multiple revisions and effective dates.
Bin
A specific storage location within a warehouse location. Used for detailed inventory tracking when Bin Management feature is enabled.
Bundle
A packaged collection of customizations (scripts, records, workflows) that can be installed as a unit. Used for SuiteApps and custom solutions.
C
Cash Basis Accounting
Accounting method that recognizes revenue when cash is received and expenses when cash is paid, as opposed to Accrual basis.
Chart of Accounts (COA)
The complete list of accounts used to record transactions. Shared across all subsidiaries in OneWorld, with account-specific subsidiary restrictions available.
Class
A classification segment used for reporting and analysis. Often used for product lines, business units, or projects. Can be required on transactions.
Client Script
SuiteScript type that runs in the browser, triggered by page load, field changes, line item changes, or record save. Used for real-time validation and UX enhancements.
Committed
Inventory quantity reserved for pending transactions (sales orders, transfer orders). Reduces available quantity but not on-hand quantity.
Costing Method
The method used to value inventory: Average, FIFO (First-In-First-Out), LIFO (Last-In-First-Out), or Standard costing.
CPQ (Configure, Price, Quote)
SuiteApp functionality enabling complex product configuration, pricing rules, and quote generation for sales teams handling configurable products.
Credit Memo
A transaction that reduces a customer's balance. Can be applied to open invoices or refunded to the customer.
CSV Import
Native tool for bulk importing data from comma-separated value files. Supports most record types with field mapping capabilities.
Custom Field
User-defined field added to extend standard NetSuite records. Types include Free-Form Text, List/Record, Date, Checkbox, and more.
Custom Record Type
User-defined record type for storing data not covered by standard records. Fully customizable with fields, forms, and access controls.
Custom Segment
User-defined classification segment beyond standard segments (subsidiary, department, class, location). Creates dedicated GL impact column.
D
Dashboard
A personalized home page displaying portlets (KPIs, reports, shortcuts, reminders) based on role and user preferences.
Dataset
SuiteAnalytics Workbook component for creating reusable data definitions with joins, calculated fields, and filters.
Demand Planning
Module that forecasts future demand based on historical data and allows manual adjustments for promotions or seasonality.
Department
A classification segment typically representing organizational structure (HR, Finance, Sales). Used for budgeting and P&L reporting.
Drop Ship
Fulfillment method where items ship directly from vendor to customer, bypassing your warehouse.
E–F
Elimination
Journal entries that remove intercompany transactions during consolidation to prevent double-counting in combined financial statements.
Entity
A party that transacts with your organization: Customer, Vendor, Employee, Partner, or Contact.
Expense Report
Transaction for employees to submit business expenses for reimbursement. Supports approval workflows, receipt attachments, and GL coding.
Feature
Functionality that can be enabled or disabled at Setup → Company → Enable Features. Some features require additional licensing.
Field-Level Access
Permission setting that controls which roles can view, edit, or hide specific fields on records. Configured per field in customization settings.
FIFO
First-In-First-Out costing method. Assumes oldest inventory is sold first. Required for some industries and jurisdictions.
Formula (Saved Search)
SQL-like expressions in saved searches for calculated fields, conditional formatting, or custom filtering. Uses NetSuite formula syntax based on Oracle SQL.
Fulfillment
The process of shipping items to customers. Item Fulfillment records reduce inventory and trigger shipping integration.
G–H
GL Impact
The debit/credit entries a transaction creates in the General Ledger. Viewable on transactions via the GL Impact subtab.
Governance
System limits on SuiteScript operations (API calls, queries, memory) to ensure fair resource usage across all accounts.
Hypercare
Intensive support period immediately after go-live, typically 2–4 weeks with dedicated on-site or remote assistance.
I–J
Intercompany
Transactions between subsidiaries within the same OneWorld account. Require elimination during consolidation.
Internal ID
Unique numeric identifier assigned to every record in NetSuite. Used in scripts, integrations, and saved searches.
Inventory Adjustment
Transaction that increases or decreases inventory quantities and values without a purchase or sale.
Item Receipt
Transaction that records receipt of items from a purchase order or transfer order, increasing inventory.
Journal Entry
Manual transaction with explicit debit and credit lines. Used for adjustments, accruals, and entries not captured by other transaction types.
K–L
Kit Item
A collection of items sold together but not assembled. Components ship separately and can have different fulfillment locations.
Location
A physical place where inventory is stored or business operates. Can be warehouses, stores, or offices.
Lot Number
Identifier assigned to a batch of items for tracking purposes. Enables traceability for recalls and quality control.
M–N
Map/Reduce Script
SuiteScript type for processing large data sets in parallel. Automatically handles governance and restarts after timeouts.
Mass Update Script
SuiteScript type executed during mass update operations, allowing custom logic to run against each record in the update set.
Matrix Item
Parent item with child items representing attribute combinations (size, color). Simplifies management of product variants.
MCP (Model Context Protocol)
Open standard protocol enabling secure point-to-point communication between AI applications (ChatGPT, Claude) and external systems like NetSuite. Uses OAuth 2.0 for authentication.
MRP (Material Requirements Planning)
Module that calculates material needs based on demand forecasts, generating planned purchase orders and work orders.
Multi-Book Accounting
Feature enabling parallel accounting under multiple GAAP standards (e.g., US GAAP and IFRS) in separate accounting books.
Nexus
Tax jurisdiction where a company has sufficient business presence to require tax collection. Managed in SuiteTax for automated tax determination.
NSAW (NetSuite Analytics Warehouse)
Cloud data warehouse providing pre-built analytics, dashboards, and AI-powered insights on NetSuite data.
O–P
OAuth 2.0
Industry-standard authorization protocol used for secure API integrations. NetSuite supports OAuth 2.0 with PKCE for machine-to-machine and user-delegated access.
OneWorld
Multi-subsidiary edition of NetSuite supporting multiple legal entities, currencies, and tax regimes in a single account.
Order-to-Cash (OTC)
End-to-end process from sales order through invoicing and payment receipt. Key process flow for most implementations.
Permission
Access level (View, Create, Edit, Full) granted to roles for specific record types, features, or transactions.
PKCE (Proof Key for Code Exchange)
OAuth 2.0 security extension that protects against authorization code interception attacks. Required for NetSuite's AI Connector Service authentication.
Portlet
A component on a dashboard displaying specific information (KPIs, saved searches, shortcuts, custom HTML).
Portlet Script
SuiteScript type that creates custom dashboard portlets displaying dynamic content, reports, or interactive elements.
Preference
User or company-level settings that control NetSuite behavior. Managed at Setup → Company → General Preferences or per-user settings.
Procure-to-Pay (PTP)
End-to-end process from purchase requisition through vendor bill and payment. Key process flow for purchasing operations.
PSA (Professional Services Automation)
NetSuite module for services organizations including project management, resource allocation, time tracking, and billing.
Purchase Requisition
Internal request to purchase goods or services. Typically requires approval before converting to a purchase order.
R
Record
A single instance of a record type. For example, Customer ABC is a record of the Customer record type.
RESTlet
Custom SuiteScript endpoint that handles HTTP requests (GET, POST, PUT, DELETE) for integration purposes.
Revenue Recognition
Process of recording revenue in the appropriate accounting period based on earning criteria (delivery, milestones, time).
Role
A defined set of permissions determining what users can access and modify. Users can have multiple roles.
S
Sandbox
A copy of your production account for testing, training, or development. Can be refreshed from production periodically.
Saved Search
Reusable query returning filtered, formatted results. Foundation for reports, portlets, KPIs, and integrations.
Scheduled Script
SuiteScript type that runs on a schedule (hourly, daily, weekly) or on-demand. Used for batch processing, report generation, and maintenance tasks.
Script Deployment
Configuration linking a SuiteScript to specific records, roles, or execution triggers.
SDF (SuiteCloud Development Framework)
File-based development framework for NetSuite customizations. Enables version control, IDE integration, and deployment automation via SuiteCloud projects.
Serial Number
Unique identifier for individual items. Enables tracking of specific units through their lifecycle.
Sourcing
Automatic population of field values based on related record data (e.g., customer address populating on sales order).
Sublist
A tabular section on a record containing line items (e.g., Items sublist on sales orders, Lines sublist on journal entries).
Subsidiary
A legal entity in OneWorld. Can be elimination subsidiaries for consolidation purposes.
SuiteAnalytics Connect
ODBC/JDBC driver enabling direct SQL queries against NetSuite data from external tools.
SuiteApp
A solution built on the SuiteCloud platform, available through SuiteApp Marketplace. Can be Built for NetSuite (BFN) certified.
SuiteBilling
Module for subscription and usage-based billing with automated invoicing and revenue recognition.
SuiteBuilder
Point-and-click customization tools for forms, fields, records, and workflows without coding.
SuiteCloud
NetSuite's development platform encompassing SuiteBuilder, SuiteFlow, SuiteScript, SuiteTalk, and SuiteAnalytics.
SuiteCommerce
NetSuite's e-commerce platform for B2C and B2B web stores. Fully integrated with NetSuite ERP for real-time inventory and order management.
SuiteFlow
Visual workflow builder for automating business processes without code. Supports approvals, notifications, and record updates.
Suitelet
SuiteScript type for building custom pages and forms accessible via URL. Used for custom interfaces, wizards, and external-facing portals.
SuiteQL
SQL-like query language for NetSuite data. More powerful than saved searches with JOIN and aggregate support.
SuiteScript
JavaScript-based programming language for NetSuite customization. Current version is SuiteScript 2.1.
SuiteTalk
Web services API for NetSuite integration. Includes SOAP and REST protocols.
SuiteTax
Modern tax engine supporting automated tax calculation, nexus determination, and compliance reporting.
T–U
TBA (Token-Based Authentication)
Secure authentication method for integrations using consumer key/secret and token key/secret pairs.
Transaction
A record representing a business event: Sales Order, Invoice, Journal Entry, Purchase Order, etc.
Transfer Order
Transaction moving inventory between locations within the same subsidiary.
User Event Script
SuiteScript type triggered by record events (Before Load, Before Submit, After Submit).
V–Z
Vendor Bill
Transaction recording amounts owed to vendors. Can be created from purchase orders or entered directly.
Vendor Credit
Transaction reducing amounts owed to a vendor. Applied to open bills or refunded.
WIP (Work in Progress)
Inventory value of partially completed assemblies or work orders. Tracked in designated GL accounts.
WMS (Warehouse Management System)
NetSuite module for advanced warehouse operations including mobile RF scanning, directed putaway, wave management, and real-time inventory tracking.
Work Order
Transaction initiating the manufacturing process to build an assembly item from its components.
Workflow
Automated process built in SuiteFlow that executes actions based on triggers and conditions.

Appendix B: Keyboard Shortcuts & Navigation

Master NetSuite navigation with these keyboard shortcuts and navigation tips to boost productivity.

Global Shortcuts

These shortcuts work anywhere in NetSuite.

ShortcutActionNotes
Alt + GGlobal SearchQuick access to search box. Type record type and identifier.
Alt + HHome/DashboardReturn to your role's home dashboard.
Alt + AActivities MenuQuick access to calendar, tasks, and events.
Alt + NNew Transaction MenuCreate new transactions without navigation.
Alt + SSave RecordSave current record without scrolling to button.
Ctrl + SSave Record (alternate)Standard save shortcut supported in most browsers.
Alt + EEdit RecordEnter edit mode on current record.
EscCancel/CloseClose popups, cancel edits, or close dialogs.

Global Search Tips

Global Search (Alt + G) is the fastest way to navigate NetSuite. Use these patterns:

Search PatternExampleResult
Record type + name/IDcust ABC CorpFinds customers containing "ABC Corp"
Transaction type + numberinv 12345Finds invoice number containing 12345
Page namechart of accountsNavigates to Chart of Accounts page
go: prefixgo:saved searchesNavigates directly to page
new: prefixnew:salesorderCreates new sales order
Internal IDcust 12345Opens customer with internal ID 12345
Pro Tip: Record Type Abbreviations

Use these common abbreviations in Global Search:

  • cust – Customer
  • vend – Vendor
  • emp – Employee
  • inv – Invoice
  • so – Sales Order
  • po – Purchase Order
  • je – Journal Entry

Form & Record Shortcuts

When viewing or editing records:

ShortcutActionContext
TabNext fieldMove forward through form fields
Shift + TabPrevious fieldMove backward through form fields
EnterSelect/ConfirmIn dropdown: select highlighted option
/ Navigate optionsIn dropdown: move through list
Ctrl + ClickOpen in new tabOn links: open without leaving current page
Alt + DownOpen dropdownOpen list field dropdown
Type charactersFilter dropdownStart typing to filter dropdown options

Sublist Shortcuts

When working with line items on transactions:

ShortcutAction
Ctrl + IInsert new line above current line
Ctrl + DDelete current line
Tab on last columnAdd new line and move to it
Click line numberSelect entire line for editing
Page DownNavigate to next page of lines

Saved Search Shortcuts

ShortcutAction
Click column headerSort by column (toggle ascending/descending)
Ctrl + click columnAdd secondary sort
Click "Export" dropdownExport to CSV or Excel
Click row checkbox + EditBulk edit selected records

Browser Navigation

ShortcutAction
Alt + Back to previous page
Alt + Forward to next page
Ctrl + TOpen new browser tab
Ctrl + WClose current tab
Ctrl + TabSwitch to next tab
F5 or Ctrl + RRefresh page
Ctrl + F5Hard refresh (clear cache)
Browser-Specific Note

Some shortcuts vary by browser. Chrome, Firefox, and Edge have slightly different key combinations. Mac users should substitute Cmd for Ctrl and Option for Alt.

Appendix C: Common SuiteScript Patterns

Reference patterns for common SuiteScript 2.x development scenarios. These examples demonstrate best practices and can be adapted for specific use cases.

Script Types Overview

Script TypeTriggerCommon Uses
User EventRecord load, submit, deleteField defaults, validation, related record updates
ClientPage load, field change, sublist change, saveReal-time validation, field calculations, UX enhancements
ScheduledTime-based (hourly, daily, etc.)Batch processing, reports, data cleanup
Map/ReduceOn-demand or scheduledLarge data processing, parallel operations
RESTletHTTP requestCustom API endpoints, integrations
SuiteletURL accessCustom pages, forms, reports
Workflow ActionSuiteFlow workflowComplex calculations, external calls from workflows
Mass UpdateMass update executionBulk record modifications

User Event Script Template

user_event_template.js
/**
 * @NApiVersion 2.1
 * @NScriptType UserEventScript
 * @NModuleScope SameAccount
 */
define(['N/record', 'N/log'], (record, log) => {

    /** Before record is loaded (view, edit, copy) */
    const beforeLoad = (context) => {
        const { type, newRecord, form } = context;

        if (type === context.UserEventType.CREATE) {
            // Set defaults on new records
            newRecord.setValue({
                fieldId: 'custbody_custom_field',
                value: 'Default Value'
            });
        }
    };

    /** Before record is saved to database */
    const beforeSubmit = (context) => {
        const { type, newRecord, oldRecord } = context;

        if (type === context.UserEventType.CREATE ||
            type === context.UserEventType.EDIT) {
            const amount = newRecord.getValue('total');
            if (amount > 10000) {
                newRecord.setValue({
                    fieldId: 'custbody_requires_approval',
                    value: true
                });
            }
        }
    };

    /** After record is saved to database */
    const afterSubmit = (context) => {
        const { type, newRecord } = context;

        if (type === context.UserEventType.CREATE) {
            log.audit({
                title: 'Record Created',
                details: `ID: ${newRecord.id}`
            });
        }
    };

    return { beforeLoad, beforeSubmit, afterSubmit };
});

Client Script Template

client_script_template.js
/**
 * @NApiVersion 2.1
 * @NScriptType ClientScript
 * @NModuleScope SameAccount
 */
define(['N/currentRecord', 'N/dialog'], (currentRecord, dialog) => {

    /** Page load - runs once when form loads */
    const pageInit = (context) => {
        const rec = context.currentRecord;
        console.log('Form loaded, mode:', context.mode);
    };

    /** Field changed - runs when any field value changes */
    const fieldChanged = (context) => {
        const rec = context.currentRecord;
        const fieldId = context.fieldId;

        if (fieldId === 'entity') {
            const customerId = rec.getValue('entity');
            // Perform lookup or update related fields
        }
    };

    /** Validate line - runs before line is committed */
    const validateLine = (context) => {
        const rec = context.currentRecord;

        if (context.sublistId === 'item') {
            const qty = rec.getCurrentSublistValue({
                sublistId: 'item',
                fieldId: 'quantity'
            });

            if (qty <= 0) {
                dialog.alert({ message: 'Quantity must be positive' });
                return false;
            }
        }
        return true;
    };

    /** Save record - runs before record is saved */
    const saveRecord = (context) => {
        const rec = context.currentRecord;
        const lineCount = rec.getLineCount({ sublistId: 'item' });

        if (lineCount === 0) {
            dialog.alert({ message: 'Please add at least one item' });
            return false;
        }
        return true;
    };

    return { pageInit, fieldChanged, validateLine, saveRecord };
});

Map/Reduce Script Template

map_reduce_template.js
/**
 * @NApiVersion 2.1
 * @NScriptType MapReduceScript
 * @NModuleScope SameAccount
 */
define(['N/search', 'N/record', 'N/log'], (search, record, log) => {

    /** Get input data to process */
    const getInputData = () => {
        return search.create({
            type: 'salesorder',
            filters: [
                ['status', 'anyof', 'SalesOrd:B'],  // Pending Fulfillment
                'AND',
                ['mainline', 'is', 'T']
            ],
            columns: ['entity', 'total', 'trandate']
        });
    };

    /** Process each result (runs in parallel) */
    const map = (context) => {
        const searchResult = JSON.parse(context.value);
        const orderId = searchResult.id;
        const customerId = searchResult.values.entity.value;

        context.write({
            key: customerId,
            value: { orderId, total: searchResult.values.total }
        });
    };

    /** Aggregate mapped results by key */
    const reduce = (context) => {
        const customerId = context.key;
        const orders = context.values.map(v => JSON.parse(v));

        const totalAmount = orders.reduce((sum, o) => sum + parseFloat(o.total), 0);

        log.audit({
            title: `Customer ${customerId}`,
            details: `Orders: ${orders.length}, Total: ${totalAmount}`
        });
    };

    /** Final summary of execution */
    const summarize = (summary) => {
        log.audit('Summary', `Processed in ${summary.seconds} seconds`);

        summary.mapSummary.errors.iterator().each((key, error) => {
            log.error('Map Error', `Key: ${key}, Error: ${error}`);
            return true;
        });
    };

    return { getInputData, map, reduce, summarize };
});

RESTlet Template

restlet_template.js
/**
 * @NApiVersion 2.1
 * @NScriptType Restlet
 * @NModuleScope SameAccount
 */
define(['N/record', 'N/search', 'N/log'], (record, search, log) => {

    /** GET - Retrieve data */
    const get = (requestParams) => {
        try {
            const { type, id } = requestParams;
            if (!type || !id) return { error: 'Missing type or id parameter' };

            const rec = record.load({ type, id });
            return {
                success: true,
                data: {
                    id: rec.id,
                    type: rec.type,
                    name: rec.getValue('entityid') || rec.getValue('name')
                }
            };
        } catch (e) {
            log.error('GET Error', e.message);
            return { error: e.message };
        }
    };

    /** POST - Create record */
    const post = (requestBody) => {
        try {
            const { type, values } = requestBody;
            const rec = record.create({ type });

            for (const [fieldId, value] of Object.entries(values)) {
                rec.setValue({ fieldId, value });
            }

            const id = rec.save();
            return { success: true, id };
        } catch (e) {
            log.error('POST Error', e.message);
            return { error: e.message };
        }
    };

    /** PUT - Update record */
    const put = (requestBody) => {
        try {
            const { type, id, values } = requestBody;
            const updatedId = record.submitFields({ type, id, values });
            return { success: true, id: updatedId };
        } catch (e) {
            log.error('PUT Error', e.message);
            return { error: e.message };
        }
    };

    /** DELETE - Delete record */
    const doDelete = (requestParams) => {
        try {
            const { type, id } = requestParams;
            record.delete({ type, id });
            return { success: true, message: `Deleted ${type} ${id}` };
        } catch (e) {
            log.error('DELETE Error', e.message);
            return { error: e.message };
        }
    };

    return { get, post, put, 'delete': doDelete };
});

Saved Search in SuiteScript

saved_search_pattern.js
// Create and run a search
const customerSearch = search.create({
    type: search.Type.CUSTOMER,
    filters: [
        ['isinactive', 'is', 'F'],
        'AND',
        ['balance', 'greaterthan', 0]
    ],
    columns: [
        search.createColumn({ name: 'entityid', sort: search.Sort.ASC }),
        'email',
        'balance',
        search.createColumn({ name: 'lastorderdate' })
    ]
});

// Run and process results
customerSearch.run().each((result) => {
    const name = result.getValue('entityid');
    const email = result.getValue('email');
    const balance = result.getValue('balance');
    log.debug(name, `Balance: ${balance}`);
    return true; // Continue to next result
});

// For large result sets, use paged execution
const pagedData = customerSearch.runPaged({ pageSize: 1000 });

pagedData.pageRanges.forEach((pageRange) => {
    const page = pagedData.fetch({ index: pageRange.index });
    page.data.forEach((result) => {
        // Process each result
    });
});
Governance Best Practices
  • Check remaining governance units with runtime.getCurrentScript().getRemainingUsage()
  • Use record.submitFields() instead of record.load() + save() when possible (fewer units)
  • Use Map/Reduce for large data sets – handles governance automatically
  • Batch operations in scheduled scripts to stay within limits

Appendix D: SuiteFlow Reference

Quick reference for building workflows in SuiteFlow, NetSuite's visual workflow automation tool.

Workflow Components

Trigger Types

TriggerWhen It FiresUse Case
On CreateWhen new record is createdSet default values, send welcome emails
On UpdateWhen existing record is modifiedApproval routing, field updates
On ViewWhen record is viewedAdd buttons, show messages
Before Record LoadBefore record displaysHide fields, set form context
Before Record SubmitBefore save to databaseValidation, calculated fields
After Record SubmitAfter save to databaseCreate related records, notifications
ScheduledOn defined scheduleBatch updates, reminders

Condition Types

ConditionDescription
Field = ValueField equals a specific value
Field != ValueField does not equal value
Field ChangedField value changed from previous
Field Changed From/ToField changed from X to Y
Field Is EmptyField has no value
User RoleCurrent user has specific role
Formula (Numeric)Custom formula returns true (non-zero)

Action Types

ActionDescriptionExample
Set Field ValueUpdate a field on current recordSet Status to "Approved"
Set Field DisplayHide/show/disable fieldsHide discount field for certain roles
Set Field MandatoryMake field requiredRequire reason when status = Rejected
Send EmailSend email notificationNotify approver of pending approval
Create RecordCreate new related recordCreate task when opportunity created
Transform RecordTransform to another record typeConvert quote to sales order
Add ButtonAdd custom button to form"Request Approval" button
Lock RecordPrevent editingLock approved records
Go To PageRedirect after actionGo to dashboard after submit
Return User ErrorShow error and prevent saveValidation failed message
Custom ActionExecute SuiteScriptComplex calculations, API calls

Common Workflow Patterns

1. Approval Workflow

Approval Workflow Structure
  • State: Draft – Initial state, record editable
  • State: Pending Approval – Awaiting approver action
  • State: Approved – Record approved, may be locked
  • State: Rejected – Returned to submitter
TransitionTriggerActions
Draft → Pending ApprovalSubmit for Approval buttonSet status, email approver, lock fields
Pending → ApprovedApprove button (by approver)Set status, set approved date, email submitter
Pending → RejectedReject button (by approver)Set status, require rejection reason, email submitter
Rejected → DraftResubmit buttonReset status, clear rejection fields

2. Field Validation Pattern

  • Trigger: Before Record Submit
  • Condition: Check field values
  • Action: Return User Error if invalid

3. Auto-Population Pattern

  • Trigger: On Create or Field Changed
  • Condition: Source field has value
  • Action: Set Field Value on target field

4. Scheduled Reminder Pattern

  • Trigger: Scheduled (daily/weekly)
  • Condition: Due date approaching
  • Action: Send Email notification

Formula Examples

Common Workflow Formulas
// Amount greater than threshold
{total} > 10000

// Date is in the past
{duedate} < {today}

// Days until due date
{duedate} - {today}

// Field is not empty
NOT ISEMPTY({custbody_approval_notes})

// User is in specific role
{currentrole} = 3  // Administrator role ID

// Multiple conditions
{status} = 'Pending' AND {total} > 5000

// Check subsidiary
{subsidiary} = 2  // Subsidiary internal ID

// Date within range
{trandate} >= '1/1/2025' AND {trandate} <= '12/31/2025'
Workflow Limitations
  • Workflows cannot trigger on sublist changes (use SuiteScript instead)
  • Maximum of 20 workflow states per workflow
  • Cannot create workflows on all record types (check documentation)
  • Scheduled workflows have governance limits similar to scripts
  • Actions run synchronously – complex actions may slow save

Appendix E: Project Templates & Checklists

Ready-to-use templates and checklists for key implementation milestones.

Discovery Questionnaire Template

Company Profile Questions

  • Legal entity structure (single vs. multi-company)
  • Operating locations and warehouses
  • Number of employees and user types needed
  • Current systems and pain points
  • Industry vertical and specific requirements
  • Fiscal year and accounting periods
  • Multi-currency requirements
  • Regulatory/compliance requirements

Financial Questions

  • Chart of Accounts structure and numbering
  • Revenue recognition requirements (ASC 606/IFRS 15)
  • Budgeting and planning requirements
  • Inter-company transaction handling
  • Bank reconciliation process
  • Fixed asset management needs
  • Tax compliance requirements
  • Audit trail and compliance needs

Order-to-Cash Questions

  • Quote/estimate process
  • Sales order types and workflows
  • Pricing strategies (price levels, customer-specific)
  • Discount approval process
  • Fulfillment methods (ship, drop ship, pick-pack)
  • Invoicing requirements and schedules
  • Payment terms and methods
  • Collections and dunning process

Procure-to-Pay Questions

  • Purchase requisition workflow
  • Vendor selection and approval
  • Purchase order approval thresholds
  • Receiving process (direct vs. inspection)
  • Three-way matching requirements
  • Vendor payment terms
  • 1099 reporting requirements
  • Expense report processing

Go-Live Readiness Checklist

Technical Readiness (T-14 Days)

  • All customizations deployed and tested
  • Integrations tested with production credentials
  • Data migration scripts validated
  • User accounts created with correct roles
  • Email templates configured and tested
  • Print templates configured and tested
  • Saved searches and reports validated
  • Workflows tested end-to-end

Business Readiness (T-7 Days)

  • All users completed role-specific training
  • User documentation distributed
  • Quick reference cards printed/accessible
  • Support escalation path documented
  • Business process documentation complete
  • Legacy system access plan confirmed
  • Communication plan executed
  • Go/No-Go meeting scheduled

Cutover Checklist (T-0)

  • Legacy system closed to new transactions
  • Final data extract completed
  • Opening balances loaded and validated
  • Inventory counts reconciled
  • AR/AP aging verified
  • Bank balances confirmed
  • Integration endpoints switched to production
  • User access verified
  • First transactions entered and validated
  • Hypercare team in place

Weekly Status Report Template

SectionContent
Project HealthOverall status (Green/Yellow/Red), schedule status, budget status
AccomplishmentsKey milestones completed this week
Planned ActivitiesFocus areas for next week
Risks & IssuesActive risks, issues requiring decisions
Open DecisionsDecisions pending from stakeholders
Resource UpdatesTeam availability, training needs

Issue Log Template

FieldDescription
Issue IDUnique identifier (e.g., ISS-001)
Date LoggedWhen issue was identified
Reported ByPerson who reported the issue
CategoryConfiguration, Data, Training, Integration, etc.
DescriptionDetailed description of the issue
ImpactBusiness impact (High/Medium/Low)
PriorityResolution priority (P1/P2/P3/P4)
Assigned ToPerson responsible for resolution
Target DateExpected resolution date
StatusOpen, In Progress, Resolved, Closed
ResolutionHow the issue was resolved

UAT Test Script Template

FieldContent
Test IDUAT-OTC-001
ProcessOrder to Cash
ScenarioCreate sales order with quantity discount
PrerequisitesCustomer exists, Items exist with pricing
Test Steps1. Navigate to Sales Order > 2. Select customer > 3. Add items > 4. Verify discount applied
Expected Result10% discount applied for qty > 100
Actual Result(Filled by tester)
Pass/Fail(Pass/Fail)
Tester(Name and date)
Notes(Any observations or issues)

Appendix F: Recommended SuiteApps

Curated list of SuiteApps that frequently add value to implementations. Always verify current pricing and compatibility before recommending to clients.

About SuiteApps

SuiteApps are solutions built on NetSuite's SuiteCloud platform, available through the SuiteApp Marketplace. "Built for NetSuite" (BFN) apps have passed Oracle's security and quality review. Always test SuiteApps in a sandbox before production deployment.

Integration & Automation

Integration

Celigo Integrator.io

Celigo

iPaaS platform for connecting NetSuite to 200+ applications with pre-built flows and data mapping.

BFNIntegration
Integration

Dell Boomi

Dell Boomi

Enterprise iPaaS with NetSuite connector for complex integration scenarios and B2B connectivity.

EnterpriseB2B
Automation

Stampli

Stampli

AI-powered AP automation with intelligent invoice processing and approval routing.

BFNAP Automation

Financial Management

Banking

SuiteSync for Banking

Oracle NetSuite

Direct bank connectivity with automated transaction import and matching.

NativeBank Feeds
Payments

Electronic Bank Payments

Oracle NetSuite

Generate payment files for ACH, wire, and positive pay with bank format templates.

NativePayments
Tax

Avalara AvaTax

Avalara

Automated sales tax calculation, exemption certificates, and compliance reporting.

BFNTax
Close Management

FloQast

FloQast

Close management platform with task tracking, reconciliations, and variance analysis.

CloseReconciliation

Warehouse & Fulfillment

WMS

RF-SMART

RF-SMART

Mobile barcode scanning for receiving, picking, packing, cycle counts, and transfers.

BFNMobile
Shipping

ShipStation

ShipStation

Multi-carrier shipping platform with rate shopping, label printing, and tracking.

ShippingE-commerce
EDI

SPS Commerce

SPS Commerce

Full-service EDI with retailer compliance, document mapping, and trading partner management.

BFNEDI

E-commerce & CRM

E-commerce

Shopify Connector

Celigo

Bi-directional sync of orders, customers, inventory, and products with Shopify.

BFNE-commerce
CRM

Salesforce Connector

Celigo

Sync opportunities, accounts, contacts, and orders between NetSuite and Salesforce.

BFNCRM
Marketplace

Amazon Connector

Celigo

Integration with Amazon Seller Central and FBA for order management and inventory.

BFNMarketplace

Productivity & Utilities

Document Management

Document Capture

Oracle NetSuite

AI-powered document scanning and data extraction for invoices and receipts.

NativeAI
Reporting

Tableau Connector

Tableau

Direct connection from Tableau to NetSuite data for advanced visualization.

AnalyticsBI
Email

Outlook Integration

Oracle NetSuite

Sync emails, contacts, and calendar events between Outlook and NetSuite CRM.

NativeProductivity

Industry-Specific

Manufacturing

Advanced Manufacturing

Oracle NetSuite

Shop floor control, routing, labor tracking, and work-in-progress management.

NativeManufacturing
SaaS

SuiteBilling

Oracle NetSuite

Subscription and usage-based billing with automated invoicing and revenue recognition.

NativeSubscription
Nonprofit

SuiteSuccess for Nonprofits

Oracle NetSuite

Pre-configured solution for fund accounting, grant management, and donor management.

NativeNonprofit
SuiteApp Evaluation Checklist

Before recommending any SuiteApp:

  • Verify "Built for NetSuite" (BFN) certification if available
  • Check compatibility with client's NetSuite edition and features
  • Review pricing model (one-time, subscription, transaction-based)
  • Test in sandbox environment before production
  • Evaluate vendor support and update frequency
  • Check customer reviews on SuiteApp Marketplace
  • Confirm data privacy and security compliance