データ仮想化
コンテキスト
Salesforce を使用して、リードの追跡、パイプラインの管理、商談の作成、リードを顧客に変換する注文詳細の取得を行っています。ただし、Salesforce システムでは注文の保存や処理は行っていません。注文は外部 (リモート) システムによって管理されます。営業担当は、外部システムを習得したり使用したりせずに、Salesforce でリアルタイムの注文情報を表示および更新したいと考えています。
問題
Salesforce でデータを外部システムから Salesforce に移行することなく、Salesforce の外部に保存されているデータを表示、検索、変更するには?
検討項目
- Salesforce で宣言型/ポイント & クリックの送信インテグレーションまたは UI マッシュアップを作成するか?
- 大量のデータがあり、Salesforce 組織にコピーしたくないか?
- 常に少量のリモートシステムデータにアクセスする必要があるか?
- 最新データにリアルタイムでアクセスする必要があるか?
- データをクラウドまたはバックオフィスシステムに保存しているが、そのデータを Salesforce 組織で表示または処理したいか?
- Salesforce への特定種別のデータ保存に関するデータレジデンシーの懸念があるか?
解決策
| ソリューション | 適合度 | コメント |
|---|---|---|
| Salesforce Connect | 最適 | Salesforce Connect を使用して、Salesforce データと共に外部提供元のデータにアクセスします。SAP、Microsoft、Oracle などのレガシーシステムから、Salesforce 内にデータのコピーを作成することなく、リアルタイムでデータを取得できます。 Salesforce Connect では外部システムのデータテーブルを組織の外部オブジェクトに対応付けます。外部オブジェクトはカスタムオブジェクトと似ていますが、Salesforce 組織外にあるデータに対応付けられる点が異なります。Salesforce Connect は外部データへのライブ接続を使用して、外部オブジェクトを常に最新の状態に保ちます。外部オブジェクトにアクセスすると、外部システムからデータがリアルタイムに取得されます。 Salesforce Connect では、次のことができます。
Salesforce Connect を使用して外部システムに保存されているデータにアクセスするには、次のいずれかのアダプターを使用します。
|
| 要求と返信 | 準最適 | Salesforce Web サービス API を使用して、外部システムデータにアクセスして更新するアドホックデータ要求を行います。このソリューションには、次の方法があります。 Salesforce SOAP API を使用する。Apex SOAP コールアウトを同期して開始するカスタム Visualforce ページまたはボタン。Salesforce では、WSDL を使用してプロキシ Apex クラスを生成できます。このクラスには、リモートサービスをコールするために必要なロジックがあります。Visualforce ページでユーザーがアクションを開始すると、Apex コントローラーアクションがコールされ、このプロキシ Apex クラスを実行してリモートコールが行われます。Visualforce ページでは、Salesforce アプリケーションをカスタマイズする必要があります。 Salesforce REST API を使用する。Apex HTTP コールアウト (REST サービス) を同期して開始するカスタム Visualforce ページまたはボタン。Salesforce では、標準の GET、POST、PUT、DELETE メソッドを使用する HTTP サービスを呼び出��ことができます。いくつかの HTTP クラスを使用して、RESTful サービスと統合できます。Visualforce ページでユーザーがアクションを開始すると、Apex コントローラーアクションがコールされ、このプロキシ Apex クラスを実行してリモートコールが行われます。Visualforce ページでは、Salesforce アプリケーションをカスタマイズする必要があります。 このソリューションについての詳細は、「リモートプロセスの呼び出し — 要求と返信」を参照してください。 |
概要図
次の図は、OData アダプターを使用���て外部システムからデータを取得する Salesforce Connect の使用方法を示します。

このシナリオの内容は次のとおりです。
- ブラウザーは AJAX コールを実行し、対応する外部オブジェクトアダプターに対してアクションを実行します。
- アダプターはアクションを OData 要求に変換し、インテグレーションレイヤーとサービスレイヤーを介してリモートシステムに HTTP GET 要求を行います。
- リモートシステムは、インテグレーションレイヤーとサービスレイヤーを介して Salesforce に JSON 応答を返します。
- 応答は OData から外部オブジェクトに変換されてブラウザーに返されます。
結果
このパターンに関連するソリューションの適用により、トランザクションの結果をエンドユーザーに表示できるユーザーインターフェースからの呼び出しが可能になります。
コールメカニズムは、このパターンを実装するために選択されるソリューションに応じて異なります。
| コールメカニズム | 説明 |
|---|---|
| 外部オブジェクト | Salesforce Connect では Salesforce 外部オブジェクトを外部システムのデータテーブルに対応付けます。組織にデータをコピーする代わりに、Salesforce Connect は必要なときにリアルタイムでデータにアクセスします。データが組織外に保存されていても、Salesforce Connect は Lightning プラットフォームとのシームレスなインテグレーションを提供します。外部オブジェクトは、グローバル検索、参照関係、レコードフィード、Salesforce モバイルアプリケーションなどの Salesforce ツールで使用できます。外部オブジェクトはまた、Apex、SOSL、SOQL クエリ、Salesforce API、およびメタデータ API、変更セット、パッケージを介したリリースでも使用できます。 |
| Lightning コンポーネントまたは Visualforce ページ | ユーザーインターフェースを伴うエンドツーエンドプロセスの一部としてリモートプロセスをトリガーし、その結果を Salesforce レコードで表示または更新する必要がある場合に使用します。たとえば、クレジットカードの支払いを外部の支払ゲートウェイに送信するプロセスがこれに該当します。この場合、支払い結果がすぐに返されてユーザーに表示されます。ユーザーインターフェースイベントからトリガーされるインテグレーションの場合、一般的にカスタム Lightning コンポーネントまたは Visualforce ページを作成する必要があります。 |
エラー処理を全体的なソリューションの一部として含めることが重要です。エラーが発生した (例外やエラーコードがコール元に返された) 場合、エラーはコール元が処理します。Salesforce Connect Validator は、いくつかの一般的なクエリを実行し、エラーの種類と失敗の原因を確認するための無料ツールです。
Salesforce Connect ソリューションを使用する利点のいくつかを次に示します。
- このソリューションは Salesforce のデータストレージを使用しません。
- ユーザーは外部システムと Salesforce 間でデータを定期的に同期することを心配する必要がありません。
- OData、組織間アダプター、またはカスタム Apex アダプターでの最小限のコード使用により、すばやく実現できる宣言型の設定。
- ユーザーは外部オブジェクトの形式でカスタムオブジェクトとほとんど同じ機能を使用して、外部データにアクセスできます。
- グローバル検索を使用して、接続された外部システムで統合検索を実行できます。
- クラウドおよびオンプレミスの提供元から外部データにアクセスするレポートを実行できます。以下のレポートに関する考慮事項を参照してください。
Salesforce Connect ソリューションには次の考慮事項があります。
- 外部オブジェクトはカスタムオブジェクトのように動作しますが、一部の機能は外部オブジェクトでは使用できません。詳細は、「Salesforce Connect — すべてのアダプターの Salesforce の互換性に関する考慮事項」を参照してください。
- 外部オブジェクトはレポートのパフォーマンスに影響する可能性があります。詳細は、「Salesforce Connect — すべてのアダプターのレポートに関する考慮事項」を参照してください。
- Salesforce Connect アダプターの使用に関するその他の考慮事項は、「Salesforce Connect — すべてのアダプターの考慮事項」を参照してください。
- 組織間アダプターを使用している場合は、「Salesforce Connect — 組織間アダプターに関する考慮事項」を参照してください。
- OData アダプターを使用している場合は、「Salesforce Connect — OData 2.0 および 4.0 アダプターに関する考慮事項」を参照してください。
- カスタム Apex アダプターを使用している場合は、「Salesforce Connect — カスタムアダプターの考慮事項」を参照してください。
このパターンのソリューションは、標準 Salesforce 組織レベルのセキュリティに準拠する必要があります。HTTPS プロトコルを使用して、リモートシステムに接続することをお勧めします。詳細は、「セキュリティに関する考慮事項」を参照してください。
OData コネクタを使用している場合は、OData 外部データソースのクロスサイトリクエストフォージェリ (CSRF) における特殊な動作、制限、および推奨事項について理解しておく必要があります。詳細は、「Salesforce Connect — OData 2.0 および 4.0 アダプターに関する CSRF の考慮事項」を参照してください。
補足
このパターンでは適時性は非常に重要です。次の点に留意してください。
- 要求はユーザーインターフェースから呼び出されるため、ユーザーがプロセスを待機しないようにする必要があります。
- 外部システムの可用性および外部システムへの接続によっては、外部データの取得に時間がかかることがあります。Salesforce には、外部システムからの応答を待つための設定可能な最大 120 秒のタイムアウト値があります。
- リモートプロセスの実行は、Salesforce のタイムアウト制限内やユーザーの想定時間内に終わるように適時に完了する必要があります。
このパターンは、主に少量の実時間の活動で使用されます。これは、Apex コールソリューションの要求または応答のタイムアウト値や最大サイズが比較的小さいためです。データペイロードがメッセージに含まれるバッチ処理の活動ではこのパターンを使用しないでください。
エンドポイントの機能と標準のサポートは、選択するソリューションによって異なります。
| ソリューション | エンドポイントに関する考慮事項 |
|---|---|
| Salesforce Connect |
OData API — Open Data Protocol を使用して Salesforce 外に保存されているデータにアクセスします。外部データは、OData プロデューサー経由で公開されている必要があります。 その他の API — 利用可能な他のアダプターがニーズに適さない場合は、Apex Connector Framework を使用して独自のカスタムアダプターを開発できます。カスタムアダプターは、どの提供元からでもデータを取得できます。たとえば、コールアウトを介してインターネットから取得できるデータや、プログラムで操作や生成さえできるデータもあります。 Salesforce への接続 — Lightning Platform REST API を使用して他の Salesforce 組織に保存されているデータにアクセスします。 ミドルウェアを介した接続 ミドルウェアを介した接続 — Salesforce Connect パートナーエコシステムは、Salesforce と緊密に連携してミドルウェアゲートウェイのサービスから OData エンドポイントを公開します。そのため、追加コードを記述することなく Salesforce をエンドポイントに接続できます。 |
| 要求と返信 |
Apex SOAP コールアウト エンドポイントで HTTP を介して Web サービスコールを受信できる必要があります。Salesforce は、公開インターネットを介してエンドポイントにアクセスできる必要があります。 Apex HTTP コールアウト エンドポイントで HTTP コールを受信できる必要があります。Salesforce は、公開インターネットを介してエンドポイントにアクセスできる必要があります。 Apex HTTP コールアウトを使用して、標準の GET、POST、PUT、DELETE メソッドを使用する RESTful サービスをコールできます。 |
システムを統合する場合、継続的に状態を追跡するためにキーが重要になります。たとえば、レコードがリモートシステムで作成された場合、通常は継続的な更新をサポートするためにレコードには何らかの識別キーが必要です。2 つのオプションがあります。
- Salesforce が、リモートレコードの主キーまたは一意のサロゲートキーを保存する。
- リモートシステムが、Salesforce の一意のレコード ID または他の一意のサロゲートキーを保存する。この同期パターンでインテグレーションキーを処理する場合に固有の考慮事項があります。
| マスターシステム | 説明 |
|---|---|
| Salesforce | リモートシステムは Salesforce レコード ID またはその他の一意のサロゲートキーをレコードから保存します。 |
| リモートシステム | リモートプロセスへのコールでアプリケーションから一意のキーが返され、Salesforce はそのキー値を一意のレコード項目に保存します。 |
場合によっては、このパターンで規定されるソリューションで複雑なインテグレーションシナリオを実装する必要が生じることがあります。これらのシナリオは、多くの場合ミドルウェアを使用して解決されます。次のようなシナリオがあります。
- 複数のシステムへのコールにおけるコールとその結果の集約
- 受信メッセージと送信メッセージの両方の加工
- 複数のシステムへのコールにおけるトランザクションの整合性の確保
- Salesforce と外部システム間のその他のプロセスオーケストレーション活動
各アダプターには異なる制限が適用されます。詳細は、「Salesforce Connect — すべてのアダプターの一般的な制限」を参照してください。
次の表は、このパターンに使用されるミドルウェアシステムの望ましいプロパティの一覧です。
| プロパティ | 必須 | 望ましい | 不要 |
|---|---|---|---|
| イベント処理 | X | ||
| プロトコル変換 | X | ||
| 変換/加工 | X | ||
| キューイングとバッファリング | X | ||
| 同期伝送プロトコル | X | ||
| 非同期伝送プロトコル | X | ||
| 仲介ルーティング | X | ||
| プロセスコレオグラフィとサービスオーケストレーション | X | ||
| トランザクション性 (暗号化、署名、信頼できる配信、トランザクション管理) | X | ||
| ルーティング | X | ||
| 抽出、加工、読み込み (ETL) | X | ||
| long polling | X |
外部オブジェクトでは、18 文字の Salesforce レコード ID を使用して関連レコードを関連付ける、標準参照関係がサポートされます。ただし、Salesforce 組織の外部に保存されたデータは、多くの場合レコード ID が含まれていません。そのため、外部オブジェクトでは、外部参照と間接参照という、2 つの特殊なタイプの参照関係を使用できます。
この表には、外部オブジェクトで使用できるリレーション種別がまとめられています。
| リレーション | 許可された子オブジェクト | 許可された親オブジェクト | レコードを照合する親項目 |
|---|---|---|---|
| 参照関係 | 標準、カスタム、外部 | 標準、カスタム | 18 文字の Salesforce レコード ID |
| 外部参照 | 標準、カスタム、外部 | 外部 | 外部 ID 標準項目 |
| 間接参照 | 外部 | 標準、カスタム | External ID および Unique 属性を使用して、カスタム項目を選択します |
Salesforce Connect — OData 2.0 および 4.0 アダプターに関する高データボリュームの考慮事項
組織で外部オブジェクトにアクセスするときにレート制限に達する場合は、関連付けられた外部データソースで [高データボリューム] オプションを選択することを検討してください。このオプションを選択すると、ほとんどのレート制限が迂回されますが、一部の特殊動作と制限は適用されます。詳細は、「Salesforce Connect の高データボリュームの考慮事項」を参照してください。
Salesforce Connect — OData 2.0 および 4.0 アダプターのクライアント駆動ページングとサーバー駆動ページング
外部データの Salesforce Connect クエリで、大量の結果セットがバッチやページに分割されて示されることはよくあります。ページングの動作を外部システム (サーバー駆動) で制御するか、Salesforce Connect の OData 2.0 または 4.0 アダプター (クライアント駆動) で制御するかを決定します。外部データソースの [サーバー駆動のページ設定] 項目は、クライアント駆動とサーバー駆動のどちらのページングを使用するかを指定します。外部データソースのサーバー駆動ページングを有効にすると、要求されたページサイズ (デフォルトの queryMore() バッチサイズの 500 行を含む) が Salesforce で無視されます。バッチは、外部システムによって返されるページで決まりますが、各ページは 2,000 行を超えることはできません。ただし、その場合でも Salesforce Connect の OData アダプターの制限は適用されます。
例
ある製造会社が、Salesforce を使用して、顧客のケースを管理しているとします。カスタマーサービスエージェントは、バックオフィスの ERP システムからリアルタイムの注文情報にアクセスし、ERP で学習したりレポートを手動で実行したりすることなく顧客の全体像を把握したいと考えています。
- OData エンドポイントで外部データソースを設定する。リモートアプリケーションには OData のネイティブサポートが含まれる可能性があります。その他のアプリケーションの場合、Dell Boomi、Informatica、Jitterbit、MuleSoft、Progress Software などの主要なインテグレーションベンダーが Salesforce Connect で Salesforce と提携してアダプターを作成しています。
- 直接、またはミドルウェアソリューションを介して、Salesforce Connect で OData エンドポイントを参照する。
- 外部データベーステーブルを Salesforce の外部オブジェクトと同期する。ユーザーがこれらの外部オブジェクトのデータを使用してページにアクセスすると、Salesforce Connect はバックエンドアプリケーションに対するリアルタイムのコールアウトを実行します。