// Start Apex Class
public with sharing class createNSSalesOrderUsingFuture {
public createNSSalesOrderUsingFuture() {
}
@InvocableMethod(label='Create NetSuite Sales Order' description='Create NetSuite Sales Order')
public static void createNetSuiteSalesOrderUsingFuture(List<Requests> requestList){
createNetSuiteSalesOrder(JSON.serialize(requestList));
}
@future(callout = true)
public static void createNetSuiteSalesOrder(String requestListJSON){
List<Requests> requestList = (List<Requests>)JSON.deserialize(requestListJSON, List<Requests>.class);
List<Object> netSuiteSalesOrderList = new List<Object>();
for(Requests req : requestList){
netSuiteSalesOrderList.add(generateNetSuiteSalesOrderMap(req));
}
// Sending request to NetSuite via exposed Global API
Map<String, Object> reqJSONMap = new Map<String, Object>();
reqJSONMap.put('salesOrders' , netSuiteSalesOrderList);
String reqJSON = JSON.serialize(reqJSONMap);
Map<String, Object> finalReqMap = new Map<String, Object>();
finalReqMap.put('version' , '1.0');
finalReqMap.put('action' , 'createSalesOrder');
finalReqMap.put('RequestJSON' , reqJSON);
System.debug('Request ::: ' + finalReqMap);
Map<String, Object> respMap = breadwinner_ns.BreadwinnerNetSuiteAPI.call(finalReqMap);
System.debug('Response ::: ' + respMap);
}
public class Requests{
@InvocableVariable(label='Class' description='Class')
public String classification; //lookup
@InvocableVariable(label='Created From' description='Created From')
public String createdFrom; //lookup
@InvocableVariable(label='Currency' description='Currency')
public String currencyRecord; //lookup
@InvocableVariable(label='Custom Form' description='Custom Form')
public String customForm; //lookup
@InvocableVariable(label='Department' description='Department')
public String department; //lookup
@InvocableVariable(label='Discount Item' description='Discount Item')
public String discountItem; //lookup
//Adding Custom Fields
@InvocableVariable(label='New Field Label' description='New Field Description')
public String newField;
@InvocableVariable(label='referenceFieldId Label' description='Reference Field Description')
public String referenceFieldId;
}
public static Map<String, Object> generateNetSuiteSalesOrderMap(Requests req){
Map<String, Object> netSuiteSalesOrderMap = new Map<String, Object>();
// Initialize the Custom Fields
List<Object> soCustomFieldList = new List<Object>();
if(req.newField != NULL) {
Map<String,Object> soCustomField1 = new Map<String,Object>();
soCustomField1.put('fieldType', 'string');//pass datatype correctly
//pass custom field (scriptId) correctly, it starts with custbody
soCustomField1.put('scriptId', 'YourNSCustomFieldAPIName');
soCustomField1.put('value', req.newField);
soCustomFieldList.add(soCustomField1);
}
if(req.referenceFieldId != NULL) {
Map<String,Object> soCustomField2 = new Map<String,Object>();
soCustomField2.put('fieldType', 'select');
//pass custom field (scriptId) correctly, it starts with custbody
soCustomField2.put('scriptId', 'YourNSCustomFieldAPIName');
soCustomField2.put('valueLookup', new Map<String,Object>{'internalId'=>req.referenceFieldId});
soCustomFieldList.add(soCustomField2);
}
// Finally Add the Custom Fields to the "netSuiteSalesOrderMap"
netSuiteSalesOrderMap.put('customFieldList', new Map<String,Object>{'customField'=>soCustomFieldList});
// Assign values from the Request to NetSuite Sales Order
// Initialize the Standard Fields
If(req.classification != NULL)
netSuiteSalesOrderMap.put('classification', new Map<String, Object>{'internalId'=>req.classification});
If(req.currencyRecord != NULL)
netSuiteSalesOrderMap.put('currencyRecord', new Map<String, Object>{'internalId'=>req.currencyRecord});
If(req.customForm != NULL)
netSuiteSalesOrderMap.put('customForm', new Map<String, Object>{'internalId'=>req.customForm});
If(req.createdFrom != NULL)
netSuiteSalesOrderMap.put('createdFrom', new Map<String, Object>{'internalId'=>req.createdFrom});
If(req.department != null)
netSuiteSalesOrderMap.put('department', new Map<String, Object>{'internalId'=>req.department});
return netSuiteSalesOrderMap;
}
}