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 attributes (Name, Account, Type etc)
A list of opportunity Products (reference to Product, price, quantity, discount and other attributes 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 attributes (Name, reference to customer etc)
A list of line items (reference to Item, quantity, price and other attributes 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 attributes 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 attribute 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 attributes map to SO attributes, along with Oppty attributes
Opportunity Products translated to NS SO Line items with attribute 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 attribute 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?