Help us understand the problem. What is going on with this article?

freeeのデータをLightning Connect経由でSalesforceタブに表示する

More than 5 years have passed since last update.

外部データソース(External Data Source)について

Winter '15から External Data Source(外部データソース)機能がGAとなり Developer Edition で利用できるようになりました。マーケティングネームとしてLightning Connectと呼ばれていたりしますが、Apple製のデバイスに刺すあいつのことではありません。

外部データソースとは、Salesforceの外部のサービスをあたかもSalesforce内のオブジェクトであるかのように扱える便利な機能なのですが、今のところ2つの課題があります。1つ目は、接続できる外部サービスはSalesforceからリーチできる場所(=クラウド上)にある必要があるということで、2つ目は、サービスがODataというちょっと馴染みの薄いエンタープライジー(?)なプロトコルに対応している必要があるということです。

外部データソースとファイアーウォール越え

1つ目の課題については、セキュアエージェントという機能がいずれそれを解決してくれる模様です。セキュアエージェントとは、Salesforceからファイアーウォール内のデータソースにアクセスできるように、ファイアーウォール内に置くブリッジプログラムのことです。内部ではおそらくWebSocket/Cometのような形で通信路を確保することで、クラウドからの逆向きのリクエストを処理できるようになっているのではないかと思います。現在は残念ながらSharePointデータソースのファイル検索にしか対応していない模様ですが、いずれ任意の外部データソースに対してもブリッジしてくれるようになるのではないかと思います。

もしそれが待てないなら、3rd Partyのソリューションを使うという手もあります。DataDirect Cloudは、ファイアーウォール内のOn−Premiseデータベースに接続するブリッジソフトウェアとクラウド上のODataプロキシがセットになったサービスです。Salesforceの外部データソース経由の接続についてはこちらに記事があります。

OData と Apex Connector Framework

もうひとつの課題、現在はODataプロトコルに対応する必要があるという点ですが、こちらについてはODataでなくとも Apex Connector Framework というものを用いれば対応できるとのことです(現在はパイロットプログラムのみ)。しかしながら、Apexですべて賄うのは何かと面倒な上、そもそも外部データソースでは認証プロバイダ経由で自動的にアクセス管理をしてくれるのが良い点なので、そこをカスタムでやらなければいけないのであれば魅力が半減してしまいます。

OData プロキシと freee API

サービスがODataプロトコルが話せないのであれば、強制的に話せるようにしてしまえばいいのでしょう。ここで、Heroku上にOData変換プロキシを設けてやることで、通常のOAuth保護されたREST APIを持つサービスにアクセスできないだろうかと考えました。せっかくなので、連携のニーズの多そうなクラウドベースの会計ソフトであるfreee のAPIを題材にしてみます。

ちなみにfreeeのAPIはこちらに説明があります。OAuth2に対応しています。

認証プロバイダの登録

Salesforceには、認証プロバイダという外部のアイデンティティプロバイダにログインを委ねられる機能があります。FacebookやSalesforceだけでなく、OpenID Connectに対応したプロバイダについても扱えるようになっています。さらにSpring '14からOpenID Connectプロバイダでなくとも、任意のOAuth 2.0プロバイダに対しても接続できるようになりました。こちらに関しては以前書いたこちらの記事をご参照下さい。

freee APIにアクセスする際にも、この認証プロバイダの機能を活用することになります。freeeのAPIコンシューマキー・シークレットの取得は、freeeにログインした上でこちらから登録できます。

外部データソースの設定

認証プロバイダを作成したら、External Data Sourceを登録します。種別は「プラットフォーム接続: OData 2.0」に設定する必要があります。サービスURLには、freeeのAPI Endpointではなく、以降に説明するHeroku上のODataプロキシのURLを指定します。

ID種別としてユーザを選び、認証プロトコルはOAuth、そして認証プロバイダには先ほど作成した「freee」を設定します。

Google ChromeScreenSnapz154.png

Heroku上のODataプロキシ実装

今回はNode.js+Expressでプロキシを書いています。freee APIの deals (取引(収入/支出)) の情報を取得するだけの、もっとも最小限のプログラムのみを記述することにします。

External Data Sourceでは、接続時に<External Data SourceのサーバURL>/$metadata に対して、このサービスが持つテーブル情報のメタデータをリクエストしてきますので、埋め込みのXMLを返しています。この中にはDealテーブルとそのスキーマ情報が記載されています。

次に<External Data SourceのサーバURL>/Dealエンドポイントを用意します。こちらでSalesforceからfreeeのOAuthトークン情報を受け取り、その上でfreee APIのdealsリソースの情報をリクエストし、返ってくるJSONを前述のODataスキーマ情報に合わせて変換します。

外部オブジェクトの作成とタブの追加

あとは、External Data Source 内のDealテーブルを表示する外部オブジェクトを作成し、それをタブ化してあげれば大丈夫です。

その結果はこちらです。

Google ChromeScreenSnapz159.png

...あれれ?

お詫び

理論的にはこれでうまくいくとおもってたんですけど、なんかいろいろできてないみたいです。
もう時間切れですすいません、見積り誤りました。
結果についてはいずれアップデートします。
ソースもちゃんとうまく行ったら公開しますので、勘弁して下さい...

※ このエントリはSalesforce1 Advent Calendar 2014に参加することになっていました。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした