この文章は Salesforce 機械翻訳システムを使用して翻訳されました。詳細はこちらをご参照ください。
英語に切り替える

バッチデータの同期

コンテキスト

CRM 実装を Salesforce に移動して、次の作業を実行しようとしています。
  • 現在の CRM システムから取引先、取引先責任者、および商談を抽出して加工し、データを Salesforce に読み込む (初期データインポート)。
  • リモートシステムから週次で (継続的に) 顧客請求データを抽出して加工し、Salesforce に読み込む。
  • 週次で (継続的に) Salesforce から顧客活動情報を抽出し、オンプレミス型のデータウェアハウスにインポートする。

問題

これらのインポートとエクスポートにより営業時間中のエンドユーザ操作に支障が出る可能性があり、また大量のデータを扱うことを考慮した場合、Salesforce へのデータのインポートと Salesforce からのデータのエクスポートをどう行えばよいか?

検討項目

このパターンに基づいてソリューションを適用する場合、次のようなさまざまな項目を検討する必要があります。
  • データを Salesforce に保存する必要があるか? 必要がない場合、アーキテクトが検討可能で検討すべきインテグレーションオプションが他にあります (たとえば、マッシュアップなど)。
  • データを Salesforce に保存する必要がある場合、データはリモートシステムのイベントに応じて更新する必要があるか?
  • データは定期的に更新する必要があるか?
  • データは主なビジネスプロセスをサポートしているか?
  • Salesforce でこのデータが使用できるかどうかによって影響を受ける分析 (レポート) 要件があるか?

ソリューション

次の表は、このインテグレーションに関する問題へのさまざまなソリューションの一覧です。
ソリューション 適合度 データマスタ コメント
変更データキャプチャ 最適 リモートシステム サードパーティの ETL ツールを利用して、ソースデータに対する変更データキャプチャを実行できます。

ツールはソースデータセットの変更に反応し、データを加工してから、Salesforce Bulk API をコールして DML ステートメントを発行します。これは、Salesforce SOAP API を使用して実装することもできます。

変更データキャプチャ 最適 Salesforce サードパーティの ETL ツールを利用して、ERP および Salesforce データセットに対する変更データキャプチャを実行できます。

このソリューションでは Salesforce がデータソースであるため、各行の時間/状況情報を使用してデータをクエリし、ターゲット結果セットを絞り込むことができます。これは、SOQL と共に SOAP API と query() メソッドを使用するか、SOAP API と getUpdated() メソッドを使用することで実装できます。

リモートコールイン 準最適 リモートシステム データ更新が発生したら、リモートシステムはいずれかの API を使用して Salesforce にコールインし、データ更新を実行できます。ただし、これによって 2 つのシステム間に大量のトラフィックが継続的に発生します。

このパターンでは更新が絶え間なく発生する可能性があり、エンドユーザのパフォーマンスに影響を与えることが予想されるため、エラー処理とロックにも十分に注意する必要があります。

リモートプロセス呼び出し 準最適 Salesforce データ更新が発生したら、Salesforce はリモートシステムにコールインしてデータ更新を実行できます。ただし、これによって 2 つのシステム間に大量のトラフィックが継続的に発生します。

このパターンでは更新が絶え間なく発生する可能性があり、エンドユーザのパフォーマンスに影響を与えることが予想されるため、エラー処理とロックにも十分に注意する必要があります。

概要図

次の図は、このパターンでリモートシステムがデータマスタとなる場合のイベントの順序を示します。

バッチデータ同期パターン - リモートマスタ

次の図は、このパターンで Salesforce がデータマスタとなる場合のイベントの順序を示します。

バッチデータ同期パターン - Salesforce マスタ

結果

次のシナリオでは、外部から取得したデータを Salesforce と統合できます。
  • 外部システムがデータマスタ — Salesforce が 1 つのソースシステムまたは複数のシステムによって提供されるデータのコンシューマになります。このシナリオでは、通常、Salesforce にデータをインポートする前に、データウェアハウスまたはデータマートでデータで集約します。
  • Salesforce がデータマスタ — Salesforce が特定のエンティティのレコードシステムになります。
典型的な Salesforce インテグレーションシナリオでは、実装チームは次のいずれかの作業を行います。
  • ソースデータセットに対する変更データキャプチャを実装します。
  • 制��テーブルと呼ばれる、サポートデータベース構造のセットを、中間のオンプレミス型データベースに実装します。
次に ETL ツールを使用して、次の作業を行うプログラムを作成します。
  1. 制御テーブルを読み取ってジョブの最終実行時間を判別し、必要な他の制御値を抽出します。
  2. 上記の制御値を検索条件として使用してソースデータセットをクエリします。
  3. 検証、改良など、事前定義された処理ルールを適用します。
  4. ETL ツールで使用可能なコネクタ/加工機能を使用して、ターゲットデータセットを作成します。
  5. データセットを Salesforce オブジェクトに書き込みます。
  6. 処理が成功したら、制御テーブルの制御値を更新します。
  7. 処理が失敗したら、制御テーブルを再起動可能にする値で更新し、終了します。

制御テーブルと関連するデータ構造は、ETL ツールがアクセスできる環境に作成することをお勧めします。その環境で Salesforce へのアクセスができない場合でも同様です。これにより、適度な回復力が提供されます。このプロセスでは、Salesforce をスポークとして扱う必要があり、ETL インフラストラクチャがハブになります。

メモ

ETL ツールがデータ同期機能から最大の効果を得られるように、次の点を考慮してください。
  • ETL ジョブをチェーンにして順に並べ、まとまった 1 つのプロセスにする。
  • 入力データの照合には両方のシステムの主キーを使用する。
  • 特定の API メソッドを使用して更新されたデータのみを抽出する。
  • 主従関係または参照関係の子レコードをインポートする場合、ソースでの親キーを使用してインポートするデータをグループ化し、ロックを回避する。たとえば、取引先責任者データをインポートする場合、取引先責任者データを親の取引先キーでグループ化し、1 回の API コールで 1 つの取引先に対して最大数の取引先責任者を読み込めるようにします。インポートするデータがグループ化されていないと、通常、最初の取引先責任者レコードが読み込まれ、API コールのコンテキスト内ではその取引先の後続の取引先責任者レコードは読み込みに失敗します。
  • トリガなど、インポート後処理は、必ずデータを選択的に処理する。
  • シナリオで大量のデータを扱う場合、ホワイトペーパー大量のデータを使用するリリースのベストプラクティスを参照してください。

エラー処理と回復

エラー処理および回復戦略は、全体的なソリューションの一部として検討する必要があります。最適な方法は、選択するソリューションによって異なります。
エラー表示場所 エラー処理および回復戦略
Salesforce からの読み取り
  • エラー処理 — 読み取り操作中にエラーが発生した場合、インフラストラクチャ関連ではないエラーについては再試行を実装します。失敗が繰り返される場合は、制御テーブル/エラーテーブルを使用した標準処理を ETL 操作のコンテキストに実装して次の処理を行う必要があります。
    • エラーをログに記録する
    • 読み取り操作を再試行する
    • 失敗した場合は終了する
    • 通知を送信する
  • エラー回復 — 失敗した読み取り操作から回復するには、ETL プロセスを再起動します。

操作は成功してもレコード単位で失敗する場合は、ジョブの即時再起動か後続処理の実行で問題に対処します。この場合、遅延再起動は、エラーの原因と思われるデータに優先順位を付けて修正する時間を取れるため、適したソリューションとなる可能性があります。

Salesforce への書き込み
  • エラー処理 — 書き込み操作中のエラーは、アプリケーション内の複数の要因が組み合わされて発生することがあります。API コールは、以下の情報で構成される結果セットを返します。この情報を書き込み操作の再試行に使用する必要があります (必要な場合)。
    • レコード識別情報
    • 成功/失敗の通知
    • 各レコードのエラーのまとめ
  • エラー回復 — 失敗した読み取り操作から回復するには、ETL プロセスを再起動します。

操作は成功してもレコード単位で失敗する場合は、ジョブの即時再起動か後続処理の実行で問題に対処します。この場合、遅延再起動は、エラーの原因と思われるデータに優先順位を付けて修正する時間を取れるため、適したソリューションとなる可能性があります。

外部マスタシステム エラーは、マスタシステムのベストプラクティスに従って処理する必要があります。

セキュリティに関する考慮事項

リモートシステムへのコールでは、要求の機密性、整合性、および可用性を維持する必要があります。適用されるセキュリティに関す��考慮事項は、選択するソリューションに応じて異なります。
  • Salesforce API への認証された API アクセスを可能にするには、Force.com ライセンスが必要です。
  • パスワードアクセスのセキュリティを確保するために、標準の暗号化を使用することをお勧めします。
  • Salesforce API へのコールを行うときには、HTTPS プロトコルを使用します。必要に応じて、オンプレミス型のセキュリティソリューションで Salesforce API へのトラフィックにプロキシを適用することもできます。
「セキュリティに関する考慮事項」を参照してください。

補足

適時性

このパターンでは、適時性の重要性はそれほど大きくはありません。ただし、インターフェースの設計では、すべてのバッチプロセスが指定されたバッチ時間帯内に完了するように注意する必要があります。

どのバッチ指向操作にも言えることですが、バッチ処理時間帯の間は、ソースシステムとターゲットシステムを隔離することをお勧めします。営業時間内にバッチを読み込むと、何らかの競合が発生し、ユーザの更新が失敗するか、より深刻な事態としてバッチ読み込み (あるいは部分的なバッチ読み込み) が失敗することがあります。

グローバルな事業展開をしている組織の場合、システムは常時使用中であるため、すべてのバッチプロセスを同時には実行できない場合があります。こうした場合、レコードタイプやその他の検索条件を使用したデータセグメント化手法により、データの競合を回避できることがあります。

状態管理

状態管理を実装するには、2 つのシステム間でサロゲートキーを使用します。Salesforce のエンティティ全体で何らかのトランザクション管理が必要な場合、Apex を使用するリモートコールインパターンを使用することをお勧めします。

プラットフォームで標準の緩やかなレコードロックが行われる場合、API を使用した更新が発生すると、レコードを編集中のユーザにはレコードを再取得して処理を最初からやり直すことが要求されます。Salesforce API のコンテキストでは、緩やかなロックとは、次のようなプロセスを指します。
  • Salesforce は、特定のユーザが編集中のレコードの状態を維持しない。
  • 読み取り時、データが抽出された時間を記録する。
  • ユーザがレコードを更新して保存すると、Salesforce は、その間に他のユーザがそのレコードを更新していないかチェックする。
  • レコードが更新されていた場合、システムはユーザに、更新が行われためレコードの最新バージョンを取得してから更新を続行するように通知する。

ミドルウェア機能

このパターンの実装に使用する最も効果的な外部技術は、従来の ETL ツールです。重要なのは、選択するミドルウェアツールが、Salesforce Bulk API をサポートしていることです。

ミドルウェアツールが getUpdated() 関数をサポートしていることは、役には立ちますが、不可欠ではありません。この関数は、Salesforce プラットフォームで標準の変更データキャプチャ機能にきわめて近い実装を提供します。

次の表は、このパターンに使用されるミドルウェアシステムの望ましいプロパティの一覧です。

プロパティ 必須 望ましい 不要
イベント処理 X
プロトコル変換 X
変換/加工 X X
キューイングとバッファリング X
同期伝送プロトコル X
非同期伝送プロトコル X
仲介ルーティング X
プロセスコレオグラフィとサービスオーケストレーション X
トランザクション性 (暗号化、署名、信頼できる配信、トランザクション管理) X
ルーティング X
抽出、加工、読み込み (ETL) X

ある公益企業では、メインフレームベースのバッチプロセスを使用して、見込み客を個々の営業担当者とチームに割り当てています。この情報は、夜間処理で Salesforce にインポートする必要があります。

この顧客は、市販の ETL ツールを使用してソーステーブルの変更データキャプチャを実装することを決定しました。

ソリューションは次のように機能します。
  • cron に似たスケジューラが、一括処理ジョブを実行して見込み客をユーザとチームに割り当てます。
  • 一括処理ジョブが実行されてデータが更新された後、ETL ツールが変更データキャプチャを使用してこれらの変更を認識します。ETL ツールが、データストアからの変更を順に並べます。
  • ETL コネクタが Salesforce SOAP API を使用して変更を Salesforce に読み込みます。