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¬ifyForOperations=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);