Create
To create a Sales Order in NetSuite, use action as "createSalesOrder" and pass the Sales Order data in the requestJSON under "salesOrders".
Note: You can only create one record at a time.
The following is an example of creating Sales Order, where we are setting every possible field (See for Sales Order the available fields). The response will return the response back from NetSuite, which includes the new NetSuite Sales Order Id (internalId), plus the newly created Salesforce Sales Order Id (salesforceID)
// Create a Map to store all the data of a Sales Order
Map<String, Object> nsSalesOrder = new Map<String, Object>();
nsSalesOrder.put('classification', new Map<String, Object>{'internalId'=>'5'});
nsSalesOrder.put('currencyRecord', new Map<String, Object>{'internalId'=>'2'});
nsSalesOrder.put('department', new Map<String, Object>{'internalId'=>'2'});
nsSalesOrder.put('discountItem', new Map<String, Object>{'internalId'=>'-6'});
nsSalesOrder.put('discountRate', '-15');
nsSalesOrder.put('entity', new Map<String, Object>{'internalId'=>'362'});
nsSalesOrder.put('memo', 'Order 25');
nsSalesOrder.put('otherRefNum', '4343399');
nsSalesOrder.put('tranDate', DateTime.newInstance(2020, 09, 07).getTime()/1000);
// Initialize the Sales Order Custom Fields
List<Object> soCustomFieldList = new List<Object>();
Map<String,Object> soCustomField = new Map<String,Object>();
soCustomField.put('fieldType', 'select');
soCustomField.put('scriptId', 'custbody_customlist');
soCustomField.put('valueLookup', new Map<String,Object>{'internalId'=>'2'});
soCustomFieldList.add(soCustomField);
// Add custom segment field
Map<String,Object> soCustomField2 = new Map<String,Object>();
soCustomField2.put('fieldType', 'select');
soCustomField2.put('scriptId', 'cseg_lead_source');
soCustomField2.put('valueLookup', new Map<String,Object>{'internalId'=>'3'});
soCustomFieldList.add(soCustomField2);
// Add the Sales Order Custom Fields
nsSalesOrder.put('customFieldList', new Map<String,Object>{'customField'=>soCustomFieldList});
// Initializing the Sales Order Line Items
List<Object> lineItemList = new List<Object>();
Map<String, Object> lineItem = new Map<String, Object>();
lineItem.put('description', 'A weapon for shooting arrows');
lineItem.put('item', new Map<String, Object>{'internalId'=>'239'});
lineItem.put('quantity', 1);
lineItem.put('price',new Map<String, Object>{'internalId'=>'-1'});
lineItem.put('rate', '999');
// Initialize the Line Item custom fields
List<Object> liCustomFieldList = new List<Object>();
Map<String, Object> liCustomField = new Map<String, Object>();
liCustomField.put('fieldType', 'boolean');
liCustomField.put('scriptId', 'custcol_checkbox');
liCustomField.put('value', 'true');
liCustomFieldList.add(liCustomField);
// Add custom segment field
Map<String,Object> liCustomField2 = new Map<String,Object>();
liCustomField2.put('fieldType', 'select');
liCustomField2.put('scriptId', 'cseg_lead_source');
liCustomField2.put('valueLookup', new Map<String,Object>{'internalId'=>'3'});
liCustomFieldList.add(liCustomField2);
// Add the Sales Order Line Item Custom Fields
lineItem.put('customFieldList', new Map<String, Object>{'customField'=>liCustomFieldList});
lineItemList.add(lineItem);
// Add the Line Items to Sales Order
Map<String, Object> soLineitemList = new Map<String, Object>();
soLineitemList.put('item', lineItemList);
nsSalesOrder.put('itemList', soLineitemList);
// Initialize the RequestJSON Data to be passed.
Map<String, Object> requestJSONMap = new Map<String, Object>();
requestJSONMap.put('salesOrders', new List<Object>{nsSalesOrder});
String reqJSON = JSON.serialize(requestJSONMap);
Map<String, Object> reqObj = new Map<String, Object>();
reqObj.put('version', '1.0');
reqObj.put('action', 'createSalesOrder');
reqObj.put('requestJSON', reqJSON);
// Place a request to Breadwinner Global API
Map<String, Object> resp = breadwinner_ns.BreadwinnerNetSuiteAPI.call(reqObj);
System.debug(resp);Pass Billing and Shipping Addresses
When passing an existing NetSuite Customer address as the billing/shipping address for a Sales Order, refer to the sample code below.
// Add the Customer's existing address as Sales Order's billing address
nsSalesOrder.put('billAddressList', new Map<String, Object>{'internalId'=>'7825'});
// Add the Customer's existing address as Sales Order's shipping address
nsSalesOrder.put('shipAddressList', new Map<String, Object>{'internalId'=>'7826'});When passing a custom billing/shipping address specific to Sales Orders only, you can refer to the sample code provided below.
// Initialize the Sales Order's custom Billing Address
Map<String, Object> billingAddressDetails = new Map<String, Object>();
billingAddressDetails.put('attention','Plum A');
billingAddressDetails.put('addressee','Plum ABC');
billingAddressDetails.put('addr1','2334 N. Michigan Avenue, Suite 1500');
billingAddressDetails.put('addr2','Near ABC block');
billingAddressDetails.put('city','Chicago');
billingAddressDetails.put('state','IL');
billingAddressDetails.put('country','_unitedStates');
billingAddressDetails.put('zip','60601');
// Add the Sales Order's custom Billing Address
nsSalesOrder.put('billingAddress', billingAddressDetails);
// Initialize the Sales Order's custom Shipping Address
Map<String, Object> shippingAddressDetails = new Map<String, Object>();
shippingAddressDetails.put('attention','Plum X');
shippingAddressDetails.put('addressee','Plum XYZ');
shippingAddressDetails.put('addr1','525 S. Lexington Ave');
shippingAddressDetails.put('addr2','Near XYZ block');
shippingAddressDetails.put('city','Burlington');
shippingAddressDetails.put('state','NC');
shippingAddressDetails.put('country','_unitedStates');
shippingAddressDetails.put('zip','27215');
// Add the Sales Order's custom Shipping Address
nsSalesOrder.put('shippingAddress', shippingAddressDetails);