Red Hat Training

A Red Hat training course is available for Red Hat Fuse

268.11. Salesforce Composite API を使用して複数のリクエストをバッチで送信する

Composite API のバッチ操作 (composite-batch) を使用すると、複数のリクエストをバッチに蓄積して一度に送信できるため、複数の個別のリクエストの往復コストを節約できます。次に、各応答は、順序が保持された応答のリストで受信されるため、n 番目の要求の応答は応答の n 番目の場所になります。

注記

結果は API ごとに異なる可能性があるため、リクエストの結果は java.lang.Object として提供されます。ほとんどの場合、結果は文字列のキーと値を持つ java.util.Map か、値として他の java.util.Map になります。JSON 形式で作成されたリクエストは、いくつかの型情報を保持するため (つまり、どの値が文字列で、どの値が数値であるかがわかっている)、一般的にそれらはより型に適しています。XML と JSON では応答が異なることに注意してください。これは、Salesforce API からの応答が異なるためです。したがって、応答処理コードを変更せずにフォーマットを切り替える場合は注意してください。

例を見てみましょう:

final String acountId = ...
final SObjectBatch batch = new SObjectBatch("38.0");

final Account updates = new Account();
updates.setName("NewName");
batch.addUpdate("Account", accountId, updates);

final Account newAccount = new Account();
newAccount.setName("Account created from Composite batch API");
batch.addCreate(newAccount);

batch.addGet("Account", accountId, "Name", "BillingPostalCode");

batch.addDelete("Account", accountId);

final SObjectBatchResponse response = template.requestBody("salesforce:composite-batch?format=JSON", batch, SObjectBatchResponse.class);

boolean hasErrors = response.hasErrors(); // if any of the requests has resulted in either 4xx or 5xx HTTP status
final List<SObjectBatchResult> results = response.getResults(); // results of three operations sent in batch

final SObjectBatchResult updateResult = results.get(0); // update result
final int updateStatus = updateResult.getStatusCode(); // probably 204
final Object updateResultData = updateResult.getResult(); // probably null

final SObjectBatchResult createResult = results.get(1); // create result
@SuppressWarnings("unchecked")
final Map<String, Object> createData = (Map<String, Object>) createResult.getResult();
final String newAccountId = createData.get("id"); // id of the new account, this is for JSON, for XML it would be createData.get("Result").get("id")

final SObjectBatchResult retrieveResult = results.get(2); // retrieve result
@SuppressWarnings("unchecked")
final Map<String, Object> retrieveData = (Map<String, Object>) retrieveResult.getResult();
final String accountName = retrieveData.get("Name"); // Name of the retrieved account, this is for JSON, for XML it would be createData.get("Account").get("Name")
final String accountBillingPostalCode = retrieveData.get("BillingPostalCode"); // Name of the retrieved account, this is for JSON, for XML it would be createData.get("Account").get("BillingPostalCode")

final SObjectBatchResult deleteResult = results.get(3); // delete result
final int updateStatus = deleteResult.getStatusCode(); // probably 204
final Object updateResultData = deleteResult.getResult(); // probably null