Salesforce ソース

Denodo は、Salesforce.com に接続するためのコネクターを提供しています。このコネクターを使用すれば、Salesforce アカウントのデータにクエリを実行して、レコードの挿入、更新、削除ができます。

このコネクターで、あらゆる Salesforce オブジェクトを操作できます。このオブジェクトとして、Salesforce によってデフォルトで作成されるオブジェクト (取引先や取引先責任者など) やカスタムオブジェクトがあります。


このコネクターは、Salesforce の REST API を使用します。コネクションの確立では、HTTPS と OAuth 2.0 認証プロトコルを使用して安全にデータにアクセスできるので、ユーザー名とパスワードを提供する必要がありません。

以下に示す 2 つの OAuth 2.0 認証フローがサポートされています。これらのフローは、Denodo サーバーが Salesforce で自身を認証する方法を定義します。

  1. Web サーバーフロー: このフローでは、コネクターから提供されるウィザードを使用して、 アクセストークン更新トークン を取得できます。

  2. ユーザー名とパスワードによるフロー: Salesforce の資格情報を指定する必要があります。

2 番目のフローは、トークンを取得する必要がないので、「Web サーバーフロー」より構成が容易ですが、Salesforce のユーザー名とパスワードを指定する必要があります。Web サーバーフローでは、このデータソースが実行できる操作を制限できるので (Denodo への読み込みアクセスのみ許可するなど)、より安全です。また、アクセストークンや更新トークンが侵害された場合でも、Salesforce のユーザーアカウントのパスワードを変更せずに、それらのトークンを無効にすることができます。


Salesforce はオンプレミスに存在しないので、このソースに実行するクエリは、データベースやローカルファイルなどの他のソースに実行するクエリより応答が遅くなる可能性があります。Salesforce の基本ビューが関係するクエリのパフォーマンス向上を図るには、以下のタイプのビューでキャッシュを有効にすることを検討します。

  • 変更がほとんど発生しないオブジェクトの場合は、基本ビューを全体キャッシュモードにして、Scheduler のジョブで定期的にそのキャッシュにプリロードします。

  • レコードが決して削除されることがなく、追加および更新されるだけのオブジェクトの場合は、増分キャッシュモードを有効にします。増分キャッシュモードの詳細および Salesforce でこのキャッシュモードを使用する方法の例については「 増分モード 」を参照してください。

接続アプリケーションとしての Denodo の登録

Denodo で Salesforce データソースを作成する前に、Salesforce で 接続アプリケーションをセットアップ する必要があります。アプリケーションの登録では以下の手順を実行します。

  • OAuth 設定 を有効にします。このコネクターは、OAuth 認証プロトコルを使用して Salesforce に接続します。

  • コールバック URL として「https://<host name of the Denodo server>:9090/oauth/2.0/redirectURL.jsp」を設定する必要があります。Salesforce では、この URL を「http://」ではなく、「https://」にすることが必須です。

    この URL は、組織外部からアクセス可能とする必要はなく、完全にアクセス不能とする必要もありません (つまり Denodo Web コンテナに対しては TLS を有効にしません)。

    この後のデータソースの構成で、[Authentication flow] を [Web server] に設定し、ウィザードを使用して OAuth の資格情報を取得する場合、ウィザードで開いたブラウザで資格情報を入力する必要があります。この資格情報が正しい場合、Salesforce によってブラウザがこの URL にリダイレクトされます。このリダイレクトは、Salesforce がこの URL にアクセスできるかどうかに関係なく実行されます。

  • このアプリケーションに一定の OAuth スコープ を付与する必要があります。[full] および [refresh token] を選択した場合、このデータソースは任意のクエリを実行でき、現在のアクセストークンの期限が切れた場合は新しいアクセストークンを取得できます。

Salesforce データソースの作成

Salesforce データソースを作成するには、メニューから [File] > [New] > [Data source] > [Salesforce] をクリックします。

Salesforce データソースの構成で中心となる要素は認証フローです。このコネクターは、OAuth 2.0 プロトコルを使用して、以下の認証フローをサポートします。

データソースを作成するうえで必要な情報は、使用する認証フローによって異なります。

Web サーバーフロー

Web サーバーフロー 認証フローは、OAuth 2.0 標準で定義されている Authorization Code Grant に相当します。

この認証フローには、 ユーザー名とパスワード によるフローにはない、セキュリティ上の重要な利点が 1 つあります。それは、Salesforce のユーザーアカウントの資格情報が Denodo に知られることがなく、Denodo では、登録アプリケーションの資格情報のみを認識するという点です。

Creating a Salesforce data source using the Web server flow

Web サーバー フローを使用した Salesforce データソースの作成

このフローでは、以下の詳細情報を入力します。

  • Name: 新しいデータソースの名前。

  • Authentication flow: [Web Server] を選択します。

  • Client identifierClient secret: これらはそれぞれ、Salesforce での接続アプリケーションの [Consumer Key] と [Consumer Secret] です。

  • Sandbox: サンドボックス環境 に接続する場合にチェックします。これにより、Denodo で OAuth 認証を実行するために使用するホスト名が変更されます。

    • チェックしている場合のホスト名は https://test.salesforce.com です。

    • チェックしていない場合のホスト名は https://login.salesforce.com です。

    これは、認証目的で使用するホスト名です。実際のデータを取得するリクエストは、[Base URL] フィールドで指定したホストに送信されます。

  • Mutual Authentication: 「相互認証」を使用する場合にチェックします。詳細については、後述の「 相互認証 」を参照してください。

  • [Base URL]、[Access token]、および [Refresh token] の各ボックスに入力する情報がすでに手元にある場合は、それらを入力して [Ok] をクリックします。資格情報ウィザードを使用する必要はありません。

    これらの情報を入手していない場合は、[launch the OAuth 2.0 credentials...] をクリックして、それらの情報を入手するためのウィザードを開きます。

OAuth 2.0 credentials wizard

OAuth 2.0 資格情報ウィザード

  1. [Token endpoint URL] と [Authorization server URL] の各フィールドには適切なデフォルト値が表示されます。[Sandbox] チェックボックスをチェックしているかどうかによって、この値は異なります。

  2. [Redirect URI] には、Salesforce で「接続アプリケーション」をセットアップする際に入力した コールバック URL を入力します。

  3. [Scopes] は、Denodo が Salesforce に対して実行できるアクションです。ここに スコープ を追加しない場合、Salesforce の「接続アプリケーション」の構成の [Selected OAuth Scopes] で選択したすべてのアクションを Denodo で実行することが認可されます。

    スコープを定義する場合、追加するスコープごとに image5 ボタンをクリックして、その名前を入力します。

  4. [Set the "state" request parameter] チェックボックスをチェックします。

  5. [Generate the authorization URL]、[Open URL] の順にクリックします。ブラウザが起動しない場合は、この URL をコピーして手動でブラウザを開きます。

    このページでは、Salesforce アカウントの資格情報を入力して、この接続アプリケーションが認可されるようにする必要があります。登録アプリケーションのユーザー名とパスワードではなく、Salesforce アカウントのユーザー名とパスワードを入力します。

    この資格情報が正しければ、Salesforce によってブラウザが [Redirect URL] の URL (Salesforce アカウントで Denodo を登録する際にセットアップした コールバック URL) にリダイレクトされます。

  6. リダイレクト先の URL をコピーして、ウィザードに戻ります。 手順 3 のボックスに、この URL を貼り付けます。

    ページが存在しないというエラーがブラウザに表示されても問題ありません。その URL をコピーして、ウィザードに貼り付けます。このページは、その URL をウィザードに貼り付ける必要があることを通知する情報メッセージにすぎないので、このエラーは無視してかまいません。

  7. [Obtain the OAuth 2.0 credentials] をクリックします。

    ここまでに指定したすべての詳細情報および前の手順で貼り付けた URL のパラメーターを使用した OAuth 資格情報が Virtual DataPort サーバーから要求されます。正常に認証されると、[Access token]、[Refresh token]、[Base URL]、および [API version] の各フィールドに自動的に値が入力されます。

    返される応答には、アクセストークン、およびこのデータソースからのリクエストの送信先とする Salesforce ホスト名が記述されているほか、接続アプリケーションの構成によっては、更新トークンも含まれています。

  8. [Ok] をクリックしてウィザードを閉じます。

    これまでの手順で取得した情報が、ウィザードによってテキスト領域とテキストフィールドに入力されます。

  • [Ok] をクリックして [Edit HTTP Connection] ダイアログを閉じます。つづいて、[Save] をクリックするとデータソースが作成されます。

  • Access token: OAuth 2.0 アクセストークン。

  • Refresh token: OAuth 2.0 更新トークン。

  • Base URL: アクセスする Salesforce インスタンスの URL。

  • API version: 使用する Salesforce REST API のバージョン。「v41.0」のような値であることが必要です。[Get latest version] をクリックすると、この API の最新バージョンを取得するリクエストが Salesforce に送信されます。

  • Delegate GROUP BY: チェックした場合、GROUP BY 句が Salesforce にプッシュダウンされます。Salesforce では、GROUP BY を使用したクエリが返すことができる行数が 2,000 に制限されていることを考慮してください。

  • Include deleted and archived data: チェックした場合、削除したデータとアーカイブしたデータがクエリの結果に追加されます。Salesforce では、削除したデータとアーカイブしたデータがデフォルトで除外されます。

  • Configure proxy: このデータソースのプロキシ構成を設定できます。このダイアログで [Default] を選択した場合、データソースでは Virtual DataPort サーバーの デフォルトプロキシ が使用されます。

ユーザー名とパスワードによるフロー

ユーザー名とパスワードによるフロー は、OAuth 2.0 標準で定義されている Resource Owner Password Credentials Grant に相当します。

注釈

コネクションは https で暗号化されますが、この OAuth 認証フローでは資格情報がやり取りされます。他の認証フローを使用できない場合に限り、この認証フローを使用します。

Creating a Salesforce data source using the Username and password flow

ユーザー名とパスワード によるフローを使用した Salesforce データソースの作成

[Username and password] フローを選択すると、以下のフィールドの入力を要求されます。

  • Name: 新しいデータソースの名前。

  • Authentication flow: [Username and password] を選択します。

  • Client identifierClient secret: これらはそれぞれ、Salesforce での接続アプリケーションの [Consumer Key] と [Consumer Secret] です。

  • User identifierUser password: Salesforce ユーザーアカウントの資格情報です。

  • Security token: Salesforce アカウントの セキュリティトークン です。

  • Sandbox: サンドボックス環境 に接続する場合にチェックします。これにより、Denodo が OAuth 認証を実行するために使用するホスト名が影響を受けます。

    • チェックしている場合のホスト名は https://test.salesforce.com です。

    • チェックしていない場合のホスト名は https://login.salesforce.com です。

    これは、認証目的で使用するホスト名です。実際のデータを取得するリクエストは別のホスト名に送信されます。

  • API version: 使用する Salesforce REST API のバージョン。「v41.0」のような値であることが必要です。[Get latest version] をクリックすると、この API の最新バージョンを取得するリクエストが Salesforce に送信されます。

  • Mutual Authentication: 「相互認証」を使用する場合にチェックします。詳細については、後述の「 相互認証 」を参照してください。

  • Delegate GROUP BY: チェックした場合、GROUP BY 句が Salesforce にプッシュダウンされます。Salesforce では、GROUP BY を使用したクエリが返すことができる行数が 2,000 に制限されていることを考慮してください。

  • Include deleted and archived data: チェックした場合、削除したデータとアーカイブしたデータがクエリの結果に追加されます。Salesforce では、削除したデータとアーカイブしたデータがデフォルトで除外されます。

  • Configure proxy: このデータソースのプロキシ構成を設定できます。このダイアログで [Default] を選択した場合、データソースでは Virtual DataPort サーバーの デフォルトプロキシ が使用されます。

[Save] (image3) をクリックして、データソースを作成します。


[Metadata] タブでは、データソースを保存するフォルダーを設定して説明を指定します。データソースを編集する際、 image1 ボタンをクリックして、その所有者を変更できます。


Web サーバー フローでは [Base URL] を入力する必要がありましたが、 ユーザー名とパスワード によるフローでは不要です。このフローでは、データソースを作成する際に Virtual DataPort サーバーで以下のプロセスが実行されるからです。

  1. Salesforce にアクセストークンを取得するリクエストを送信します。

  2. その応答には、アクセストークンとベース URL が記述されています。

  3. Virtual DataPort サーバーには、入力した情報とこの URL が保存されます。データソースの VQL を確認すると、これらの値が表示されます。

相互認証

相互認証 を有効にすることで、Salesforce とのコネクションのセキュリティを一層強化できます。このタイプの認証 (別名「双方向 SSL/TLS」) では、Salesforce に接続するクライアントアプリケーション (この場合は Denodo) が、その身元を検証できる証明書を提示する必要があります。

この認証方法を有効にする前に、Salesforce アカウントで 相互認証証明書をセットアップ する必要があります。

Mutual authentication configuration for a Salesforce data source

Salesforce データソースでの相互認証の構成

Salesforce で相互認証を有効にした場合は、以下の情報を指定する必要があります。

  • Base URL: Salesforce インスタンスへの URL とポート 8443 を入力します (「https://c15.salesforce.com:8443」など)。このタイプの認証を使用するクライアントアプリケーション (この場合は Denodo) は、このポートで証明書を提示する必要があります。

  • Certificate password: Denodo で使用する秘密キーを収めたファイルのパスワードを入力します。

  • [Load certificate] をクリックして、秘密キーを収めたファイルを選択します。サポートされている秘密キーの形式は PKCS#12 と JKS です。

注釈

ユーザー名とパスワード によるフローでは、[Base URL] として固有の Salesforce インスタンスを設定します。詳細については、Salesforce ナレッジベースの この記事 を参照してください。

Salesforce データソースからの基本ビューの作成

データソースを作成すると、基本ビューの作成を開始できます。基本ビューは、それぞれ 1 つの Salesforce オブジェクトを表します。このデータソースから作成した基本ビューを、他のソースから作成したビューと組み合わせることができます。

List of available objects of a Salesforce source

Salesforce ソースの使用可能なオブジェクトのリスト

Salesforce の基本ビューを作成するには、以下の手順に従います。

  1. [Server Explorer] でデータソースをダブルクリックして開き、[Create base view] をクリックします。

    使用可能な Salesforce オブジェクト (デフォルトオブジェクトとカスタムオブジェクト) のリストが表示されます。

    オブジェクトを検索するには、ダイアログ上部にあるボックスにその名前を入力します。リストには、ここに入力したテキストを使用した名前のオブジェクトのみが表示されます。

  2. 基本ビューの作成対象とするオブジェクトの横にあるチェックボックスをチェックします。

  3. [View prefix] には、すべての新しいビューに適用する接頭辞を入力できます。たとえば、「salesforce_」と入力すると、すべての新しいビューに「salesforce_」で始まる名前が割り当てられます。

  4. [Browse] をクリックして、基本ビューの作成先とするフォルダーを選択します。このダイアログでは、新しいフォルダーの作成、または既存のフォルダーの名前変更ができます (このダイアログを右クリックすると、この 2 つのオプションが表示されます)。

  5. [Create selected] をクリックします。

  6. 選択したオブジェクトが 1 つのみの場合、基本ビューに設定されるスキーマを表示したタブが開きます。このタブで、以下の処理が可能です。

    • 新しい基本ビューの名前を変更する。

    • 新しい基本ビューのフィールドの名前と型を変更する。

    • image1 ボタンをクリックして、フィールドの [Source type properties] を編集する。このダイアログでは、フィールドの正確な型を定義できるほか、その型によっては長さと小数点以下桁数も定義できます。

    [Save] (image3) をクリックして、基本ビューを作成します。

  7. 複数のオブジェクトを選択した場合、作成されたすべてのビューのリストを表示したダイアログが開きます。選択したオブジェクトの名前を持つビューがすでに存在する場合、以下に示すようなダイアログが表示されます。

    Renaming new views with the same name as existing ones

    既存のビューと同じ名前を持つ新しいビューの名前変更

    このダイアログでは、赤で表示されているビューの新しい名前を入力するか、そのチェックボックスのチェックをはずす必要があります。[Ok] をクリックすると、チェックしたビューが新しい名前で作成されます。

    複数の基本ビューを一度に作成しようとしたとき、その多くの名前が既存のビューと同じであった場合に、それらのビューごとに新しい名前を入力しなくてもすむ方法があります。作成するビューと同じ名前を持つ既存の基本ビューをすべて選択して右クリックし、[Prefix selected views/associations] をクリックします。このオプションを使用すると、選択したすべてのビューの名前に接頭辞が付加されます。この処理の後、元のダイアログに戻って基本ビューを作成すれば、どの名前も競合することがなくなります。

[Server Explorer] の次の 2 か所に、新しい基本ビューのリストが表示されます。

  1. ビューの作成先フォルダーに表示されます。基本ビューを別のフォルダーに移動する場合は、そのフォルダーまで基本ビューをドラッグします。

  2. 基本ビューが属するデータソースの子ノードとして表示されます。このノードは、他のフォルダーに移動できません。データソースから作成された基本ビューを容易に確認できるように、このような子ノードがツリーに追加されます。

[Server Explorer] で新しい基本ビューのスキーマを表示するには、そのビューをダブルクリックします。基本ビューを変更するには [Edit] をクリックします。

SOQL クエリからの基本ビューの作成

オブジェクトを表す基本ビューを作成する代わりに、 Salesforce Object Search Language (SOQL) を表す基本ビューを作成できます。

そのためには、[Create base view] ダイアログで [Create from query] をクリックします。

Creating a base view from a SOQL query

SOQL クエリからの基本ビューの作成

基本ビューと SOQL クエリの名前を入力して [Save] (image3) をクリックします。そのスキーマは、通常の基本ビューと同様に編集できます。

この SOQL クエリに関しては、以下の点を考慮します。

  1. この SOQL クエリでは、Virtual DataPort の構文ではなく、Salesforce Object Query Language の構文を使用する必要があります。

  2. SOQL では SELECT * FROM ... がサポートされていません。列の名前を入力する必要があります (SELECT name FROM... など)。

  3. クエリには、 補間変数 を使用できます。これにより、指定したクエリ条件に従って、SOQL クエリをパラメーター化できます。

    クエリで補間変数を使用する場合は、[OK] をクリックした後、クエリで使用する各変数の値を入力します。Virtual DataPort では、それらの値を使用してクエリを実行し、基本ビューを作成するために必要なメタデータを取得します。

    各補間変数は、クエリの実行時に値を取得できるように、生成した基本ビューに属する属性に関連付ける必要があります。データソースへのアクセスに使用する SOQL クエリによって、変数と同じ名前のフィールドが返される場合、その変数は基本ビューの対応する属性に関連付けられます。SOQL クエリで変数と同じ名前のフィールドが返されない場合は、Virtual DataPort によって、その変数と同じ名前の新しい属性が基本ビューに追加されます。

    Editing the value of the interpolation variables

    補間変数の値の編集

WHEREEXPRESSION 変数を使用する SOQL クエリ

前述したように、基本ビューの作成に使用する SOQL クエリで補間変数を使用して、そのクエリをパラメーター化できます。

Virtual DataPort には、SOQL クエリから容易に基本ビューを作成できるようにする補間変数として WHEREEXPRESSION があらかじめ定義されています。そのようなクエリを実行すると、Virtual DataPort サーバーによって、 WHEREEXPRESSION が基本ビューに送信する条件に置き換えられます。

[OK] をクリックした後で、使用している変数の値を入力する必要があります。入力すると Virtual DataPort によってクエリが実行され、基本ビューを作成するために必要なメタデータが得られます。

次に、[Save] (image3) をクリックして、基本ビューを作成します。

投影できないフィールドを扱っている WHERE 条件を設定した SOQL クエリ基本ビューの結果をフィルター処理する場合、ダイアログの一番下のボックスにそれらのフィールドの名前をカンマ区切りで入力します。これらのフィールドは基本ビューに属していますが、Virtual DataPort サーバーではそれらの値が投影されません。それらのフィールドは、この基本ビューを指定したクエリの WHERE 句でのみ使用するべきであり、それらのフィールドに指定する値は、データベースに送信するクエリを生成する目的でのみ使用されます。

クエリに必ず WHERE 句を使用することが強制されないように、Virtual DataPort には 補間関数 ExecuteIfIsNotNull が用意されています。この関数の構文は以下のとおりです。

^ExecuteIfIsNotNull( <prefix if the variable is not NULL>
    ,@<variable name>
    ,<suffix if the variable is not NULL>
    [,<value if the variable is NULL> ] )

実行時に変数の値を定義していない場合は、この関数によって @<variable name> が変数の値に置き換えられ、それに接頭辞と接尾辞が付加されます。

  • 関数のパラメーターの間には空白を置かないようにする必要があります。

  • 一重引用符ではなく、二重引用符でパラメーターを囲みます。

  • 2 番目のパラメーターに、補間変数の名前を、中括弧で囲まない構文 @VARIABLE_NAME で指定する必要があります。他の状況では、構文 @{VARIABLE_NAME} で変数を指定する場合がありますが、この関数ではこの構文は使用しません。

SELECT id, name FROM account ^ExecuteIfIsNotNull("WHERE ",@WHEREEXPRESSION,"")

実行時にこのビューに対して実行するクエリで WHERE 句を使用している場合、 @WHEREEXPRESSION は、接頭辞として WHERE 、接尾辞として空文字列が付加されたクエリ条件で置き換えられます。

ExecuteIfIsNotNull の 4 番目のパラメーター (省略可能) を設定した場合、この関数は必ず実行されます。補間変数の値が NULL の場合、この関数はこの 4 番目のパラメーターの値を返します。たとえば、以下の SQL クエリを使用して基本ビューを構築しているとします。

SELECT id, name
FROM account ^ExecuteIfIsNotNull('WHERE',@WHEREEXPRESSION,'','WHERE name <> NULL')

実行時にこのクエリで WHERE 句を使用していない場合、Virtual DataPort サーバーは、データベースで以下のクエリを実行します。

SELECT id, name FROM account
WHERE name <> NULL

注釈

これらの例では、変数 WHEREEXPRESSION に補間変数 ExecuteIfIsNotNull のみを組み合わせていますが、他の補間変数と組み合わせて使用することもできます。

バイナリフィールド

Denodo の Salesforce 向けコネクターは、バイナリフィールドを持つレコードのクエリ、挿入、および更新をサポートしています。

バイナリフィールドを持つ Salesforce オブジェクトから基本ビューを作成した場合、基本ビューではそのフィールドの型は「blob」になります。クエリで Salesforce 基本ビューの blob フィールドを投影すると、Salesforce から各 blob 値の URL が返されます。コネクターによって透過的にそれらの URL にリクエストが送信され、その結果にバイナリ値が追加されます。

ビューにこのような動作を必要としない場合は、そのフィールドの型を「text」に変更します。これにより、クエリでこのフィールドを投影すると、その値は実際のバイナリ値ではなく、blob 値の URL になります。

フィールドの型を「text」に変更するには、以下の手順に従います。

  1. ビューを編集して、そのフィールドで「text」型を選択します。

  2. image1 をクリックして、[Source Type Properties] ダイアログを開きます。

  3. このダイアログの [Type] で [VARCHAR] を選択します。

  4. [Ok]、[Save] (image3) の順にクリックします。

バイナリフィールドの挿入または更新

Salesforce レコードのバイナリフィールドを挿入または更新するには、その値を Base64 でエンコードして指定する必要があります。以下に例を示します。

UPDATE contentversion
SET versiondata = 'VGhpcyB0ZXh0IGlzIGVuY29kZWQgaW4gQmFzZTY0dkldkldklklaUUIII....'
WHERE id = '0680Y000002H9KfQAK'

Salesforce の制限事項

Salesforce によって以下の制限事項が適用されます。

  • [Delegate Group BY] オプションをチェックしている場合、エンティティのフィールドをグループ化して、そのフィールドで集計することはできません。

  • [Delegate Group BY] オプションをチェックしている場合、返される行数の最大値は 2000 です。

他の設定

Salesforce に対するコネクションのデフォルトのタイムアウト値は 120000 ミリ秒です。この値を、たとえば 240000 ミリ秒に変更するには、以下の手順に従います。

  1. 以下のコマンドを実行します。

    SET 'com.denodo.vdb.catalog.datasource.salesforce.timeout'='240000'
    
  2. サーバーを再起動します。