はじめに
昨年のDreamforceで発表されたsalesforce1 Lightningですが、2015年3月に世界中の100都市以上でLightning Developer Weekが開催されるなど、より熱気を帯びてきましたね。ますます注目です!
今回はLightning4兄弟(※1)の"Lightning Connect"を使い、外部データソースをSalesforceに統合するまでを試してみたいと思います。(標準カスタマイズだけで試せます!)
ODataプロデューサーを自前で実装&公開し、Lightning Connectでつなぐとカッコいいわけですが、今回はLightning Connectを使って外部データソースとSalesforceを簡単に統合できることの体感を目的としますので、その辺りはまたの機会に取り上げてみたいと思います。
(※1)Lightning4兄弟(セールスフォース・ドットコム社がこう言っているわけではありません。)
・Lightning App Builder
・Lightning Component
・Lightning Process Builder
・Lightning Connect
Lightning Connectの概要
Lightning Connectを概要レベルで説明すると以下のようなイメージでしょうか。
1. SOQLを外部オブジェクトに対して発行する
2. SOQLをODataクエリに変換する
2. HttpでODataプロデューサーにリクエストする
3. ODataプロデューサーはODataクエリを解析しSQLなどを使ってデータを取得する
4. ODataプロデューサーは、取得したデータからレスポンスを組み立ててレスポンスする
5. Salesforceはレスポンスを解析し、外部オブジェクトにデータをマッピングする
6. SOQLのレスポンスとしてデータを扱う
サンプルで使用するODataサービス
http://www.odata.org で公開されているNorthwind(※2)サービスを使用してみます。
(※2)Northwind Northwindは、Microsoft SQL ServerやMicrosoft Accessに添付されていたサンプルデータベースです。 ODataの仕様策定にはMicrosoft社が関わっているため、Northwindサービスが提供されているのでしょうね。
Northwindサービスのリンクにアクセスすると、AtomPub(Atom Publishing Protocol)がレスポンスされるのがわかります。Northwindサービスで提供するテーブルの一覧ですね。
外部データソースの設定
NorthwindサービスをSalesforceで扱うために外部データソースの設定を行います。
設定>開発>外部データソース から新規に外部データソースを登録します。
以下の設定がポイントです。
種別:Lightning Connect:OData2.0
URL:http://services.odata.org/V2/Northwind/Northwind.svc/
形式:AtomPub
外部データソースの保存ができたら、"検証して同期"をクリックします。
外部データソース(Northwind.svc)が提供するテーブル一覧が表示されます。 今回は、"Customers"と"Orders"を選択して、"同期"ボタンをクリックします。
同期した結果、外部オブジェクトが自動的に作成されます。 なお、同期して作成された外部オブジェクトのカスタム項目すべて参照権限が設定されていませんので、項目レベルセキュリティの設定で参照権限を与えておきます。
外部データを参照してみる
外部オブジェクトは、カスタムオブジェクトと同様にタブで表示できるので、タブを作成しビューでデータを確認してみます。図のようにデータが表示されれば成功です。
参照関係を設定する
Northwindサービスで提供される、"Customers"と"Orders"は参照関係にあるテーブルなので、Salesforce上でも参照関係を設定し、関連リストで表示できるようにしてみます。
外部オブジェクトの"Orders"に"外部参照関係"のカスタム項目を追加し、外部列の名前に"Customers"との外部キーなる外部列の名前"CustomerID"を設定します。
Customers外部オブジェクトのページレイアウトでOrdersを表示するように修正します。ページレイアウトの修正後、Customersのレコードを参照すると、関連リストにOrdersレコードが表示されます。
SOQLを試す
外部オブジェクトに対して、ApexなどからSOQLで検索することもあると思いますので簡単に試してみました。
Select CustomerID__c From Customers__x Where CustomerID__c = 'ALFKI'
Like検索:NG
Select CustomerID__c From Customers__x Where CustomerID__c Like 'A%
' 単純なOR条件:OK
Select CustomerID__c From Customers__x Where CustomerID__c = 'ALFKI' or CustomerID__c = 'ANATR'
日付&範囲指定:OK
Select OrderID__c, OrderDate__c From Orders__x Where OrderDate__c >= 1997-12-01T00:00:00Z AND OrderDate__c <= 1997-12-31T23:59:59Z
日付&範囲指定&Order By:OK
Select OrderID__c, OrderDate__c From Orders__x Where OrderDate__c >= 1997-12-01T00:00:00Z AND OrderDate__c <= 1997-12-31T23:59:59Z
Order By OrderDate__c Desc
日付&範囲指定&Order By&Limit:OK
Select OrderID__c, OrderDate__c From Orders__x Where OrderDate__c >= 1997-12-01T00:00:00Z AND OrderDate__c <= 1997-12-31T23:59:59Z
Order By OrderDate__c Desc Limit 5
日付&範囲指定&Order By&Limit&Offset:OK
Select OrderID__c, OrderDate__c From Orders__x Where OrderDate__c >= 1997-12-01T00:00:00Z AND OrderDate__c <= 1997-12-31T23:59:59Z
Order By OrderDate__c Desc Limit 5 Offset 10
リレーションシップクエリ(Parent-Child):OK
Select CustomerID__c, (Select OrderID__c From Orders__r) From Customers__x Limit 5
リレーションシップクエリ(Child-Parent):NG
Select OrderID__c, Customer__r.CustomerID__c From Orders__x
Like検索はNGですね。これは、ODataのクエリオプション"$filter"がLike演算子をサポートしていないためです。(決してLightning Connectが悪いわけではありませんよ。) リレーションシップクエリ(Parent-Child)にも対応しているのですね! リレーションシップクエリ(Child-Parent)はEXTERNAL_OBJECT_EXCEPTIONの例外がスローされました。単にサポートされないのか、書き方が悪いのかちょっとわかりませんでした。。 現在、Lightning ConnectでサポートされていないいくつかのODataクエリオプションや考慮すべき制限事項があります。Lightning Connect に関する考慮事項を一読しておきましょう。
Lightning Connectを触ってみて
外部データソースを設定し外部オブジェクトが生成できると、標準/カスタムオブジェクトを使ったこれまでのカスタマイズの要領で外部データを扱える点は素晴らしいですね。開発者の方なら、SOQLを使った開発を行いますが、VisualforceやLightning Component等で外部データを統合したUIも簡単に実現できそうです。 今後期待したいところは、外部データに対する追加・更新でしょう。 ODataプロトコルは追加・更新をサポートしているので、これに対応すればERPなどの基幹システムのフロントとして、ますます活躍するのでしょうね。 一方、Salesforceは強固なセキュリティ機能を有していますが、Lightning Connectを介した外部データに対するレコードアクセスコントロール(共有ルール)はありません。 Lightning Connectを採用する場合には、十分考慮したいポイントになることでしょう。 ※Lightning Connectを使わず、別の手段で外部データソースとデータ統合する場合でも、類似の課題は生じるわけですが。
おわりに
Lightning Connectを使用して、手軽にSalesforceと外部データソースが統合できることを紹介しましたが、いかがでしたでしょうか? Lightning Connectを適用するためには、対向となるODataプロデューサーが重要になってくるわけですが、個々のRDB製品等に対応したODataプロデューサーの実装を自前で個別に行うのは大変そうです。 そういう意味で、あらゆるデータソースのプロキシとなるようなクラウドサービスの登場が待ち望まれますね!