Overview
Creating NS Orders based on SFDC Oppties/Quotes is a common workflow use case between Salesforce & Netsuite.
Objects involved in the workflow
SFDC Account ↔︎ Netsuite Customer
SFDC Contact ↔︎ Netsuite Contact
SFDC Product ↔︎ Netsuite Items
SFDC Opportunity
SFDC Opportunity Product
SFDC Opportunity Quotes
SFDC Opportunity Contact Role
Netsuite Sales Orders
Salesforce Opportunity is made of
-
Opportunity fields (Name, Account, Type etc)
-
A list of opportunity Products (reference to Product, price, quantity, discount and other fields on the many-to-many). This is a first class object n Salesforce
-
Opportunity Contact Roles (reference to Contact, role of that contact).This is a first class object n Salesforce
Netsuite Sales Order is made of
-
SalesOrder fields(Name, reference to customer etc)
-
A list of line items (reference to Item, quantity, price and other fields on the many-to-many) - these are embedded objects inside a sales order
-
Shipping Details (Shipping Date, Carrier and a Shipping address) - this is an embedded object in a sales order. Shipping address can be selected from one of the customer addresses
-
Billing Details (Terms , Payment details -optional, and a Billing address) - this is an embedded object in a sales order. Billing address can be selected from one of the customer addresses
-
Contact Roles(reference to Contact, role of that contact and other fields on the many-to-many) - this is an embedded object in a sales order.
There is a mismatch in the data model between SFDC and Netsuite. SFDC presents a flat set of objects, and Netsuite has a nested structure.
Workflow Details
Addresses are very important in this workflow.
Prerequisites - Product/Item, Account/Customer and Contact/Contact objects are in sync, including address
Flow 1
SFDC Oppty Closes → Create new Sales Order
-
Opportunity Products translated to NS SO Line items with field level mappings
-
Account Shipping address referenced in NS SO
-
Account Billing Address referenced in NS SO
-
Oppty Contacts are mapped to Relationships->Contacts in NS SO
In this flow, optionally, sync NS SOs back to SFDC SO
Flow 2
SFDC Oppty Closes → Create new Sales Order using SFDC Quote
-
Quote fields map to SO fields, along with Oppty fields
-
Opportunity Products translated to NS SO Line items with field level mappings
-
Quote’s Shipping address referenced in NS SO
-
Quote’s Billing Address referenced in NS SO
-
Oppty Contacts are mapped to Relationships->Contacts in NS SO
In this flow, optionally, sync NS SOs back to SFDC SO
Flow 3
SFDC Oppty Closes → Create new Sales Order using SFDC Quote
-
Opportunity Products translated to NS SO Line items with field level mappings
-
Oppty Primary Contact’s Shipping address referenced in NS SO
-
Oppty Primary Contact’s Billing Address referenced in NS SO
-
Oppty Contacts are mapped to Relationships->Contacts in NS SO
In all these flows, optionally, sync NS SOs back to SFDC SO
Things to Consider
-
Addressing data model mismatches - Oppty object does not have children object available in the pipeline
-
Making sure foreign keys are resolved correctly (Has a new product created in SFDC synced to Syncari & NS before we create a SO?)
-
Looking up children and mapping them (Flow -3 From Oppty to OCR to Contact and use the contact’s shipping address to map)
-
Should we use actions to create Sales Orders, instead of data sync? If so, how does FK resolution and children mapping work?