288.4. サポートされている Salesforce API

このコンポーネントは、次の Salesforce API をサポートしています

プロデューサーエンドポイントは、次の API を使用できます。ほとんどの API は一度に 1 つのレコードを処理しますが、Query API は複数のレコードを取得できます。

288.4.1. Rest API

operationName には以下を使用できます。

  • getVersions - サポートされている Salesforce REST API バージョンを取得します
  • getResources - 利用可能な Salesforce REST Resource エンドポイントを取得します
  • getGlobalObjects - 使用可能なすべての SObject タイプのメタデータを取得します
  • getBasicInfo - 特定の SObject タイプの基本的なメタデータを取得します
  • getDescription - 特定の SObject タイプの包括的なメタデータを取得します
  • getSObject - Salesforce ID を使用して SObject を取得します
  • createSObject - SObject を作成します
  • updateSObject - Id を使用して SObject を更新します
  • deleteSObject - Id を使用して SObject を削除します
  • getSObjectWithId - 外部 (ユーザー定義) id フィールドを使用して SObject を取得します
  • upsertSObject - 外部 ID を使用して SObject を更新または挿入します
  • deleteSObjectWithId - 外部 ID を使用して SObject を削除します
  • query - Salesforce SOQL クエリーを実行します
  • queryMore - クエリー API から返された結果リンクを使用して、より多くの結果を取得します (結果が多数の場合)。
  • search - Salesforce SOSL クエリーを実行します
  • 制限 - 組織 API の使用制限をフェッチする
  • recent - 最近のアイテムの取得
  • approval - 承認プロセスのために 1 つまたは複数のレコード (バッチ) を送信します
  • approvals - すべての承認プロセスのリストを取得します
  • composite - 関連する可能性のある最大 25 個の REST リクエストを送信し、個々のレスポンスを受け取ります
  • composite-tree - 親子関係 (最大 5 レベル) を持つ最大 200 レコードを一度に作成します
  • composite-batch - リクエストの設定をバッチで送信します
  • queryAll - SOQL クエリーを実行します。マージまたは削除のために削除された結果を返します。また、アーカイブされたタスクおよびイベントレコードに関する情報も返します。
  • getBlobField - 個々のレコードから指定された BLOB フィールドを取得します。
  • apexCall - ユーザー定義の APEX REST API 呼び出しを実行します。

たとえば、次のプロデューサーエンドポイントは upsertSObject API を使用し、sObjectIdName パラメーターで Name を外部 ID フィールドとして指定します。リクエストメッセージの本文は、maven プラグインを使用して生成された SObject DTO である必要があります。レスポンスメッセージは、既存のレコードが更新された場合は null になるか、新しいレコードの ID を持つ CreateSObjectResult、または新しいオブジェクトの作成中のエラーのリストのいずれかになります。

...to("salesforce:upsertSObject?sObjectIdName=Name")...

288.4.2. Rest Bulk API

プロデューサーエンドポイントは、次の API を使用できます。すべてのジョブデータ形式、つまり xml、csv、zip/xml、および zip/csv がサポートされています。
リクエストとレスポンスは、ルートによってマーシャリング/マーシャリング解除する必要があります。通常、リクエストは CSV ファイルなどのストリームソースになります。
また、応答をファイルに保存して、要求と関連付けることもできます。

operationName には以下を使用できます。

  • createJob - Salesforce 一括ジョブを作成します
  • getJob - Salesforce ID を使用してジョブを取得します
  • closeJob - ジョブを閉じます
  • abortJob - ジョブを中止します
  • createBatch - 一括ジョブ内でバッチを送信します
  • getBatch - Id を使用してバッチを取得します
  • getAllBatches - 一括ジョブ ID のすべてのバッチを取得します
  • getRequest - バッチのリクエストデータ (XML/CSV) を取得します
  • getResults - 完了時にバッチの結果を取得します
  • createBatchQuery - SOQL クエリーからバッチを作成します
  • getQueryResultIds - バッチクエリーの結果 ID のリストを取得します
  • getQueryResult - 結果 ID の結果を取得します
  • getRecentReports - Report List リソースに GET リクエストを送信して、最近表示したレポートを最大 200 件取得します
  • getReportDescription - レポート、レポートタイプ、およびレポートの関連メタデータを表形式、要約形式、またはマトリックス形式で取得します。
  • executeSyncReport - フィルターを変更して、または変更せずにレポートを同期的に実行し、最新の概要データを返します
  • executeAsyncReport - フィルターの有無にかかわらずレポートのインスタンスを非同期的に実行し、詳細の有無にかかわらず概要データを返します
  • getReportInstances - 非同期実行を要求したレポートのインスタンスのリストを返します。リスト内の各項目は、レポートの個別のインスタンスとして扱われます。
  • getReportResults : レポートの実行結果が含まれます。

たとえば、次のプロデューサーエンドポイントは、createBatch API を使用してジョブバッチを作成します。in メッセージには、InputStream に変換できる本文 (通常は、ファイルからの UTF-8 CSV または XML コンテンツなど) と、ジョブのヘッダーフィールド jobId およびジョブコンテンツタイプの contentType が含まれている必要があります。XML、CSV、ZIP_XML、または ZIP_CSV を指定できます。put メッセージの本文には、成功した場合は BatchInfo が含まれ、エラーが発生した場合は SalesforceException が出力されます。

...to("salesforce:createBatchJob")..

288.4.3. Rest Streaming API

コンシューマーエンドポイントは、ストリーミングエンドポイントに次の構文を使用して、作成/更新時に Salesforce 通知を受信できます。

トピックを作成してサブスクライブするには

from("salesforce:CamelTestTopic?notifyForFields=ALL&notifyForOperations=ALL&sObjectName=Merchandise__c&updateTopic=true&sObjectQuery=SELECT Id, Name FROM Merchandise__c")...

既存のトピックをサブスクライブするには

from("salesforce:CamelTestTopic&sObjectName=Merchandise__c")...

288.4.4. プラットフォームイベント

プラットフォームイベントを発行するには、createSObject 操作を使用します。また、メッセージ本文を JSON 文字列またはキー値データを含む InputStream に設定します。その場合、sObjectName をイベントの API 名、またはイベントの適切なクラス名を持つ AbstractDTOBase から拡張されたクラスに設定する必要があります。

たとえば、DTO を使用すると、次のようになります。

class Order_Event__e extends AbstractDTOBase {
  @JsonProperty("OrderNumber")
  private String orderNumber;
  // ... other properties and getters/setters
}

from("timer:tick")
    .process(exchange -> {
        final Message in = exchange.getIn();
        String orderNumber = "ORD" + String.valueOf(in.getHeader(Exchange.TIMER_COUNTER));
        Order_Event__e event = new Order_Event__e();
        event.setOrderNumber(orderNumber);
        in.setBody(event);
    })
    .to("salesforce:createSObject");

または、JSON イベントデータを使用します。

from("timer:tick")
    .process(exchange -> {
        final Message in = exchange.getIn();
        String orderNumber = "ORD" + String.valueOf(in.getHeader(Exchange.TIMER_COUNTER));
        in.setBody("{\"OrderNumber\":\"" + orderNumber + "\"}");
    })
    .to("salesforce:createSObject?sObjectName=Order_Event__e");

プラットフォームイベントを受信するには、プラットフォームイベントの API 名の前に event/ (または /event/) を付けたコンシューマーエンドポイントを使用します (例: salesforce:events/Order_Event__e)。そのエンドポイントから消費するプロセッサーは、rawPayload がそれぞれ false または true であるかに応じて、本文で org.apache.camel.component.salesforce.api.dto.PlatformEvent オブジェクトまたは org.cometd.bayeux.Message のいずれかを受け取ります。

たとえば、1 つのイベントを消費する最も単純な形式では、次のようになります。

PlatformEvent event = consumer.receiveBody("salesforce:event/Order_Event__e", PlatformEvent.class);