Administrator brief
What installs · what you configure
Two packages. One on Salesforce, one on NetSuite. Here is exactly what lands in each org.
Continuous Control ships as a Salesforce unlocked package and a NetSuite SDF application. Nothing runs between them: Salesforce calls NetSuite directly over a signed, outbound-only connection. This page is the component inventory both administrators will see after install, with the prerequisites and the manual steps stated up front.
Salesforce package
Unlocked, org-dependent
Keyless · production-installable
App and tabs
- Continuous Control Lightning app with 5 tabs: NetSuite Connection, NS Field Mappings, NS Sync Runs, Sync Run records, Performance Obligations.
Lightning web components
- NetSuite Sync card ccNetSuiteSyncCall — one card for Order, Invoice, Invoice Batch Run, Credit Memo and Payment pages. Resolves its own mode from the record page, shows live progress, and stores the exact JSON payload sent.
- Revenue Summary card ccContractRevenue — Booked, Billed, Recognized and Deferred per obligation on the Contract, plus Refresh from NetSuite.
- Connection Setup ccNsConnectionSetup — the guided 9-step setup and health screen.
- Field Mapping editor ccNsMappingEditor — the live field map per record type, with NetSuite field discovery and type checking.
- Sync Runs dashboard ccNsSyncRuns — success rate, volume by sync type, and every run with its payload and result.
Flow actions (11)
- Book Order · Sync Invoice · Sync Invoice Batch Run · Sync Credit Memo · Sync Payment · Sync Payment Batch Run · Sync Refund · Sync Account · Sync Product · Refresh POBs from NetSuite · Pull Cash Application from NetSuite. Each carries its own branded icon, so any of it can be automated without writing Apex.
Data model
- 4 custom objects: Sync Run, Field Mapping, Field Mapping Detail, Performance Obligation.
- 3 hierarchy custom settings (credentials, sync settings, pull state) and 2 custom metadata types with 13 seeded record-link rows.
- Fields on 14 standard objects — the NetSuite Record Id, Sync Status, Sync Message and Sync Timestamp set on Account, Order, Invoice, Payment, Credit Memo, Refund, Contract, Product and the rest of the billing graph, plus Delivered and Fulfilled flags on Order Product for fulfillment-driven recognition.
Automation and access
- 44 Apex classes plus 18 test classes: payload builders, the queueable sync engine with chunking, writeback, and the retention purge.
- 1 permission set, 1 custom notification type for sync failures, an Unapply Payment quick action and flow.
NetSuite application
SDF project · one-command installer
OAuth 2.0 machine-to-machine
Navigation and the close screen
- A Continuous Control center tab in the NetSuite menu bar with three categories: Close the Books (Revenue Close Cockpit, Run Portfolio Close, Recognize Revenue, Recognition Backlog, Manage Accounting Periods, Close Run Log), Reports, and NetSuite ARM.
- Revenue Close Cockpit ct_cockpit_sl — a full-page controller screen: portfolio Booked, Billed, Recognized and Deferred, per-contract waterfalls, this period's close tasks, engine buttons and recent runs. A matching dashboard portlet puts the same figures on the NetSuite home page.
The revenue engine
- 1 RESTlet — the single inbound endpoint. Everything Salesforce sends arrives here.
- 7 Suitelets — Update POBs, Update Revenue Plans, Recognize and Reverse, the Cockpit, Native Sales Order, Run Close Now, saved-search builder.
- 2 user event scripts, 3 client scripts, 1 portlet, 1 scheduled map/reduce for the hands-free close.
- Engine Run Log record — every run stamped with trigger, stages, contracts processed, obligations updated, schedule rows written, journal entries posted and the period recognized through.
Record model (13 custom records)
- ARM Contract, ARM Order, ARM Order Line, Performance Obligation, Obligation Detail, Billing Schedule Group, Billing Schedule, Billing Period, Revenue Plan, Revenue Schedule, Revenue Event, Engine Run Log, Settings.
What it adds to your native records
- A revenue rule field on the Item, which the obligation and its revenue plan inherit.
- Contract, period, amount and obligation fields on transactions and transaction lines, so every posted entry traces back to the obligation that caused it.
- Salesforce deep-link fields on invoice, credit memo, payment, order and invoice line, so anyone in NetSuite can click straight back to the Salesforce record.
- A GL Impact subtab on every posting transaction, and billing schedule groups sublisted on the Customer.
Reporting and configuration
- 25 saved searches: portfolio and recognition waterfalls, deferred revenue roll-forward, close status by contract, recognition backlog, billed-not-recognized, obligations missing a rule, pending billings, open invoices, journal entry register. Native searches, so you can clone them, extend them and put them on any dashboard.
- Settings record and script parameters for subsidiary, currency, deferred and revenue accounts, tax item and schedule, and default revenue rule. Nothing account-specific is hardcoded, and there is no code to edit.
Prerequisites
Salesforce: Revenue Cloud Advanced and Billing. One self-contained package, nothing to install first.
NetSuite: administrator access with Custom Records, Server SuiteScript, Token-Based Authentication, REST Web Services and Revenue Recognition enabled.
Security and data flow
One integration record, one role, one token, one endpoint. Requests are signed and outbound-only from Salesforce; NetSuite never calls in.
No middleware and no third party holds your data. Credentials live in a protected org setting and are never displayed again after saving.
What you configure yourself
NetSuite, about 20 minutes: attach four saved-search sublists, mark the obligation form preferred, set one accounting preference, item and tax prep, lay out the dashboard.
Salesforce, about 20 minutes: assign the permission set, run the Connection wizard, place the cards on your page layouts.
Administrator brief
The Salesforce package
In your Salesforce org
Setup, mapping, sync and observability, all inside Lightning.
Every screen below is part of the package. Nothing here is a custom build, and none of it needs a NetSuite login.
Not pictured
Sync Run records store the exact payload sent and the result returned, so any sync can be audited or replayed. A retention setting purges them on your schedule.
Performance Obligation records get their own tab and a related list on the Contract.
One permission set grants the whole app, and sync failures raise a custom notification.
Administrator brief
The NetSuite application
In your NetSuite account · the record model
A real NetSuite application, not a pile of custom records.
Its own place in the menu bar
The install adds a Continuous Control center tab with Close the Books, Reports and NetSuite ARM categories, so the close routine, the reports and the record lists are where a controller expects them. Everything below is reached from this menu or from the record itself.
Administrator brief
The NetSuite application
In your NetSuite account · the ledger
Revenue is previewed before it posts, and it posts as ordinary NetSuite entries.
Nothing here is a shadow ledger. The engine writes native journal entries and the invoices it receives are native invoices, so the trial balance, the financials and every standard NetSuite report already include them.
Also in the box
25 saved searches, including the deferred revenue roll-forward, the recognition waterfall by period, and the exception lists a close depends on. Native searches, so you can clone and extend them.
A scheduled close that runs the engine unattended, with a run log recording what each run touched.
A settings record and script parameters for accounts, subsidiary, currency, tax and the default revenue rule.
One engine at a time
Continuous Control recognizes revenue from its own obligation model, so you do not need NetSuite Advanced Revenue Management switched on to use it.
If you already run native ARM, or you graduate to it later, each obligation maps one-to-one to a revenue element, and the application can generate the native sales order that ARM works from. Pick one recognizer per contract.
What installation looks like
Your NetSuite administrator runs a one-command installer and creates a role and token. Your Salesforce administrator installs one package and works down the Connection screen on page 2, which tests the connection and verifies the NetSuite side before anything syncs. A setup guide covers both halves, from prerequisites through the first recognized revenue, and every step is safe to re-run.