54.7. サポートされている Salesforce API
このコンポーネントは、次の Salesforce API をサポートしています
producer エンドポイントは、次の API を使用できます。ほとんどの API は一度に 1 つのレコードを処理しますが、Query API は複数のレコードを取得できます。
54.7.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 リクエストを送信し、個々のレスポンスを受け取ります。"raw" のコンポジットを無制限に使用することもできます。
- composite-tree - 親子関係 (最大 5 レベル) を持つ最大 200 レコードを一度に作成します
- composite-batch - リクエストの構成をバッチで送信します
- compositeRetrieveSObjectCollections - 同じオブジェクトタイプの 1 つ以上のレコードを取得します。
- compositeCreateSObjectCollections - 最大 200 レコードを追加し、SaveSObjectResult オブジェクトのリストを返します。
- compositeUpdateSObjectCollections - 最大 200 レコードを更新し、SaveSObjectResult オブジェクトのリストを返します。
- compositeUpsertSObjectCollections - 外部 ID フィールドに基づいて、最大 200 レコードを作成または更新 (アップサート) します。UpsertSObjectResult オブジェクトのリストを返します。
- compositeDeleteSObjectCollections - 最大 200 レコードを削除し、SaveSObjectResult オブジェクトのリストを返します。
- queryAll - SOQL クエリーを実行します。マージ (最大 3 つのレコードをレコードの 1 つにマージし、他のレコードを削除し、関連するすべてのレコードの親を変更) または削除のために削除された結果を返します。また、アーカイブされたタスクおよびイベントレコードに関する情報も返します。
- getBlobField - 個々のレコードから指定された Blob フィールドを取得します。
- apexCall - ユーザー定義の APEX REST API 呼び出しを実行します。
- raw - リクエストをセールスフォースに送信し、エンドポイント、パラメーター、本文などを完全に未加工で制御します.
たとえば、次の producer エンドポイントは upsertSObject API を使用し、sObjectIdName パラメーターで 'Name' を外部 ID フィールドとして指定します。リクエストメッセージの本文は、maven プラグインを使用して生成された SObject DTO である必要があります。レスポンスメッセージは、既存のレコードが更新された場合は null になるか、新しいレコードの ID を持つ CreateSObjectResult、または新しいオブジェクトの作成中のエラーのリストのいずれかになります。
...to("salesforce:upsertSObject?sObjectIdName=Name")...
...to("salesforce:upsertSObject?sObjectIdName=Name")...
54.7.2. Bulk 2.0 API リンクのコピーリンクがクリップボードにコピーされました!
Bulk 2.0 API には、元の Bulk API よりも単純化されたモデルがあります。これを使用して、大量のデータを Salesforce にすばやくロードしたり、大量のデータを Salesforce からクエリーしたりします。データは CSV 形式で提供する必要があります。Bulk 2.0 の最小 API バージョンは v41.0 です。一括クエリーの最小 API バージョンは v47.0 です。以下に示す DTO クラスは、org.apache.camel.component.salesforce.api.dto.bulkv2 パッケージからのものです。以下の操作がサポートされます。
-
bulk2CreateJob - 一括ジョブを作成します。メッセージボディーに
Jobのインスタンスを指定します。 -
bulk2GetJob - 既存のジョブを取得します。
jobIdパラメーターが必要です。 -
bulk2CreateBatch - CSV レコードのバッチをジョブに追加します。メッセージ本文に CSV データを指定します。最初の行にはヘッダーが含まれている必要があります。
jobIdパラメーターが必要です。 -
bulk2CloseJob - ジョブを閉じます。ジョブを処理または中止/削除するには、ジョブを閉じる必要があります。
jobIdパラメーターが必要です。 -
bulk2AbortJob - ジョブを中止します。
jobIdパラメーターが必要です。 -
bulk2DeleteJob - ジョブを削除します。
jobIdパラメーターが必要です。 -
bulk2GetSuccessfulResults - ジョブの成功結果を取得します。返されるメッセージボディーには、CSV データの InputStream が含まれます。
jobIdパラメーターが必要です。 -
bulk2GetFailedResults - ジョブの失敗した結果を取得します。返されるメッセージボディーには、CSV データの InputStream が含まれます。
jobIdパラメーターが必要です。 -
bulk2GetUnprocessedRecords - ジョブの未処理のレコードを取得します。返されるメッセージボディーには、CSV データの InputStream が含まれます。
jobIdパラメーターが必要です。 -
bulk2GetAllJobs - すべてのジョブを取得します。レスポンスボディは
Jobsのインスタンスです。doneプロパティーが false の場合、取得する追加のページがあり、nextRecordsUrlプロパティーには、後続の呼び出しでqueryLocatorパラメーターに設定される値が含まれます。 -
bulk2CreateQueryJob - 一括クエリージョブを作成します。メッセージ本文に
QueryJobのインスタンスを指定します。 -
bulk2GetQueryJob - 一括クエリージョブを取得します。
jobIdパラメーターが必要です。 -
bulk2GetQueryJobResults - 一括クエリージョブの結果を取得します。
jobIdパラメーターが必要です。maxRecordsおよびlocatorパラメーターを受け入れます。応答メッセージヘッダーには、Sforce-NumberOfRecordsヘッダーとSforce-Locatorヘッダーが含まれます。Sforce-Locatorの値は、locatorパラメーターを介して後続の呼び出しに渡すことができます。 -
bulk2AbortQueryJob - 一括クエリージョブを中止します。
jobIdパラメーターが必要です。 -
bulk2DeleteQueryJob - 一括クエリージョブを削除します。
jobIdパラメーターが必要です。 -
bulk2GetAllQueryJobs - すべてのジョブを取得します。レスポンスボディは
QueryJobsのインスタンスです。doneプロパティーが false の場合、取得する追加のページがあり、nextRecordsUrlプロパティーには、後続の呼び出しでqueryLocatorパラメーターに設定される値が含まれます。
54.7.3. Rest Bulk (オリジナル) API リンクのコピーリンクがクリップボードにコピーされました!
producer エンドポイントは、次の API を使用できます。すべてのジョブデータ形式、つまり xml、csv、zip/xml、および zip/csv がサポートされています。
リクエストとレスポンスは、ルートによってマーシャリング/マーシャリング解除する必要があります。通常、リクエストは CSV ファイルなどのストリームソースになります。
また、応答をファイルに保存して、要求と関連付けることもできます。
operationName には以下を使用できます。
-
createJob - Salesforce 一括ジョブを作成します。本文に
JobInfoインスタンスを指定する必要があります。PK Chunking は、pkChunking* オプションを介してサポートされます。ここで 説明を参照してください。 - 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 : レポートの実行結果が含まれます。
たとえば、次の producer エンドポイントは、createBatch API を使用してジョブバッチを作成します。in メッセージには、InputStream に変換できる本文 (通常は、ファイルからの UTF-8 CSV または XML コンテンツなど) と、ジョブのヘッダーフィールド 'jobId' およびジョブコンテンツタイプの 'contentType' が含まれている必要があります。XML、CSV、ZIP_XML、または ZIP_CSV を指定できます。put メッセージの本文には、成功した場合は BatchInfo が含まれ、エラーが発生した場合は SalesforceException が出力されます。
...to("salesforce:createBatch")..
...to("salesforce:createBatch")..
54.7.4. Rest Streaming API リンクのコピーリンクがクリップボードにコピーされました!
consumer エンドポイントは、ストリーミングエンドポイントに次の構文を使用して、作成/更新時に Salesforce 通知を受信できます。
トピックを作成してサブスクライブするには
from("salesforce:CamelTestTopic?notifyForFields=ALL¬ifyForOperations=ALL&sObjectName=Merchandise__c&updateTopic=true&sObjectQuery=SELECT Id, Name FROM Merchandise__c")...
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")...
from("salesforce:CamelTestTopic&sObjectName=Merchandise__c")...
54.7.5. プラットフォームイベント リンクのコピーリンクがクリップボードにコピーされました!
プラットフォームイベントを発行するには、createSObject 操作を使用します。また、メッセージ本文を JSON 文字列またはキー値データを含む InputStream に設定します。その場合、sObjectName をイベントの API 名、またはイベントの適切なクラス名を持つ AbstractDTOBase から拡張されたクラスに設定する必要があります。
たとえば、DTO を使用すると、次のようになります。
または、JSON イベントデータを使用します。
プラットフォームイベントを受信するには、プラットフォームイベントの API 名の前に event/ (または /event/) を付けた consumer エンドポイントを使用します (例: 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);
PlatformEvent event = consumer.receiveBody("salesforce:event/Order_Event__e", PlatformEvent.class);
54.7.6. 変更データキャプチャイベント リンクのコピーリンクがクリップボードにコピーされました!
一方で、Salesforce は、選択したオブジェクトのレコード変更に関する通知を発行するように設定できます。一方、Camel Salesforce コンポーネントはそのような通知に反応し、たとえば、これらの変更を外部システムに同期する ことができます。
関心のある通知は、サブスクリプションチャネルを介して Camel ルートの from ("salesforce:XXX") 句で指定できます。次に例を示します。
from("salesforce:data/ChangeEvents?replayId=-1").log("being notified of all change events")
from("salesforce:data/AccountChangeEvent?replayId=-1").log("being notified of change events for Account records")
from("salesforce:data/Employee__ChangeEvent?replayId=-1").log("being notified of change events for Employee__c custom object")
from("salesforce:data/ChangeEvents?replayId=-1").log("being notified of all change events")
from("salesforce:data/AccountChangeEvent?replayId=-1").log("being notified of change events for Account records")
from("salesforce:data/Employee__ChangeEvent?replayId=-1").log("being notified of change events for Employee__c custom object")
受信したメッセージには、rawPayload がそれぞれ false または true に応じて、本文に java.util.Map<String,Object> または org.cometd.bayeux.Message が含まれます。CamelSalesforceChangeType ヘッダーは、CREATE、UPDATE、DELETE または UNDELETE のいずれかに値を付けることができます。
Camel Salesforce コンポーネントの変更データキャプチャ機能の使用方法の詳細は、ChangeEventsConsumerIntegrationTest を参照してください。
Salesforce 開発者ガイド は、変更データキャプチャ統合アプリケーションの実装の些細な点をよりよく理解するのに適しています。変更イベント本文フィールドの動的な性質、高レベルのレプリケーション手順、およびセキュリティーの考慮事項は興味深いものになる可能性があります。