Heroku Connect を使用した Salesforce からのデータの読み取り
最終更新日 2022年12月06日(火)
Heroku Connect では、データ変更の量や、Salesforce API 操作の詳細の多くを考慮に入れた一連のベストプラクティスを採用することによって、データベースと Salesforce の間で最も効率的にデータを転送する方法を自動的に選択します。これは、Salesforce からの読み取りと Salesforce への書き込みのどちらにも当てはまります。
Salesforce が提供している各種 API から、特定の統合の要件に最も合ったものを選ぶことができます。Heroku Connect では、それらの中から SOAP と Bulk の 2 つをデータ転送に利用します。さらに、Streaming API を使用して、加速ポーリングを使用するマッピングの PushTopic 通知を消費します。
この記事では、Heroku Connect でこれらの API を使用して Salesforce からデータを同期する (読み取る) 方法と、一般的な読み取りエラーに対処する方法について説明します。
Heroku Connect は、API アクセスがある Salesforce のエディションでしか使用できません。一部のプランタイプ (試用版を含む) は、デフォルトでは API アクセスがないため、Heroku Connect では使用できません。
SOAP API
Heroku Connect では、主に SOAP API を使用して Salesforce 組織と情報をやり取りします。この API は、少量のレコードを必要とする操作に最適化されています。そのため、これは処理するレコードが 10,000 件までのときに、Heroku Connect によって以下のタスクで使用されます。
- 新しいマッピングのために Salesforce 組織からデータを初期ロードする
- すべてのデータを既存のマッピングにリロードする
- Salesforce 組織から変更を読み取る
レコードのカウントやマッピングフィールドのクエリなどの管理タスクにも SOAP API を使用します。
最後に、Salesforce にデータを書き込むときにも SOAP API を使用しますが、処理するレコード数のしきい値はさらに下がります。この件についての詳細は、こちらを参照してください。
Heroku Connect によって行われる SOAP API の呼び出しは、お客様の API リクエスト制限のカウントには入りません。それらの呼び出しはお客様の Salesforce 組織でカウントされますが、API ライセンス利用のカウントには入りません。
Bulk API
Bulk API は、非同期処理を利用してレコードのバッチを取得する、大きなデータセットのロード向けに最適化されています。Heroku Connect では、Salesforce から読み取るレコードが 10,000 件より多いときに以下のタスクで Bulk API を利用します。
- 新しいマッピングのために Salesforce 組織からデータを初期ロードする
- すべてのデータを既存のマッピングにリロードする
- Salesforce 組織から変更を読み取る
Bulk API は、読み取り/書き込みマッピングで Salesforce に変更を書き込むときにも使用できますが、レコード処理数のしきい値は下がります。Salesforce にデータを書き込むときの Bulk API の使用方法についての詳細は、こちらを参照してください。
Bulk API の呼び出しは、お客様の Bulk API 制限のカウントには入りません。Heroku Connect によって作成された一括データロードジョブは Salesforce でジョブの一覧に表示されますが、24 時間以内に処理されたバッチのカウントに加算されません。
Streaming API
マッピングで加速ポーリングを有効にすると、Heroku Connect では Streaming API を使用して、基本的には Salesforce での変更をリッスンします。そのため、次のポーリング期間中に変更が確認されるのを待つ必要はありません。これは、Salesforce でデータが変更されたときにポーリングをトリガーするための通知を送信する PushTopic を作成することによって行われます。
Heroku Connect によって作成された PushTopic は、その名前に hc_
接頭辞が付き (例: hc_123
)、ポーリングモードに切り替えるかマッピングを削除すると自動的に削除されます。
お客様の接続が 2017 年 4 月 5 日以降に承認されている場合、Streaming API の呼び出しは、お客様の Salesforce 組織に適用される毎日の Streaming API イベント制限のカウントには入りません。
加速ポーリングを使用するようにマッピングを設定するときは、次の API 制限を考慮します。
- Heroku Connect によって作成された PushTopic は、'組織ごとの最大トピック (PushTopic レコード) 数’ のカウントに入ります。
次のように Salesforce で現在の Streaming API イベント使用量を確認したとき、Heroku Connect の Streaming API イベント消費は含まれません。
- Salesforce 組織にログインします。
Setup
(設定) に移動し、Quick Find
(クイック検索) ボックスに Company Information (会社情報) を入力します。Company Information
(会社情報) をクリックします。- Streaming API Events, Last 24 Hours (過去 24 時間の Streaming API イベント数) は、受信した通知の数と許可されている最大数を示します。これには、Heroku Connect が受信した通知は含まれません。
API 呼び出しの使用量
Heroku Connect によって使用される API 呼び出しの数は、いくつかの要因に依存します。
- マッピングの総数
- 各マッピングの方向性 (読み取り専用または読み取り/書き込み)
- 各マッピングの同期モード (ポーリングまたはストリーミング) (同期モード)を参照)
Heroku Connect で変更をバッチ処理する方式は、使用する API とマッピングの方向によって異なります。
レコードの変更を Salesforce から読み取る場合、Heroku Connect の動作は次のとおりです。
- 2,000 レコードまでのバッチでは SOAP API を使用、または
- 150,000 レコードまでのバッチでは Bulk API を使用
レコードの変更を Salesforce に書き込む場合、Heroku Connect の動作は次のとおりです。
- 200 レコードまでのバッチでは SOAP API を使用、または
- 2,000 ~ 10,000 レコードのバッチでは Bulk API を使用
以上の呼び出しはどれも、お客様の毎日の SOAP または Bulk API 制限のカウントには入りません。
読み取りエラーの解決
読み取りエラーが発生する原因は、マッピング中のオブジェクトに対する表示アクセス許可の不足、サポートされていないオブジェクトの種類、オブジェクトの属性の問題のいずれかです。
表示アクセス許可
Heroku Connect で最適な操作のために要求される “View All” (すべて表示) アクセス許可のスコープは、個々のオブジェクトのレベルです。「View All」 (すべて表示) アクセス許可を設定するオプションがオブジェクトにない特定のケースでは、「View All Data」 (すべてのデータを表示) を代わりに使用できます。レコードセットが大規模な Salesforce 組織では、これらのアクセス許可がないと一部の操作を実行できません。これらのアクセス許可を必要とする操作がアクセス許可不足のため失敗した場合、システムはアプリケーションのメンバーまたは共同作業者に通知します。
サポートされていないオブジェクト
Heroku Connect では、すべての標準およびカスタムオブジェクトの読み取りをサポートしています。サポートされているオブジェクトの完全な一覧はこちらで確認できます。Knowledge Base (ナレッジベース) オブジェクトはマッピングできず、特殊な API 処理が必要な、または SystemModStamp
などの必須属性がない標準またはカスタムオブジェクトもマッピングできません。Heroku Connect では、これらのマッピング不可能なオブジェクトを検出し、UI に表示されないようにします。
一般的な読み取りエラー
INVALID_TYPE_FOR_OPERATION...
: このエラーまたは類似のエラーは、マッピング対象オブジェクトを Heroku Connect でクエリできないときにログに記録されます。MALFORMED_QUERY...
: このエラーまたは類似のエラーは、オブジェクト固有のフィルターが必要なため Heroku Connect でオブジェクトをマッピングできないときにログに記録されます。Cannot poll changes for table '>fieldname<' because it contains neither...
: このエラーまたは類似のエラーは、オブジェクトの必須属性がないため Heroku Connect でオブジェクトをマッピングできないときにログに記録されます。Skipped fields on >mapping name< not present in Salesforce: >fieldname<, >fieldname<...
: このエラーは、エクスポートされた設定内のフィールドを Heroku Connect でインポートできないときにログに記録されます。
これらのエラーを解決するには、エラーが報告されたオブジェクトまたはフィールドをマッピングから削除してください。
同期の問題の解決
接続でのマッピングでは、ユーザーの介入が必要ないくつかの問題が発生する可能性があります。Heroku Connect ダッシュボード、CLI、または API でマッピングの状態を確認してください。詳細は、マッピング状態のリファレンスを参照してください。
判明したパフォーマンスの問題の診断
Heroku Connect での同期のパフォーマンスには、多くの要因が影響する可能性があります。Heroku Connect のパフォーマンスの問題の診断に関する記事の手順に従って、認識された読み取りパフォーマンスの問題を診断してください。