Salesforce: Create Order

Salesforce: Create Order
Registers new order information in Salesforce specifying the Client and order details. Stores Order ID and communication logs into String type Data Item.
2017 © Questetra, Inc. (MIT License)
Configs
  • A: Set OAuth2 Config Name (at [OAuth 2.0 Setting]) *
  • B: Set Sub-Domain (https://{subdomain}.salesforce.com/) *
  • C: Select STRING/SELECT DATA for an Account ID *
  • D: Select DATE DATA for Order Effective Date
  • E: Select STRING/SELECT DATA for Status
  • F: Set Price List ID *
  • G: Select SELECT DATA for Item *
  • H: Select NUMERIC DATA for Unit Price *
  • I: Select NUMERIC DATA for Quantity *
  • J: Select STRING DATA for Order ID (update)
  • X: Select STRING DATA for Access Log (update)
Script
// OAuth2 config
// Authorization Endpoint URL: https://login.salesforce.com/services/oauth2/authorize
// Token Endpoint URL: https://login.salesforce.com/services/oauth2/token
// Scope: 
// Consumer Key: (Get by Salesforce Connected App screen)
// Consumer Secret: (Get by Salesforce Connected App screen)

//// == Config Retrieving / 工程コンフィグの参照 ==
var oauth2 = configs.get( "conf_OAuth2" ) + "";
var subDomain = configs.get( "conf_SubDomain" ) + "";
var dataIdC = configs.get( "conf_DataIdC" ) + ""; //AccountId
var dataIdD = configs.get( "conf_DataIdD" ) + ""; //EffectiveDate
var dataIdE = configs.get( "conf_DataIdE" ) + ""; //Status
var priceBook = configs.get( "conf_DataIdF" ) + ""; //Pricebook2Id
var dataIdG = configs.get( "conf_DataIdG" ) + ""; //ItemId
var dataIdH = configs.get( "conf_DataIdH" ) + ""; //UnitPrice
var dataIdI = configs.get( "conf_DataIdI" ) + ""; //Quantity
var dataIdJ = configs.get( "conf_DataIdJ" ) + ""; //Order Id
var dataIdX = configs.get( "conf_DataIdX" ) + ""; //Access Log
// convet 'java.lang.String' to 'javascript string'

//// == Data Retrieving / ワークフローデータの参照 ==
var account = engine.findDataByNumber( dataIdC ) + ""; // SELECT_SINGLE or STRING_TEXTFIELD
if( engine.findDataDefinitionByNumber( dataIdC ).matchDataType( "SELECT_SINGLE" ) ){
    account = engine.findDataByNumber( dataIdC ).get(0).getValue() + "";
}else if( engine.findDataDefinitionByNumber( dataIdC ).matchDataType( "STRING_TEXTFIELD" ) ){
    account = engine.findDataByNumber( dataIdC ) + "";
} 
var effectiveDate = engine.findDataByNumber( dataIdD ) + "";
var status = engine.findDataByNumber( dataIdE ).get(0).getValue() + ""; //Status

var itemId = engine.findDataByNumber( dataIdG ) + ""; // SELECT_SINGLE or STRING_TEXTFIELD
if( engine.findDataDefinitionByNumber( dataIdG ).matchDataType( "SELECT_SINGLE" ) ){
    itemId = engine.findDataByNumber( dataIdG ).get(0).getValue() + "";
}else if( engine.findDataDefinitionByNumber( dataIdG ).matchDataType( "STRING_TEXTFIELD" ) ){
    itemId = engine.findDataByNumber( dataIdG ) + "";
} 
var unitPrice = engine.findDataByNumber( dataIdH) + "";
var quantity = engine.findDataByNumber( dataIdI ) + "";
// convet 'java.lang.String' to 'javascript string'


//// == Calculating / 演算 ==
// preparing for API Request
var apiRequest = httpClient.begin(); // HttpRequestWrapper
// com.questetra.bpms.core.event.scripttask.HttpClientWrapper

// preparing for API Request (OAuth2 Token, HTTP Basic Auth, etc)
var token = httpClient.getOAuth2Token( oauth2 );

// preparing for API Request (Path parameters)
var apiUri = "https://" + subDomain + ".salesforce.com/services/data/v40.0/commerce/sale/order/";

// preparing for API Request (Query parameters)
// (no set)

// preparing for API Request (JSON Body, Form Parameters)
var requestObj = {};
requestObj.order = [];
requestObj.order[0] = {};
requestObj.order[0].attributes = {"type": "Order"};
requestObj.order[0].EffectiveDate = effectiveDate;
requestObj.order[0].Status = status;
requestObj.order[0].Pricebook2Id = priceBook;
requestObj.order[0].accountId = account;
requestObj.order[0].OrderItems = {};
requestObj.order[0].OrderItems.records = [];
requestObj.order[0].OrderItems.records[0] = {};
requestObj.order[0].OrderItems.records[0].attributes = {"type": "OrderItem"};
requestObj.order[0].OrderItems.records[0].PricebookEntryId = itemId;
requestObj.order[0].OrderItems.records[0].quantity = quantity;
requestObj.order[0].OrderItems.records[0].UnitPrice = unitPrice;

var requestJson = JSON.stringify( requestObj );

// Request to the API (POST, GET, PUT, etc)
var response = apiRequest.bearer( token )
  .body( requestJson, "application/json")
  .post(apiUri);

var accessLog = "";
var responseJson = "";
accessLog += "---POST request--- " + response.getStatusCode() + "\n";
responseJson = response.getResponseAsString();

// Retrieve Properties from Response-JSON
if( response.getStatusCode() == 201 ){
  var jsonObj = JSON.parse( responseJson );
  var orderId = jsonObj.records[0].Id + "";
  engine.setDataByNumber( dataIdJ, orderId );
}

// Error Handling
// (no action)

//for Debug
accessLog += "---requestJson---\n" + requestJson + "\n";
accessLog += "---responseJson---\n" + responseJson + "\n";

//// == Data Updating / ワークフローデータへの代入 ==
if ( dataIdX !== "" ){ engine.setDataByNumber( dataIdX, accessLog ); }

Download

  • Salesforce-orderCreate.xml
    • Since Rhino (deprecated) is specified as the script engine, a setting error will occur even if you install this in a workflow App
    • To use this Add-on, you need to change the script engine and modify the script accordingly
    • A modified version is in preparation

Capture

Notes

  • Please specify the item with the ID of the item registered in the specified price list
Scroll to Top

Discover more from Questetra Support

Subscribe now to keep reading and get access to the full archive.

Continue reading