こんにちは、荒木です。
前回のエントリでは、Apex Data Loader を例に実際に使用されているAPIについて紹介しました。 連携ツールがどのようなAPIをどのように使用しているのかを知ることで、よりツールを有効的に活用することができます。
今回は、弊社のクラウド型連携サービス「SkyOnDemand」を例に取り上げてみたいと思います。
SkyOnDemandは、ノンコーディングで連携を設定できる新しいオンデマンド連携サービスです。 各接続先ごとに予めアダプタが用意されており、GUI上のマウス操作で設定を行うことができます。 詳細は、アイコンをクリックして製品紹介ページをご参照ください。
SkyOnDemandに用意されているアダプタ
SkyOnDemandに用意されているセールスフォースのアダプタは、3種類あります。
それぞれ、使用するAPIが異なります。
アダプタ名 | 使用するAPI | 概要 |
Salesforce アダプタ | SOAP API | レコードのCRUD操作やユーティリティのAPIコールを行うコンポーネントが用意されています。 |
Salesforce Bulk アダプタ | Bulk API | レコードのCRUD操作やジョブやバッチの管理を行うコンポーネントが用意されています。 |
Salesforce Metadata アダプタ | Metadata API | 選択リスト項目の選択値を操作するコンポーネントが用意されています。 |
それぞれのアダプタには、コンポーネントと呼ばれる部品群が用意されています。
処理フローの中で、使いたい処理のコンポーネントを選択します。
データ読み取りのコンポーネント
データ読み取りのコンポーネントは多くの種類が用意されています。
それぞれのコンポーネントがどのAPIを使用してデータを取得しているかを見てみましょう。
アダプタ名 | コンポーネント名 | 使用するコール |
Salesforce アダプタ | データ読み取り(クエリー) | query() または queryAll() |
データ読み取り(親→子リレーション) | ||
データ読み取り(子→親リレーション) | ||
データ読み取り(SOQL実行) | ||
データ読み取り(IDによる検索) | retrieve() | |
データ読み取り(レプリケーション) | getUpdated() または getDeleted() |
使用するコールの詳細については、前回のエントリをご覧ください。
まず、もし手元にIDを持っているのであれば、データ読み取り(IDによる検索)を使用すべきです。 データの差分抽出を行う場合であれば、データ読み取り(レプリケーション)で期間指定を行うことができますが、期間以外の条件指定をすることができないため注意が必要です。 より柔軟に条件を指定する場合は、SOQLを使用するコンポーネントを選択すべきでしょう。
SOQLを実行する query() / queryAll() の機能に対応するコンポーネントの種類は4つあります。 これらは、実行するSOQLの内容やプロパティの設定方法によって使い分けることが出来ます。
SOQL実行処理の使い分け
シンプルなSOQLを実行したい
データ読み取り(クエリー)はSOQLを実行してデータ抽出を行うもっともシンプルなコンポーネントです。
具体的には、1つのオブジェクトから関数を使用せずレコードを条件抽出します。
また、SOQL を直接記述する必要はありません。GUIでの操作で SOQL を構築することができます。 プロパティの設定箇所と SOQL 構文の関係は次のようになっています。
WHERE句を指定する欄では、変数の値を代入することが可能です。
動的に条件式を変更したり条件値をバインドすることができます。
親-子リレーションクエリを実行したい
例えば、取引先とそれに紐付く商談の情報をまとめて取得したい場合、親-子リレーションを使用します。 SOQL で親-子リレーションを辿るには、子リレーション名を使用してネストした SOQL を記述します。
これを実現するのが、データ読み取り(親→子リレーション)です。
親オブジェクトに対するSOQLの設定を行うと、自動的に紐付く子リレーションの一覧がリストに表示されます。例えば、親オブジェクトに取引先を選択すると、次の画面のようにリストが表示されます。リストから対象の子リレーションを選択して、サブクエリ側のSOQLの設定を行うことができます。
親-子リレーションでは、他のSOQL構文とは異なりレスポンスもネストされた構造として返されます。
SkyOnDemandではレスポンスの構造を可視化することができ、書き込み先との項目移送をドラック&ドロップでマッピングすることができます。 取引先と商談を親-子リレーションで抽出するSOQLレスポンスの、可視化された構造を見てみましょう。
子-親リレーションクエリを実行したい
例えば、商談の情報を取得する際に、紐付く取引先や所有者の情報をまとめて取得したい場合、子-親リレーションを使用します。子-親リレーションを辿るには、 Account.Name のように親リレーション名をドットで表記したSOQLを記述します。 これを実現するのが、データ読み取り(子→親リレーション)です。
オブジェクトリストから抽出する子オブジェクトを選択すると、子オブジェクトの項目に加えて親オブジェクトの項目を同じように扱うことができます。 例として、商談を対象オブジェクトに選択した場合の、読み取りスキーマ作成画面を見てみましょう。
関数を使用したい
例えば、ある取引先に紐付く複数の商談の最高金額を取得したい場合は、集計関数の MAX() を使用します。
このような関数は、データ読み取り(子→親リレーション)で使用することができます。 このコンポーネントでは、抽出する各項目に対して関数を直接入力する欄が用意されています。
もっと複雑なSOQLを実行したい
これまで紹介したコンポーネントは、各目的に合ったSOQLを組み立てるためのGUIが用意されています。 もし、実行したいSOQLがGUIで設定できない複雑な構文であった場合、データ読み取り(SOQL実行)を使います。 このコンポーネントでは、SOQLを直接入力して実行することができます。入力するSOQLに対して、アダプタでの制限はありません。
例えば、次のようなSOQLを実行するケースです。
- 2階層以上を辿る子-親リレーションを含む
- 複数の親-子リレーションを含む
- 親-子リレーションと子-親リレーションを同時に含む
- 親-子リレーションと関数を同時に含む
- エイリアスの使用
- 抽出する項目での toLabel() の使用
まとめ
今回は、SkyOnDemandのSalesforce読み取り系のコンポーネントと使用しているAPIについて紹介してきました。Salesforceとの連携では、APIコール数や処理時間を節約するため、効率の良いデータアクセスを行うことが重要です。 使用するAPIやSOQLを知ることによって、目的に合ったコンポーネントを選択することができるようになると思います。
次回は、引き続きデータ書き込み系のコンポーネントを紹介する予定です。
最後に、今回の記事で紹介した内容を一覧にまとめます。
コンポーネント名 | 使用するケース | SOQL | |
リレーション | 関数 | ||
データ読み取り (クエリー) |
|
× | × |
データ読み取り (親→子リレーション) |
|
△親-子 (子1オブジェクト) |
× |
データ読み取り (子→親リレーション) |
|
△子-親 (親1階層まで) |
〇 |
データ読み取り (SOQL実行) |
|
〇 | 〇 |
データ読み取り (IDによる検索) |
|
― | ― |
データ読み取り (レプリケーション) |
|
― | ― |