見出し画像

Salesforce Connect について調べてみた

こんにちは、co-meetingにてエンジニアしているハナミズキです。今回のネタはSalesforce Connect(旧Lightning Connect)です。2014年にリリースされた機能でありますが、外部データと連携する機能としては気になっていたので調べてみました。
今回は、ゆるっとSalesforceトーク第31回目の発表で利用したスライドをベースに紹介していきます。


1.概要

まず初めに、概要から、Salesforce Connect(旧Lightning Connect)では、まるでSalesforceに格納されたオブジェクトと同じような感じで外部のデータを表示・検索・編集できる機能を提供しています。

2.お勧めする利用シーン

記載の通り、クラウド上に保存されたデータをSalesforce組織で表示・処理したい時、大量のデータが外部に存在しており、Salesforce組織にコピーしたくない時、外部の最新データにリアルタイムでアクセスしたい時に使えます!

3.特徴・メリット

環境が整っている場合、ノーコードで簡単に設定できて、素早く外部データへ参照することができます!

また、多少の制限がありますが、標準オブジェクトやカスタムオブジェクトと同じように扱えて、参照関係の設定やレポート参照ができます!

最後に、これが一番でかいメリットかもしれませんが、リクエスト毎にデータを取得するので常に最新であり、かつ、Salesforceのストレージを消費しません。

4.Salesforce上での利用イメージ

Salesforce Connectを使用した結果、どのようにデータをSalesforce上で利用できるか紹介していきます。
今回は以下のような構成で動作を確認しました。

Salesforceのオブジェクトと同じように見れる(情報の参照)

Salesforceのオブジェクトと同じように外部オブジェクトの一覧を閲覧できたり、個別でレコードページを開いたり、検索したり情報を参照できます。

Salesforceのオブジェクトと同じように見れる(情報の更新)

Salesforceのオブジェクトと同じように編集できます。画面フローをレコードページに埋め込むなどのカスタマイズも可能です。
(※サポートされているデータ型のみ)

Salesforceのオブジェクトと同じように見れる(レポート)

カスタムレポートタイプを作成する必要はありますが、Salesforceのオブジェクトと同じようにレポートを作成できます。

設定画面:外部データソース

Salesforce Connectの設定画面は、[設定] で[クイック検索] ボックスに「外部データソース」と入力して、[外部データソース] を選択すると出てきます。

環境に応じた接続種別を選択し必要な情報を登録した後に、[検証して同期]を実行することで、取り込む外部オブジェクトを選択・取り込むことができるような仕組みです。

各オブジェクトを取り込んだ後に、それぞれ外部オブジェクトの項目に対して各設定ができるような仕組みです。

5.接続方式

接続方式は色々あります。公式ヘルプ: 使用する Salesforce Connect アダプターの選択には表形式で記載あるため参照してください。

今回はODataでの連携以外は検証していませんが、接続方式について
以下ちょっとした補足です。

  • ODataプロトコルは、Microsoftが作った仕組みであり、SAPやMicrosoft製品などと連携したい場合は、ODataを使用した接続方式を使うと良いかも。

  • Apexカスタムアダプタについては、公式の開発者向けドキュメント: Apex Connector Framework の使用開始に具体的な作り方がサンプルも含め公開されている。公式ヘルプ: Salesforce Connect でのカスタムアダプター使用の設定によると専用のクラスを作成したら、設定画面で選べるようになるとのこと。

  • Amazon DynamoDBは、AWS とのデータ連携用。

  • SQLのアダプターは、REST API を介して機能を公開している外部ソースと連携できる接続方式とのこと。Amazon AthenaやSnowflakeなどが該当。

  • GraphQLのアダプターは、GraphQL を介して機能を公開している外部ソースと連携できる接続方式とのこと。AWS AppSync を介した Amazon RDS へのアクセスなどが該当。

6.注意事項

今回実際に環境を用意して調べたこと、また、公式ヘルプを記載の制約について、私の独断と偏見でピックアップしたものを6件紹介します。

・それなりの費用は発生する

Developer Editionでは検証のため、1ライセンス無料で使えるようになっていますが、Enterprise Editionなどでは有償です。
2014年11月18日にSalesforce Connectの前身である旧Lightning Connectを公式発表した当時は1データソースに対して月額4,000ドルでした。
現在の金額は非公開であり、問い合わせ方式に変わっていますので気になる方は問い合わせてください。また、接続先となるデータソースが増えたらその分、追加で費用が増えるのでコスト計算時は気をつける必要があります。

・サポートされていないデータ型がそれなりに存在する

今回、PostgreSQLでid列を自動で採番する設定を加えたところ、Salesforceからの新しいレコード作成が、CData API Serverを介した接続でうまくいかない事態に遭遇しました。データ型の対応については、「公式ヘルプ: OData 4.0 および 4.01 のデータ型の対応付け」のように情報が公開されていますが、導入時はSalesforce→API領域だけでなく、API→データベース領域でも問題なく動作するかを注意深く検証・調整する必要がありそうです。

・一部の接続方式にはコールアウト制限がある

公式ヘルプ:Salesforce Connect の一般的な制限には、コールアウト制限がある接続方式と、制限がない接続方式が紹介されています。
例えば、OData 4.0 アダプターの場合、1時間あたり2万個です。閲覧・更新のたびにODataプロトコルのAPIがコールされるため、同時接続する社員が多かったり、大量データに対する操作など必要になった場合、意識する必要がありそうです。

・外部オブジェクトのレコード変更をトリガーとしたレコードトリガーフローは作れない

残念なことに選べないです。Salesforceに実体となるレコードを持っていないので当たり前なのかも知れませんが、レコードの変更をトリガーに自動プログラムを作り込むことはよくあることなので、非常に悔しいポイントです。
(補足ですが、フロー内に配置できる要素として、レコード取得やレコード更新などCRUD系の要素は外部オブジェクトでも普通に使えました。これは嬉しいポイントです。)

・変更検知がサポートされているのは、OData 4.0 / OData 4.01 の接続方式のみ

詳細は公式ヘルプ: 外部変更データキャプチャを使用した外部オブジェクトのデータ変更の追跡を閲覧ください。なお、これはODataプロトコルを使えば良いというわけではありません。変更追跡がサポートされたODataでなければ「エラー: Problem querying for changes. データ変更の次回のポーリング要求をスケジュールできません。OData プロデューサーでは変更追跡がサポートされていません。odata.track-changes の Preference-Applied ヘッダーが応答にありません。」となります。
今回調査する際に、CData API Serverなどの有償サービスを使いましたが、サポートされていませんでした。
変更追跡がサポートされたODataを用意できたとしても内部の仕組みとしては、5〜30分置きにSalesforceがリクエストを投げて差分が存在するか確認する仕組みでした。このように制限ありますが、変更検知に合わせたApexトリガーを作り込むことはできそうでした。しかし、変更検知はリアルタイムではないことを頭の片隅に入れておく必要がありそうです。

・外部オブジェクトのメタデータ(スキーマ)を変更した時の影響は地味に大きい

項目のデータ型を変更したあとに[検証して同期]すると失敗します。
例えば、特定の文字列以外入力を許さない列がある場合、入力ミスを減らすよう管理者は、Salesforce側の設定にて「テキスト型」から「選択リスト型」に変更したりします。
後日、テーブルに新たな列を追加することになり、そのメタデータとなる情報を同期しようとしたら、「選択リスト型」など存在しないという事で同期エラーが発生しました。元の「テキスト型」に戻せば問題なく同期はできます。この些細な手間は頻繁にテーブルに修正が入るタイミングでは手間がかかり面倒くさそうに感じました。

最後に

今回、Salesforce Connectについて調べた結果、その強力な連携機能と柔軟性に改めて感動しました!

例えば、外部のデータをSalesforce 組織へ取り込む場合、データのインポートやコピーを行いますが、そのデータはすぐに古くなります。また定期的に同期する仕組みを作り込むには、開発者向けの知識が必須です。

それに対してSalesforce Connectを使用すれば、リアルタイムでデータにアクセスできるため、データのインポート作業など不要です。また、ストレージの節約や、ノーコードで設定できる部分は、日々の運用において大きなメリットです。これにより業務の効率化を図ることができるかもしれません。

しかし、注意事項に記載したとおり、費用面やサポートされていないデータ型、制約など、多くの課題を考慮する必要があることも事実です。

使えるか/使えないか私個人の目線で考えると、
費用面で許せるのであれば、外部データを利用してレポート作成する・Salesforce内のレコード変更をトリガーに外部データの値をリアルタイムで更新するなどの用途に非常に向いていると感じました。
逆に外部データの変更を監視し、自動処理などに取り込むのは相性が悪いとも感じました。

以上です、ここまで読んでくださりありがとうございました!
この記事が、誰かの参考になれば良いなと思います。

ではでは!