Salesforce Connector

数ヶ月前に実装した当社のSalesforceコネクタについて、お聞きになったことがあると思います。このコネクタによって、Nuxeoリポジトリに格納されているコンテンツをSalesforceに直接表示することができます。

さらに一歩進めます。リアルタイムでSalesforceからコンテンツを取得するNuxeo Content Services Platform内のドロップダウンリストを表示できるようにしたいと考えています。したがって、この使用例は、本質的に、以前に実装したもののリバースになります。一例として、Salesforceに格納されている組織リストを(アカウントオブジェクトに)実装することを選択しました。

構成が背後で実行され、その結果は、エンドユーザには透過的です。Nuxeo Platformに格納される値リストを表示することと、Salesforceからリアルタイムで取得することに、違いはありません。

背後で実行

このプラグインは、nuxeo-directory-connectorというNuxeoアドオンに基づいており、このアドオンは、Vocabulary(Directoryとしても知られる)内の値リストを取得するためにウェブサービスを拡張する際に必要とされる全てのものを作成します。

Thibaudが、以前に、ブログで、どのようにnuxeo-directory-connectorを使用することができるか説明しています。

このブログでは、主に、Salesforceへの主要なステップに焦点を合わせます。私が使用したWeb Serviceは、Force.com REST APIに基づくものです。

OAuth2の構成

SalesforceのAPIへの認証は、OAuth2を介して処理されます。OAuth2プロバイダを構成する際に必要なものはすべて、Nuxeo Platformに備わっています。

これは、Admin > Cloud Services > Service Providersメニューで実行されます。

OAuth2 Service Provider

ここでSalesforce OAuth2に関係する情報を定義します。クライアントIDとクライアント機密情報を取得するには、Nuxeo Platformで「Connected App(接続済みアプリ)」を作成する必要があります。そのために、Salesforce > Setup > Build > Create > Appsへ進んでから、Connected Appsタブの下で新しいアプリを作成する必要があります。

次は、Connected Appの構成例です。注意すべき重要な点が2つあります。

あなたのNuxeo Platformがhttpsにあることに注意してください(ローカルホスト上でテストしていない場合)。

  • 選択されたOAuth範囲: - あなたのデータ(api)へのアクセスとその管理 - Web(web)を介してあなたのデータにアクセスする - 随時あなたの代わりにリクエストを実行する(refresh_token、offline_access)

デモ版では、操作を簡単にするためにフルアクセス(全機能)を使用しますが、使用例に応じて調整することができます。

Salesforce Quick Start

構成を保存すると、Consumer KeyConsumer Secretが得られ、Nuxeo Platformにこれらをコピペする必要があります。

NuxeoApp

認証

OAuth2プロバイダを定義したら、Nuxeo Platformを介してSalesforceで認証する必要があります。

そのために、Home > Cloud Servicesへ進んで、Connect to Salesforceをクリックします。接続しオフラインアクセスが許可されると、すべてが設定されています!

Cloud Services Accounts

操作を簡単にするために、これにはNuxeo Platformで管理者アカウントを使用しました。

拡張ポイント

<extension target="org.nuxeo.directory.connector.ConnectorBasedDirectoryFactory" point="directories"><directory name="Salesforce_Organization" class="org.nuxeo.directory.connector.json.salesforce.SalesforceInMemoryConnector"><idfield>Id</idfield> <schema>vocabulary</schema> <parameters><parameter name="url">/services/data/v20.0/query/?q=SELECT+Id,Name+from+Account</parameter> <parameter name="label">Name</parameter> <parameter name="id">Id</parameter> <parameter name="autoRefresh">true</parameter></parameters> <mapping><map field="label">Name</map> <map field="id">Id</map></mapping></directory></extension>

次は、構成が行われている拡張ポイントです。

例えば、Salesforce_Organizationは、Directory(別名Vocabulary)の名前で、所定の提案ウィジェットで使用したい時に使用します。(これについては、次のパラグラフで詳しく説明します)。

Salesforceからコンテンツを取得し、Nuxeo Vocabularyを参照してマッピングを行うために使用される一定数のパラメータがあります。

url(SELECT+Id、Name+from+Account)に入力するSalesforceクエリは、完全に構成が可能です。例えば、連絡先リストやカスタムオブジェクトからの情報も取得することができます。

ここで注意すべき重要な点は、NuxeoボキャブラリにIDラベルがあることです。どのSalesforce ObjectフィールドがIDとして使用され、どのフィールドがラベルとして使用されるのか、宣言するためにクエリの結果を使ってマッピングをしなければなりません。

常にリアルタイムで結果を取得するオプションもあります(autoRefresh)。autoRefreshが「false」に設定されている場合、Salesforceへのリクエストが一度実行され、その結果はNuxeo Platform上のメモリに保持されます。したがって、頻繁に変更されないデータがある場合、そのオプションを選ぶのもいいかもしれません。

提案ウィジェット

前に定義したSalesforce_Organizationディレクトリを使用するには、作成時に提案ウィジェットを追加し、よく読んでから、レイアウトを編集し、それをテキストフィールドメタデータにリンクさせ、Custom Properties Configurationの下でdirectoryNameプロパティを設定する必要があります。

Custom Properties Configuration

以上です!

ここにプラグインがあります。試してみてから、ご意見をお聞かせください。