「Salesforceアダプタ」分かる!6種類の読み取り機能を使い分け

Avatar
dstn


みなさん、こんにちは。株式会社テラスカイ 製品開発部の荒木です。

突然ですが、少し自己紹介を・・・。
私どもテラスカイは、クラウドとシステム連携をキーワードに最先端のテクノロジーを活用したソリューションをお客様に提供しています。とくにクラウドの代名詞であるセールスフォースが得意分野であり、そのノウハウを活かしDataSpider SDKによる Salesforceアダプタの開発を行っています。
・・・と、前書きはここまでにして、そのような背景から今回 Salesforceアダプタの記事を書かせて頂くことになりました。

さっそくですが、みなさんはSalesforceアダプタを使用するときにこんなことを思ったことはありませんか?

「データを読み取りたいんだけど、コンポーネントの種類が多いな・・・どれ使えばいいんだっけ・・?」

そうなんです。これでもかっていうくらいあります。どれを使用するのが適しているのだろうと迷ってしまうこともありますね。
さらに、先日(2013年4月26日)リリースされたSalesforceアダプタ API26.0対応版では、新しいコンポーネントが追加されています。

セールスフォースから データを取得する場合、どのコンポーネントを使用すべき?
今回は、そんな疑問を解決したいと思います。

まず、データ取得のAPIを知ろう


セールスフォースには多くの種類のAPIが用意されています。その中でも、もっとも標準的なAPIがSOAP APIです。SOAP APIでは外部からデータ取得をする機能がいくつか用意されています。
SOAP APIの各機能を、Salesforceアダプタの各コンポーネントと関連付けながら見てみましょう。
salesforce_13

はい、なんとなくコンポーネントごとの役割が見えてきましたね。
あれ?なぜかquery の機能に対応するコンポーネントの種類が4つもあります。
この機能についてもう少し踏み込んで進めていきましょう。

そもそもクエリって?


データを取得するもっともスタンダードな方法は、query を使用することと言えるでしょう。
SQL の SELECT コマンドと同様に、対象のオブジェクト、取得する項目のリスト、レコードを特定するための条件を指定することができます。
ただし、使用できるクエリ言語はSOQL(Salesforce Object Query Language) となります。SOQLはセールスフォース独自のクエリ言語です。
SQL の高度な機能のすべてはサポートされていません。
例えば、ワイルドカードを使用したり、計算式を使用したり、分析関数を使用することはできません。
なお、オブジェクトや項目はシステム名であるAPI名称で記述します。

Salesforceアダプタでは、クエリを実行するコンポーネントは4種類あります。実行したいSOQL構文の内容や、操作方法によって使い分けることができます。

シンプルなクエリの実行


それではまず、「データ読み取り(クエリー)」処理について見ていきましょう。
これはSOQL を実行するもっともシンプルなコンポーネントです。具体的には、1つのオブジェクトから関数を使用せずレコードを条件抽出します。

また、SOQL を直接記述する必要はありません。GUIでの操作で SOQL を構築することができます。
プロパティの設定箇所と SOQL 構文の関係は次のようになっています。
salesforce_1

実際に実行される SOQL は「抽出テスト」ボタンから確認することができます。
salesforce_2

リレーションクエリの実行


一度に複数のオブジェクトからデータを取得、つまり結合抽出はどうのように行えばよいのでしょう。
SOQL では、SQL の JOIN がサポートされていない代わりに、リレーションクエリという構文が提供されています。

リレーションクエリでは、オブジェクト間のリレーションを「親-子」または「子-親」の向きで辿ることができます。
例えば、Salesforce CRM の標準オブジェクトである「Account(取引先)」と「Opportunity(商談)」は、親と子として関連付けされています。
このような関連付けでは、リレーションを辿るために向きに応じてリレーション名が与えられています。
salesforce_3

親-子リレーション

「親-子リレーション」を辿るには、子リレーション名を使用してネストした SOQL を記述します。
これを実現するのが、「データ読み取り(親→子リレーション)」処理です。

「必須設定」タブに親オブジェクトの設定を、「子テーブル設定」タブに子オブジェクトの設定を行います。
まず、「親テーブル名」で「Account(取引先)」を選択してみましょう。
そうすると、「子テーブル名」リストに子リレーション先の一覧が表示されます。ここでは、次のような形式で表示されます。

"オブジェクト名(子リレーション名)  (オブジェクトラベル名)"


今回は、「Opportunity(Opportunities)  (商談)」を選択します。
salesforce_4

抽出するスキーマや条件は、親と子それぞれに指定することができます。
それでは、作成される SOQL を「抽出テスト」で確認してみましょう。
salesforce_5

SELECT 文の中に、子オブジェクトに対するSELECT文がネストされていることが確認できます。
salesforce_6

「親-子リレーション」では、レスポンスもネストされた構造として返されます。後続にマッパーを配置して出力スキーマを確認してみましょう。

「Account」の子要素として「Opportunity」が定義されており、階層構造となっています。つまり、データモデルはXML型です。テーブルモデル型として取得する場合は、後述する「子-親リレーション」を使用します。

子-親リレーション

「子-親リレーション」を辿るには、親リレーション名をドット表記で指定します。
例えば、「Opportunity(商談)」から「Account(取引先)」の項目を辿りたい場合、次のように指定します。

Account.項目名


これを実現するのが、「データ読み取り(子→親リレーション)」処理です。

「テーブル名」に、「Opportunity(商談)」を選択して「スキーマの作成」画面を開いてみましょう。
一覧に、API名が「Account.~」から始まる項目が含まれていることが確認できます。
salesforce_7

なお、一階層親のオブジェクトであれば、複数の親の項目をまとめて取得することもできます。
それでは、実行されるSOQLを確認してみましょう。
salesforce_8

関数を使用したクエリの実行


SOQLには、MAXやSUMなどの分析のための集計関数や、Date項目のフォーマットを変換する日付関数、組織でマルチ通貨が有効になっている場合は通貨項目をユーザの通貨に換算できる関数などが用意されています。

関数を扱う場合は、「データ読み取り(子→親リレーション)」処理を使用します。
このコンポーネントでは、「スキーマ定義」に「関数」欄があり、項目に対して関数を直接入力して指定することができます。
salesforce_9

また、「オプション設定」タブの「集計条件」に、GROUP BY などの集計条件を記述することができます。
salesforce_10

実行されるSOQLを確認してみましょう。
salesforce_11

もっと複雑なSOQLを実行したい!!


セールスフォースは年3回の定期バージョンアップが行われていて、SOQLがサポートする構文もどんどん強力になってきています。

実行したいSOQLが複雑で、これまで紹介してきたコンポーネントでは設定することができなそう・・・。そんな時は、「データ読み取り(SOQL実行)」処理を使いましょう。このコンポーネントでは、SOQLを直接入力して実行することができます。入力するSOQLに対して、アダプタでの制限はありません。

例えば、次のようなケースです。

●2階層以上を辿る「子-親リレーション」を含む
●複数の「親-子リレーション」を含む
●「親-子リレーション」と「子-親リレーション」を同時に含む
●「親-子リレーション」と関数を同時に含む
●エイリアスの使用

SOQLを記述して「SOQLを実行してスキーマを作成」リンクを押すと、出力スキーマの構造が自動的に設定されます。
出力スキーマのデータモデルは、「親-子リレーション」を含む場合はXML型、含まない場合はテーブルモデル型となります。
salesforce_12

このコンポーネントは、先日(2013年4月26日)リリースされた、Salesforceアダプタ API26.0対応版が適用された環境で使用することができます。

まとめ


セールスフォースはクラウドの特性上、自動的にバージョンアップが行われ、新しい機能が追加されていきます。それに接続するアダプタも追従するように進化していき、その結果、多機能化していきます。
このような多機能なツールを扱う場合、各機能がどのような役割で用意されているのかを知ることが、ツールを最大限に活用するポイントだと思います。
今回の記事が、Salesforceアダプタをさらに有効活用する手助けになれば幸いです。

最後に、今回の記事で紹介した内容を一覧にまとめます。
salesforce_14

コメント

ログインしてコメントを残してください。

Powered by Zendesk