今月は10/4から10/7にかけて、Salesforce の一大イベントである Dreamforce2016 が開催されましたね。
テラスカイからも多くのメンバーが参加してきました。自分は留守番でしたが・・・
参加メンバーによるDreamforceのレポートは、姉妹ブログである TECH BLOG Force.comのすべて+ にて、分かり易くまとめた記事からマニアックな記事まで投稿されています。参加された方も参加できなかった方も是非ご覧ください。
さて、今回はそんな Salesforce をさらに活用するための SkyOnDemandでサイズの大きいファイルをダウンロードする方法をご紹介したいと思います。
サイズの大きいファイルに気を付けよう
Salesforceのファイルをダウンロードする方法については、以前執筆した「Salesforceのファイルをアップロード/ダウンロードしてみよう」でご紹介していました。
以前の記事では、読み取り系コンポーネントの「ファイル出力設定」を使用して簡単にファイルをダウンロードすることができましたが、サイズの大きいファイルを扱う場合は注意が必要です。
この機能は SOAP API を使用しており、ファイルサイズに比例して多くのメモリを必要とします。(一例として、30MBファイルのダウンロードでおよそ600MB弱のメモリを使用)
万が一、メモリが枯渇してしまった場合にはダウンロードに失敗するなど連携処理への影響が考えられます。
では、このような場合にどのように解決すべきかというと、単純にメモリを増強するという手もありますが、今回は REST API を使用して解決してみたいと思います。
REST APIとは?
Salesforceには多くの種類のAPIが用意されていますが、REST APIはその中でも軽量に動作する特徴があります。ファイルの操作は1件づつとなりますが、ストリームでダウンロードされるためSOAP APIに比べメモリ枯渇のリスクが少なくなります。
SkyOnDemandでREST APIを実行する場合、RESTアダプタを使用します。RESTアダプタは汎用的なアダプタとなっており、様々なRESTfulサービスへリクエストを送ることができます。
RESTアダプタの設定手順
100MBのファイルをChatterに投稿しておきました。このファイルをSkyOnDemandでダウンロードする設定を行ってみたいと思います。
▼ グローバルリソース接続設定の作成
グローバルリソースの新規作成にて ネットワーク > REST > REST接続設定 を選択します。
URLは、下記のように設定します。instance_name には組織が所属するインスタンス名(apなど)を指定します。
▼ スクリプト変数の宣言と値の代入
デザイナに移り、まずは次の2つのスクリプト変数(文字列型)を宣言します。
- session_id ・・・ SalesforceのセッションID
- file_id ・・・ ダウンロードするファイルID
次に、このスクリプト変数へ代入する値を取得します。今回は、Salesforceアダプタのデータ読み取り(クエリー)を使用します。
Chatterで投稿したファイルはコンテンツドキュメントに格納されていますが、ここでは該当のファイルのIDのみを取得します。
取得したファイルIDと、セッションIDをそれぞれスクリプト変数へ代入します。Salesforceアダプタの各コンポーネントには、コンポーネント変数「session_id」があり実行時に使用したセッションIDが格納されています。
▼ REST API の実行
RESTアダプタの「GET実行」コンポーネントを使用します。
【必須設定】
パスの一部には、スクリプト変数「file_id」を代入指定しています。
【レスポンス設定】
レスポンスデータをファイルとして出力するように指定します。
【ヘッダ設定】
AuthorizationヘッダにBearerトークンとしてセッションIDを指定します。Salesforceアダプタが使用したセッションを再利用してREST APIを実行することになります。
【認証設定】
セッションIDによる認証となるため、ここでの認証設定は必要ありません。
▼ プロセスフローの設定と実行
プロセスフローを繋げて、実行してみます。
HTTP 200 が返され、「/data/testfile」が作成されていることが確認できます。
今回は、Chatterで投稿されたファイルをダウンロードしましたが、REST APIでは他のストレージのファイルも扱うことができます。例えば、添付ファイルであればURLのパスは「/sobjects/Attachment/attachment_id/Body」となり、ドキュメントであれば「/sobject/Document/document_id/Body」です。SalesforceのREST APIについて詳しくは「Force.com REST API 開発者ガイド」や「Chatter REST API 開発者ガイド」などを参照してください。
Salesforceには様々なAPIが用意されているため、目的によって取捨選択することが必要とされます。大きいファイルのダウンロードをご検討されている場合も、ぜひSkyOnDemandをお試しください。