Salesforce Connectで外部オブジェクトを利用してみよう

February 7, 2019 Takayuki Shiroo

ビジネスを進めていく上で、どうしても「Salesforce を利用しながら、Salesforceではない別のシステムのデータを参照・更新したい」といった悩みは、どの会社にもあふれているでしょう。みなさんは、どのようにしてこの問題について対応しますか?

  • 面倒であるけれども手動で各システムのデータを参照・更新を行う
  • 日次バッチ等で、利用したいデータのコピーをSalesforceに取り込む
  • SalesforceのAPIやETL等のツールを利用して利用したいデータを参照・更新する連携処理を実装する

最後のAPI等による連携は「利便性やセキュリティの観点から、できれば Salesforce 内だけで画面操作を完結したい」「データの母数が大量で Salesforce のディスク容量を圧迫してしまう」といった問題にも対処できますが、一般的にはプログラミングやETL等のツールが必要になり、実際に実現しようとなると少し敷居が高くなってしまいそうです。

安心してください。Salesforceには設定のみで外部システムと連携ができるSalesforce Connectというサービスが提供されています。

Salesforce Connectを利用すると、Salesforce外部システム上のデータは「外部オブジェクト」として、いまみなさんが操作をしているSalesforceから直接、外部システム上にあるデータの参照や更新ができるようになります。特別なコーディングは不要です。Salesforceの設定を行うだけで利用可能になるのです。


今回は、外部のシステムとして別組織のSalesforceを例にして、実際にSalesforce Connectと外部オブジェクトの設定を行ってみましょう。なお、SalesforceとSalesforceを連携するのであれば、外部オブジェクトを使用せずとも、例えば、Salesforce-to-Salesforceなどのソリューションを利用することができますが、今回はあくまでも例として一方のSalesforceを「外部システム」と見立てて外部オブジェクトの利用例を紹介します。

Salesforce Connectを設定してみる

その前に今回利用する2つのSalesforceについて名前をつけておきます(この名称はあくまでも両者を区別するための便宜上の名称であり、Salesforceの正式な用語ではありません)。

  • Provider: 自分のオブジェクトをConsumerに外部オブジェクトとして公開します(=Provider)。
  • Consumer: Provider上に定義されているオブジェクトを外部オブジェクトとして利用します(=Consumer)。

目標は、「Provider上にあるカスタムオブジェクトをConsumer上で参照/編集する」ことです。

設定の流れは以下のようになります。

1. (事前準備) Providerにてオブジェクトを作成する

2. Consumerにて、外部データソースの設定を行う

3. Consumerにて、検証して同期を行う

4. Consumerにて、タブとページレイアウトの設定を行う

5 .動作を確認してみる

それでは実際に設定して行きましょう。

 

1. (事前準備)Providerにて、オブジェクトを作成する

Provider側でオブジェクト(カスタムオブジェクト)を1つ作成します。「部屋」という名前で、空き部屋に関する情報を保持するオブジェクトとしましょう。


 

 

2. Consumerにて、外部データソースの設定を行う

さて、外部オブジェクトの設定はここからです。まず最初に外部オブジェクトがホスティングされているProvider側への接続情報を定義しましょう。[設定] => [インテグレーション] => [外部データソース]を開きます。

ここでは外部データソースの名前を"ExternalProvider"としておきます。なお、「管理者ユーザ名」と「管理者パスワード」には、接続先のシステム、つまり、Provider側のユーザ名とパスワードを設定します。

また、忘れてはならないのが「書き込み可能外部オブジェクト」にチェックを入れることです。デフォルトではチェックが入っていません。チェックを入れることで、外部オブジェクトへの書き込み機能が提供されます。

 

3. Consumerにて、検証して同期を行う

外部データソースの定義が終わったら、「検証して同期」という作業を行います。つまり、実際にこの外部データソースの定義を用いて、ConsumerからProviderへ接続を行いProvider側のオブジェクトをConsumer側で「外部オブジェクト」として取り込むための操作および設定を行います。


 

接続エラーが発生した場合は、前のステップに戻って「外部データソース」のユーザ名、パスワードを確認しましょう。また、Provider側のユーザのログイン履歴を確認することでも、パスワードの間違いやセキュリティトークン、IPアドレス制限などのエラーを確認することができます。

無事に接続が成功すると、Provider側に定義されているオブジェクトの一覧が取得できます。

この中から、今回Consumer側で利用したい「部屋」というオブジェクトを探します。


 

画像のようにチェックを入れて、画面上部(または下部)にある「同期」ボタンを押下します。同期が成功すると、以下のように「部屋」オブジェクトが表示されます。

作成された「部屋」オブジェクトの内容を見てみましょう。上記画像の「部屋」をクリックします。

API名は、外部オブジェクトの場合は末尾に__xが付与されます。もともと、Provider側では、Property__cという名前でしたが、Consumer側では、Property_c__xのようになります(__cが_cになっていることに注意)。

いくつか設定の変更を行いましょう。「部屋」オブジェクトをレポートで利用しますので、「レポートを許可」にチェックを入れましょう。また、「リリース済み」に変更します(「開発中」のままでは、権限(システム管理者 or アプリケーションのカスタマイズ)を有しているユーザのみが参照できるからです)。

「検索を許可」にチェックを入れることで、グローバル検索の対象に外部オブジェクトを含めることができます。 さらに設定を続けて行きましょう。
 

4. Consumerにて、タブとページレイアウトの設定を行う

タブとページレイアウトの設定を行います。タブは通常のカスタムオブジェクト同様に設定することができます。特に外部オブジェクト固有の設定はありません。ここで追加したタブは「External Object」というアプリケーションを定義して追加しておきましょう。

ページレイアウトの設定自体も、同様に設定することができます。カスタムのレイアウトを以下のように定義をして、「部屋レイアウト(カスタム)」と別名で保存します(その理由は後述します)。忘れずにレイアウトの割り当ての変更を行いましょう。

 

5. 動作を確認してみる

これで一通り設定ができました。実際にレコードを確認してみましょう。

1) Provider側でレコードを登録する
2) Consumer側でレコードを確認する
3) Consumer側でレコードを更新する
4) Provider側でConsumer側でのレコードの更新をする
 

1) Provider側でレコードを登録する

以下のようにレコードを登録します。特に難しい点はありません。

2) Consumer側でレコードを確認する

これまでいくつかの設定を行ってきましたが、いよいよConsumer側でレコードを閲覧するときがきました。「部屋」タブを開いてみましょう。

Provider側で登録したレコードが表示されています。部屋番号部分をクリックします。

先程定義したページレイアウトに従って、Provider側の部屋レコードの詳細が確認できます。

3) Consumer側でレコードを更新する

下記画像の編集ボタンを押し、レコード内容を変更してみましょう。上記では「形態」を戸建てへ変更しています。保存ボタンを押下します。

すると、レコードの更新が即時に反映されます。実際、「最終更新日」も保存ボタンを押下した時間で更新されていることがわかります。

4) Provider側でConsumer側でのレコードの更新をする。

最後に、Provider側でもレコードの更新状況を確認しておきましょう。当然ですが、Consumer側で更新された内容がProvider側でも確認ができます。


 

いかがでしたでしょうか。1行もコードを記述することなく、別なシステム(Provider)にあるレコードを自分のシステム(Consumer)で参照、更新することができました。

 

外部オブジェクトの利用で何が嬉しいのか?

ここまでで、外部オブジェクトの設定と実例をご紹介しましたが、もう少し外部オブジェクトについて考えてみます。いったい、外部オブジェクトを利用することで、何が嬉しいのでしょうか。

まず、1つ目は「宣言的手法」により、1行もコードを記述することなく、別のシステム(Provider)にあるレコードを自分のシステム(Consumer)で参照、更新することができる点があります。一般的にデータ連携は専門的な知識を必要とすることが多いですが、外部オブジェクトを利用した場合は、それがなくとも設定することができます。

2つ目は、下記に代表されるような一般的なSalesforceの機能が利用できることです。

  • タブによるレコード表示(レコードアクセス)が利用できること
  • 標準のページレイアウトやViewによる機能が利用できること
  • レポートが利用できること

3つ目は、レコードの反映に即時性があることです。つまり、ConsumerおよびProviderにおいて、双方でのレコードの更新結果は即時に更新されるため、待つ必要がないことです。

また、今回は触れませんでしたが、ApexやSOQLからの外部オブジェクトに対する操作も、通常のオブジェクトと同様に行うことができます。このため、単に「他システムのデータを参照する」ということだけではなく、それを利用し、「複雑なロジックを構築することができる」ということも挙げられます。

 

外部オブジェクト利用時の注意点

と良いことばかりの外部オブジェクトですが、その利用においては注意が必要な点を挙げておきましょう(Winter '19時点)。

  • 自動化プロセス機能(Workflow/承認プロセス/プロセスビルダー)はサポートされていない
  • Triggerもサポートされていない
  • デフォルトで定義されるレイアウトは「検証して同期」を行うと、上書きされてしまう(上記の例で、レイアウトを別名で保存していた理由は、この事象を回避するためです)。

簡単ではありますが、Salesforce Connectを利用した、外部オブジェクトの機能をご紹介しました。

著者について

Takayuki Shiroo

Cloudの世界に身を投じて早くも数年。変化の速いCloudの世界の波に揉まれながらも日々Cloudの世界で仕事をしていることを楽しんでいます。Dreamforce 2019に参加します。どんな世界が待っているかワクワクしています。

Takayuki Shiroo のコンテンツをもっと見る
戻る
Salesforce DXの活用
Salesforce DXの活用

Salesforce DX の活用 - Salesforce DXの概念と基本的な使い方を紹介します。

次へ
Heroku Tips(6) BlazeMeter による負荷テスト
Heroku Tips(6) BlazeMeter による負荷テスト

Heroku Tipsの6回目は、Heroku アドオンのBlazeMeterをご紹介したいと思います。クラウドの世界においても構築したWebアプリケーションに対する負荷テストは従来と同様に重要なものです。今回ご紹...

アピリオまでお気軽にお問合せください

ご質問はこちら