マッピングの設定オプション
最終更新日 2022年11月21日(月)
Table of Contents
Heroku Connect のマッピングは、Salesforce オブジェクトとそのフィールドが Heroku Postgres と Salesforce でどのように保持されるかを決定します。マッピングは、Salesforce から読み取り専用にすることも、読み書き可能にすることもできます。各マッピングには、独自のポーリングの方法と頻度があります。この記事は、マッピングに使用できる設定オプションのリファレンスです。
Heroku Connect には、データを部分的に同期するメカニズムはありません。マッピングは常にすべてのレコードを同期します。アーカイブされたタスクとイベントに関連する例外については、サポートされていないオブジェクトを参照してください。
サポートされている Salesforce オブジェクト
「Supported Salesforce Standard Objects」(サポートされている Salesforce 標準オブジェクト) ページには、接続で使用されているバージョンの Salesforce API にマッピングできるオブジェクトの一覧があります。
欠落しているオブジェクトとフィールド
マッピングの作成または編集時に Heroku Connect で特定のオブジェクトまたはフィールドが表示されない理由として最も一般的なのは、権限が不十分であることです。接続の承認に使用される Salesforce ユーザーの権限を確認し、それらの権限を変更してください。Heroku Connect を最適に操作するには、View All
(すべて表示) 権限が必要です。オブジェクトにそのオプションがない場合は、代わりに View All Data
(すべてのデータを表示) を使用してください。
サポートされていないオブジェクト
Heroku Connect は、SOAP および Bulk API 経由で取得可能なほとんどの標準オブジェクトとカスタムオブジェクトをサポートしています。グレー表示されたオブジェクトには、Salesforce API の制限による注意事項があります。例外は、オブジェクト固有のフィルター基準の使用を必要とするオブジェクト、または Bulk API で完全にはサポートされていないオブジェクトです。たとえば、以下のオブジェクトは Heroku Connect ではマッピングできません。
KnowledgeArticleVersion
、および__kav
で終わるオブジェクトでは、追加のクエリ基準 (PublishStatus=Online
) を使用する必要があります。LeadHistory
は一括ページングをサポートしておらず、同期する変更済みレコードが 20,000 を超える場合は取得できません。- Base64 タイプの
Attachment
は Bulk API でサポートされておらず、同期する変更済みレコードが 20,000 を超える場合は取得できません。したがって、画像やその他の種類のバイナリデータはサポートされません。代わりの方法として、Amazon S3 に画像を保存し、画像の URI を含む単純なテキストフィールドを Salesforce とデータベースの間で同期することができます。 - カスタムメタデータタイプをマッピングすることはできません。
- Salesforce でイベントオブジェクトとタスクオブジェクトをアーカイブすると、
IsArchived
フラグが設定されます。Salesforce Bulk API はアーカイブされたイベントとタスクを取得できないため、Heroku Connect はそれらを同期できません。アーカイブされていないイベントとタスクのみが同期されます。
その他の例外と警告が適用されます。詳細は、Heroku Connect のデータベーステーブルを参照してください。
読み取りモード: Salesforce から Heroku Postgres Sync へ
マッピングはデフォルトで読み取り専用です。Heroku Connect は Salesforce 組織をポーリングして変更を確認し、それらをデータベースに同期します。書き込みモードを有効にした場合を除き、Heroku Postgres データベースに加えられた変更は Salesforce に同期されません。
マッピングを作成または編集するときに、同期方法と頻度 (標準ポーリングまたは加速ポーリング) を選択できます。
デモ接続では、Connect は、アイドル状態が 7 日間続くと、マッピングのポーリング回数を 1 時間に 1 回に減らします。アイドル状態が 14 日間続くと、ポーリングは 1 日 1 回行われます。アイドル状態が 31 日間続くと、接続が一時停止します。これらの制限は有料プランには適用されません。
Salesforce の標準ポーリング
デフォルトで、Heroku Connect では、10 分おきに Salesforce 組織への変更のポーリングを行います。この間隔は、2 分 (デモプラン)では 10 分) から 60 分までの範囲になります。ポーリング間隔は 1 分単位で変更できます。
短いポーリング間隔は、データが頻繁に変更されるマッピングに適しています。変更の頻度が少ないマッピングでは、API の使用と処理のオーバーヘッドが減るため、長いポーリング間隔が最適です。
Salesforce の加速ポーリング
標準の「一定間隔でのポーリング」に対して、加速ポーリングは「オンデマンドでのポーリング」です。
加速ポーリングは、Salesforce の Streaming API を使用して、Salesforce のマッピングされたオブジェクトのデータが変更されたときに Heroku Connect に通知します。Heroku Connect はこれらの通知を使用して、標準ポーリングに加えてポーリングをトリガーします。
加速ポーリングは、すべてのカスタムオブジェクトと一部の標準オブジェクトで使用できます。ストリーミングをサポートしていないオブジェクトの場合、マッピングを作成または編集するときにこのオプションを選択することはできません。
10 秒以内に複数の通知を受信した場合、Connect は単一のポーリングをトリガーして Salesforce API の使用率を削減します。
ストリーミングは、信頼できる変化の兆候ではなく、ベストエフォートベースで動作します。同期の中断を回避するために、Connect は、ストリーミング通知が受信されない場合でも、標準間隔のポーリングに自動的にフォールバックし続けます。
加速ポーリングは、データが変更されたときに Heroku Connect に通知を送信しますが、変更されたデータの内容の詳細は送信しません。加速ポーリングは、Salesforce から Heroku へのデータの同期にのみ影響し、Heroku から Salesforce へのデータの同期には影響しません。
書き込みモードを有効にする: Heroku Postgres から Salesforce Sync へ
Postgres から Salesforce 組織への同期を有効にするには、マッピングの作成/編集ページの Database > Salesforce
(データベース > Salesforce) セクションにある Write database updates
(データベースの更新の書き込み) チェックボックスをオンにします。Connect が Salesforce に書き込む方法の詳細は、Salesforce への書き込みを参照してください。
すべての読み取り/書き込みマッピングは、Heroku Connect インスタンス全体に対して選択された同じ書き込みアルゴリズムを使用して同期されます。
一意識別子
Heroku Connect では読み取りと書き込みに別々のスレッドを使用するため、レコードの重複を防ぐために一意識別子を使用してください。読み取り/書き込みマッピングごとに一意識別子 (外部 ID) を設定できます。
Salesforce は、外部 ID と一意の属性を使用してカスタムフィールドを定義するメカニズムを提供しています。これらの属性は、Heroku Postgres などの外部ソースからのレコードを一意に識別するのに役立ちます。マッピングの一意識別子として選択する前に、Salesforce のフィールドで両方の属性を有効にする必要があります。
Salesforce から Heroku Postgres に変更を書き込む場合、Heroku Connect は、Salesforce ID (sfid
)、または Salesforce ID が NULL の場合は一意識別子によって、Salesforce からのレコードを照合します。
sfid
または一意識別子の一致がない場合、Connect は Postgres に新しい重複レコードを作成します。この重複レコードには Salesforce から取得された sfid
が含まれ、元のレコードには sfid
が含まれません。一意識別子を使用すると、どのプロセスが最初にレコードを書き込もうとしても、整合性エラーが発生せず、レコードは常に一致します。この外部 ID によって、外部テーブルから新しく挿入された行を参照することもできます。詳細は、「2 つのオブジェクト間の単純な関係と関係外部 ID」 を参照してください。
ユーザーがシステム管理者であっても、新しく作成されたカスタムフィールドはデフォルトで非表示になる場合があります。Salesforce でカスタムフィールドを作成した後、カスタムフィールドエディタに移動し、View Field Accessibility
(フィールドのアクセシビリティの表示) をクリックして、必要に応じて権限を編集します。
外部 ID の値を変更すると、データベースと Salesforce の間で同期されるデータのパリティが不足する可能性があります。
Heroku Connect で一意識別子を使用する際に留意すべきいくつかの考慮事項があります。
一意の外部 ID は Salesforce ID のエイリアスとして扱ってください。これらの ID を手動で変更しないでください。
ランダム UUID を生成するための uuid_generate_v4()
や gen_random_uuid()
など、外部 ID を生成するための一意のメカニズムを選択してください。Postgres 整数シーケンスは一意性が保証されていないため、推奨しません。
Heroku Connect データベースの ID フィールドは一意の外部 ID として使用しないでください。これらの ID 番号は、設定を新しいデータベースにインポートしたり、テーブルをリロードしたりするとリセットされる可能性があります。
再挿入されたレコード
一意識別子を使用していても、Salesforce のレコードを Heroku Connect 経由で同期した直後に削除した場合は、重複したレコードが作成される可能性があります。
詳細は、「再挿入されたレコード」を参照してください。
Heroku Postgres のポーリング
Heroku Connect は、Heroku Postgres データベースをポーリングして 2 分ごとに更新を確認します。この間隔は設定できません。更新が検出されると、Heroku Connect はそれらの変更を Salesforce に書き戻し始めます。Salesforce への書き込み操作が進行中の間、Heroku Connect は追加のデータベース更新をポーリングしません。書き込み操作は、すべてのマッピングにわたって発生順に実行されます。特定の書き込み操作が完了すると、2 分ごとにポーリングサイクルが再開されます。
2 分間のポーリングに加えて、データベースは新しいレコードまたは更新されたレコードを検出し、pg_notify
を使用してポーリングを開始するように Connect に通知しようとします。この通知は最大で 10 秒ごとに行われます。これらの間隔は設定できません。
マッピング設定のトラブルシューティング (BAD_CONFIG)
Connect は、設定が正しいことを確認するために次の検証を実行します。
- オブジェクトが Big Object でも Platform Event でもない。
- クエリするためのフィルターがオブジェクトに必要でない (例:
CollaborationGroupRecord
、ContentDocumentLink
、ContentFolderItem
、ContentFolderMember
、FeedPollVote
、IdeaComment
、KnowledgeArticleVersion
、Vote
など) - オブジェクトが Salesforce API によってクエリ可能 (queryable) になっている
- オブジェクトに実装制限がない (例:
KnowledgeArticleVersion
オブジェクト) - 同期に使用できるタイムスタンプフィールドがオブジェクトにある (例:
SystemModstamp
) - オブジェクトに
Id
フィールドがある - マッピングが読み取り/書き込みに設定されている場合、オブジェクトが更新可能でなければならない
- マッピングのフィールドが、Postgres のデータ型にマッピング可能な既知のデータ型である
マッピングが BAD_CONFIG
状態の場合は、このリストを確認し、それに応じてマッピングを編集してください。Heroku Connect は、マッピングの変更を保存した後、このエラーからの回復を試みます。