
Salesforce 注文追加
取引先、注文内容を指定して、Salesforce に注文情報を新規登録します。注文ID、ログを文字型データに格納します。
2017-10-20 © Questetra, Inc. (MIT License)
https://support.questetra.com/ja/addons/salesforce-ordercreate/
Configs
- A: OAuth2通信許可設定名 (←[OAuth 2.0 設定]) *
- B: サブドメインをセットしてください (https://{subdomain}.salesforce.com/) *
- C: 取引先IDが格納されている文字列型or選択肢型データを選択してください *
- D: 注文開始日が格納されている日付型データを選択してください
- E: ステータスが格納されている文字列型or選択肢型データを選択してください
- F: 価格表IDをセットしてください *
- G: 商品が格納されている選択型データを選択してください *
- H: 単価が格納されている数値型データを選択してください *
- I: 数量が格納されている数値型データを選択してください *
- J: 注文IDが格納される文字列型データを選択してください (更新)
- X: 通信ログが格納される文字列型データを選択してください (更新)
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
- スクリプトエンジンとして「Rhino(廃止予定)」が指定されているため、アプリにインストールしても設定エラーとなります
- 利用するには、スクリプトエンジンの変更、およびそれに伴うスクリプト修正が必要です
- 対応方法は、「スクリプトエンジン Rhino 廃止のお知らせ」を参考にしてください
- 修正版は準備中です
Capture

Notes
- 指定の価格表に登録されている商品のIDにて、商品を指定してください