Skip Navigation
Show nav
Dev Center
  • Get Started
  • ドキュメント
  • Changelog
  • Search
  • Get Started
    • Node.js
    • Ruby on Rails
    • Ruby
    • Python
    • Java
    • PHP
    • Go
    • Scala
    • Clojure
    • .NET
  • ドキュメント
  • Changelog
  • More
    Additional Resources
    • Home
    • Elements
    • Products
    • Pricing
    • Careers
    • Help
    • Status
    • Events
    • Podcasts
    • Compliance Center
    Heroku Blog

    Heroku Blog

    Find out what's new with Heroku on our blog.

    Visit Blog
  • Log inorSign up
View categories

Categories

  • Heroku のアーキテクチャ
    • Dyno (アプリコンテナ)
      • Dyno Management
      • Dyno Concepts
      • Dyno Behavior
      • Dyno Reference
      • Dyno Troubleshooting
    • スタック (オペレーティングシステムイメージ)
    • ネットワーキングと DNS
    • プラットフォームポリシー
    • プラットフォームの原則
  • Developer Tools
    • コマンドライン
    • Heroku VS Code Extension
  • デプロイ
    • Git を使用したデプロイ
    • Docker によるデプロイ
    • デプロイ統合
  • 継続的デリバリーとインテグレーション
    • 継続的統合
  • 言語サポート
    • Node.js
      • Working with Node.js
      • Node.js Behavior in Heroku
      • Troubleshooting Node.js Apps
    • Ruby
      • Rails のサポート
      • Bundler の使用
      • Working with Ruby
      • Ruby Behavior in Heroku
      • Troubleshooting Ruby Apps
    • Python
      • Working with Python
      • Python でのバックグランドジョブ
      • Python Behavior in Heroku
      • Django の使用
    • Java
      • Java Behavior in Heroku
      • Working with Java
      • Maven の使用
      • Spring Boot の使用
      • Troubleshooting Java Apps
    • PHP
      • PHP Behavior in Heroku
      • Working with PHP
    • Go
      • Go の依存関係管理
    • Scala
    • Clojure
    • .NET
      • Working with .NET
  • データベースとデータ管理
    • Heroku Postgres
      • Postgres の基礎
      • Postgres スターターガイド
      • Postgres のパフォーマンス
      • Postgres のデータ転送と保持
      • Postgres の可用性
      • Postgres の特別なトピック
      • Migrating to Heroku Postgres
    • Heroku Data For Redis
    • Apache Kafka on Heroku
    • その他のデータストア
  • AI
    • Working with AI
    • Heroku Inference
      • Inference API
      • Quick Start Guides
      • AI Models
      • Inference Essentials
    • Vector Database
    • Model Context Protocol
  • モニタリングとメトリクス
    • ログ記録
  • アプリのパフォーマンス
  • アドオン
    • すべてのアドオン
  • 共同作業
  • セキュリティ
    • アプリのセキュリティ
    • ID と認証
      • シングルサインオン (SSO)
    • Private Space
      • インフラストラクチャネットワーキング
    • コンプライアンス
  • Heroku Enterprise
    • Enterprise Accounts
    • Enterprise Team
    • Heroku Connect (Salesforce 同期)
      • Heroku Connect の管理
      • Heroku Connect のリファレンス
      • Heroku Connect のトラブルシューティング
  • パターンとベストプラクティス
  • Heroku の拡張
    • Platform API
    • アプリの Webhook
    • Heroku Labs
    • アドオンのビルド
      • アドオン開発のタスク
      • アドオン API
      • アドオンのガイドラインと要件
    • CLI プラグインのビルド
    • 開発ビルドパック
    • Dev Center
  • アカウントと請求
  • トラブルシューティングとサポート
  • Salesforce とのインテグレーション
  • Heroku Enterprise
  • Heroku Connect (Salesforce 同期)
  • Heroku Connect でのオブジェクト関係の処理

Heroku Connect でのオブジェクト関係の処理

日本語 — Switch to English

最終更新日 2022年12月12日(月)

Table of Contents

  • Salesforce ID を使用した単純な関係
  • 2 つのオブジェクト間の単純な関係と関係外部 ID
  • 2 つのオブジェクト間の循環参照
  • 自己参照関係
  • ポリモーフィックな関係

複数の種類の関係をオブジェクト間に設定できます。この記事では、Salesforce にデータを書き込むときに Heroku Connect でこれらの関係を処理する方法について説明します。

Salesforce ID を使用した単純な関係

単純な関係は 2 つの手順で作成できます。最初の手順は親レコードの挿入です。2 番目の手順は、親への参照を持つ子レコードの挿入です。

Salesforce のネイティブの関係フィールドでは、外部レコード由来の 18 文字の一意レコード ID を使用します。ID がわかっている場合、いつでも Postgres データベースから関係を作成できます。レコードを挿入した後、18 文字の ID が sfid​ フィールドに設定されます。親レコードの sfid​ が null でなければ、INSERT または UPDATE ステートメントを使用して既存のレコード間の関係を確立できます。

たとえば、Salesforce の標準 Contact オブジェクトには、AccountId​ フィールドを介した Account オブジェクトへの参照があらかじめ定義されています。Account レコードを挿入するには、次のようにします。

INSERT INTO salesforce.account (name, description)
 VALUES ('My new account', 'Very important account.')

(id​ が1234 の) レコードが Salesforce に伝播し、レコードに割り当てられた Salesforce ID が Connect によって sfid​ フィールドに書き込まれます。これ以降、18 文字の sfid​ 値と AccountId​ フィールドを使用して関係を確立できます。

INSERT INTO salesforce.contact (firstname, lastname, accountid)
SELECT 'John', 'Smith', sfid
FROM salesforce.account where id=1234;`

この方法はほとんどのケースで機能しますが、Account と Contact を同時に挿入する場合には不便です。両方を同時に挿入する方法について、次のセクションで説明します。

2 つのオブジェクト間の単純な関係と関係外部 ID

Salesforce ID を使用すればうまく機能することは確かですが、Heroku Connect または Salesforce API を使用する場合は煩雑です。最初の挿入の Salesforce ID を待機せずに 2 番目の挿入を行うよう、両方の挿入をセットアップするのが理想的なアプローチです。

子レコードの挿入では、親の外部 ID を介して親レコードを参照できます。Heroku Connect では、親の外部 ID を使用するように設定された追加の関係フィールドを子レコードにマップすることができます。親レコードに複数の外部 ID がある場合、一意識別子​として設定されているものを使用します。

たとえば、External_ID__c​ という名前の外部 ID フィールドを Account オブジェクトに設定したと仮定します。Contact には、AccountId​ フィールドを介した Account への標準参照があります。Contact のマッピングの作成/編集ページ​で、関係フィールド Account__External_ID__c​ を追加して、2 つの手順でこの参照を設定します。

INSERT INTO salesforce.account (name, description, external_id__c)
 VALUES ('My new account', 'Very important account.', gen_random_uuid());

前の挿入でプライマリキー id​ を取得したと仮定して、次のように Contact​ レコードを挿入します。

INSERT INTO salesforce.contact (firstname, lastname, account__external_id__c)
SELECT 'John', 'Smith', external_id__c
FROM salesforce.account where id=1234;

生成されたトリガーログエントリが Heroku Connect で処理されると、この関係が Salesforce で正確に設定されるようになります。

2 つのオブジェクト間の循環参照

マージ書き込みアルゴリズムを使用する場合、関係の外部 ID フィールドとの間で循環参照を確実に達成することはできません。代わりに、「Salesforce ID を使用した単純な関係​」で説明したように、18 文字の Salesforce ID を使用します。

循環参照は、2 つのものが互いに参照し合う場合に発生します。たとえば、Account から、そのアカウントのプライマリ連絡先への参照を定義する方法は次のようになります。

Salesforce で、プライマリ連絡先 (primary_Contact__c​) を指すフィールドを Account オブジェクトに追加します。 Salesforce で、ext_id__c​ という名前の外部 ID フィールドを Contact オブジェクトに追加します。 Heroku Connect で Account のマッピングを編集して、関係フィールド primary_Contact__r__Ext_ID__c​ をマップします。このフィールドを使用して循環関係を設定できます。

前のセクションの Contact の例で、その INSERT ステートメントの間に設定された ext_id__c​ フィールドがあると仮定します (ext_id__c​ = 4321)。次の SQL スニペットは、循環関係を設定します。

UPDATE salesforce.account set primary_contact__r__ext_id__c = c.ext_id__c
FROM salesforce.contact AS c where c.id = 4321 and salesforce.account.id = 1234;

自己参照関係

マージ書き込みアルゴリズムを使用する場合、関係の外部 ID フィールドを使用して自己参照関係を確実に設定することはできません。代わりに、「Salesforce ID を使用した単純な関係​」で説明したように、18 文字の Salesforce ID を使用します。

自己参照関係は、参照先が同じオブジェクト内の別のレコードである、循環参照の特殊なケースです。Salesforce では、同じオブジェクトの親を参照する子レコードを 1 つの SOAP CREATE メッセージでは挿入できません。自己参照は元の挿入ではなく後続の更新で行われる必要があります。

Account オブジェクトには、別の Account を参照する ParentID​ フィールドがあります。Parent__External_ID__c​ フィールドをマップし、それを使用して、子の Account レコードとその親の間に関係を確立することができます。このように、挿入を使用して 2 つの Account レコードを作成できます。

1. INSERT INTO salesforce.account (name, description, external_id__c) VALUES ('My new account', 'A very important account', gen_random_uuid());

ステートメントによって挿入されるアカウント行には id​ 列が含められ、これは自動インクリメントされる整数列であり、テーブルのプライマリキーの役目を果たします。この列は sfid​ 列とは異なり、データベース固有の列であって、Salesforce の一部ではありません。このケースで、id​ 列の自動生成された値が 1234​ であるとします。

2. INSERT INTO salesforce.account (name, description, external_id__c) VALUES ('Child of My new account', 'Sub account of 1234', gen_random_uuid());

挿入された行に id​ 列が含められ、自動生成された値が今度は 1235​ であると仮定します。

最初と 2 番目の INSERT ステートメントから id​ の値を取得して、関係を確立します。

UPDATE salesforce.account AS c set parent__external_id__c = p.external_id__c
FROM salesforce.account AS p WHERE p.id = 1234 AND c.id = 1235;

ポリモーフィックな関係

ポリモーフィックな関係とは、参照されるオブジェクトが複数の異なるオブジェクトの種類のいずれかである可能性がある関係のことです。たとえば、Event オブジェクトは、"What" のポリモーフィックな関係を通じて Account、Campaign、または Opportunity と関係する可能性があります。Salesforce では、ポリモーフィックな関係における関係先オブジェクトを、オブジェクト ID とオブジェクトの種類によって識別できます。Heroku Connect でポリモーフィックな関係を作成するには、「Salesforce ID を使用した単純な関係​」で説明した 18 文字の Salesforce ID を使用します。

Heroku Connect では、ポリモーフィックな関係のための外部 ID のマッピングはサポートされていません。マッピングを作成および編集するとき、What および Who のポリモーフィック関係フィールドについては、外部 ID 関係は利用できません。

関連カテゴリー

  • Heroku Connect (Salesforce 同期)
Heroku External Objects と Salesforce Connect Heroku External Objects

Information & Support

  • Getting Started
  • Documentation
  • Changelog
  • Compliance Center
  • Training & Education
  • Blog
  • Support Channels
  • Status

Language Reference

  • Node.js
  • Ruby
  • Java
  • PHP
  • Python
  • Go
  • Scala
  • Clojure
  • .NET

Other Resources

  • Careers
  • Elements
  • Products
  • Pricing
  • RSS
    • Dev Center Articles
    • Dev Center Changelog
    • Heroku Blog
    • Heroku News Blog
    • Heroku Engineering Blog
  • Twitter
    • Dev Center Articles
    • Dev Center Changelog
    • Heroku
    • Heroku Status
  • Github
  • LinkedIn
  • © 2025 Salesforce, Inc. All rights reserved. Various trademarks held by their respective owners. Salesforce Tower, 415 Mission Street, 3rd Floor, San Francisco, CA 94105, United States
  • heroku.com
  • Legal
  • Terms of Service
  • Privacy Information
  • Responsible Disclosure
  • Trust
  • Contact
  • Cookie Preferences
  • Your Privacy Choices