ASTERIA WARP の CData アダプターを使って Salesforce とつないでみた

# はじめに
ASTERIA WARP 1610リリースに伴い、CDataの Salesforce アダプターが新たに公開されています。

Salesforce へのアクセスは CData Software Inc. 社の提供する技術を利用して RDB のように SQL でアクセスする手段を提供します。
従って、ASTERIA 側で基本的な操作方法は一般的な RDB 系コンポーネントと同じですが、CData 固有の SQL ステートメントや利用できるデータモデルについて詳細は下記の CData 社のオンラインヘルプも参考にしてください。

・CData JDBC Driver for Salesforce のオンラインヘルプ
　http://cdn.cdata.com/help/GFB/jdbc/

今回は Salesforce 側で登録されているドキュメントを SalesforceGet  コンポーネント、SalesforceSQLCall コンポーネントを利用してローカルにダウンロードしてみたいと思います。


# 事前準備
## セキュリティトークンの取得
Salesforce への接続するためにはセキュリティトークンが必要となります。
下記の手順でセキュリティトークンを取得することができます。

1.Salesforce.com の［私の設定］→［個人用］→［私のセキュリティトークンのリセット］を開きます。
2.［セキュリティトークンのリセット］をクリックします。トークンが E メールで送られます。

## コネクションの作成
CData オプションのコネクションはデザイナー側で作成します。

![connection_01.png](https://qiita-image-store.s3.amazonaws.com/0/156332/621c82bd-c3f3-4209-5a1a-027a66325aac.png)

インスペクタで接続設定情報を入力する際に、Salesforce アダプターでは最低限、下記のようなプロパティを設定することを推奨します。

![connection_02.png](https://qiita-image-store.s3.amazonaws.com/0/156332/f2887aad-659a-5c95-77a7-9badc2db0e0e.png)

+ 接続名：コネクション名を設定します。
+ ユーザー：ユーザー名を設定します。
+ パスワード：パスワードを設定します。
+ セキュリティトークン：事前準備で取得したセキュリティトークンを設定します。
+ サンドボックスを使用：サンドボックスアカウントに接続するには「はい」と設定します。デフォルトは「いいえ」と設定されています。 


## コネクションのテスト

Salesforce アダプターのコネクションが作成されたら、コネクションの接続テストを実行してみましょう。

![connection_03.png](https://qiita-image-store.s3.amazonaws.com/0/156332/98a834ae-45ff-4369-7577-76afef721ee9.png)

コネクションの接続テストが成功していることが確認できます。


# フローの作成
## Salesforce 側で登録されているドキュメント
先ずは、Salesforce 画面から登録されているドキュメントを確認してみましょう。

1. 「Infoteria」フォルダのドキュメント
![salesforce_01.png](https://qiita-image-store.s3.amazonaws.com/0/156332/61a1f2a6-d827-5c7d-9ce0-8332d84a40dd.png)

2. 「CData」フォルダのドキュメント
![saleforce_02.png](https://qiita-image-store.s3.amazonaws.com/0/156332/273bb8c4-9057-9487-7ef8-bdb60f0eb0a2.png)

ご覧の通り、「Infoteria」フォルダに２つ、「CData」フォルダに２つのドキュメントがあります。


## フローの構成

上記の４つのドキュメントを指定したローカルパスにフォルダーごとダウンロードするフローを作成してみましょう。

![flow_01.png](https://qiita-image-store.s3.amazonaws.com/0/156332/357a6c77-73cb-2c60-b5d4-f6531120c349.png)

ダウンロード対象のドキュメント情報を SalesforceGet コンポーネントから取得し、SalesforceSQLCall コンポーネントを利用してローカルフォルダーにダウンロードした後に、そのリスト(ファイル名、ファイルの完全パス)を CSV ファイルに出力するフローとなります。 


## コンポーネントの設定内容
主に、SalesforceGet → マッパー → SalesforceSQLCall コンポーネントについて設定内容を確認してみます。

1. SalesforceGet コンポーネントの SQL ビルダー
![flow_02.png](https://qiita-image-store.s3.amazonaws.com/0/156332/1ccc95f4-97e6-ab45-28ef-405497105fd2.png)
    - テーブルの結合：Document テーブル、Folder テーブル
    - 表示項目：
        + Document.Id：ドキュメントの一意の識別子
        + Document.FolderId：ドキュメントのフォルダID
        + Document.Name：ドキュメントの名前
        + Folder.Name：ドキュメントのフォルダ名
    - 条件：フォルダ名が「Infoteria」又は「CData」

2. マッパー１コンポーネント
![flow_03.png](https://qiita-image-store.s3.amazonaws.com/0/156332/b086c106-95d4-59aa-a9f4-70adcfa36d8f.png)
SalesforceGet コンポーネントと SalesforceSQLCall コンポーネントの間に配置したマッパーコンポーネントの設定内容です。SalesforceGet  コンポーネントから取得した情報を SalesforceSQLCall コンポーネントの SQL パラメーターにマッピングしています。
また、フォルダ名情報を利用し、Salesforce の各フォルダ名ごと保存されるように保存先のローカルパスを設定しています。ここでは、「C:¥Salesforce¥Infoteria」と「C:¥Salesforce¥CData」が保存先のパスになると思います。

3. SalesForceSQLCall コンポーネント
    + 基本タブ　　　　　　　　　　　　　　　
    ![flow_04.png](https://qiita-image-store.s3.amazonaws.com/0/156332/dad8699d-3292-52bc-e344-1866984f8466.png)
        + 実行する処理：ストアド実行(結果なし)
        + SQL文：「{ call DownloadDocument( ?Id?, ?Name?, ?Folderid?, ?LocalPath?, ?FileName?, ?FullPath?)}」
    + SQLパラメータータブ
    ![flow_05.png](https://qiita-image-store.s3.amazonaws.com/0/156332/c0eb12b7-97ee-4cdb-c4ca-a91251a5efc9.png)

        + Id：入力用。ダウンロードするドキュメントのID。
        + Name：入力用。ダウンロードするドキュメントの名前
        + FolderId：入力用。ダウンロードするドキュメントのフォルダID。
        + LocalPath：入力用。ファイルの保存先のローカルパス。
        + FileName：出力用。ダウンロードされたファイルの名前。
        + FullPath：出力用。ダウンロードされたファイルの完全パス（名前を含む）。


# フローの実行結果
1. ダウンロードされたドキュメント
![result_01.png](https://qiita-image-store.s3.amazonaws.com/0/156332/cf338dea-13a9-42eb-14e1-0def6f325f10.png)
フローの実行で Salesforce の「Infoteria」と「CData」のドキュメントが指定したローカルの保存先にダウンロードされていることがわかります。


2. ダウンロードされたドキュメントのリスト
![result_02.png](https://qiita-image-store.s3.amazonaws.com/0/156332/ba6ea493-7912-bc6f-2b9f-2e69240f7380.png)
DownloadDocument ストアードプロシージャの実行でダウンロードされたファイルの名前と完全パス情報が出力用のパラメーターに格納されたので、その情報を利用してダウンロードされたドキュメントのリストを CSV 形式で作成することができました。