2018.03.05

Salesforceへ大容量のファイルをアップロード

  • このエントリーをはてなブックマークに追加
  • follow us in feedly

これまで2回にわたって、連携サービス「SkyOnDemand」でSalesforceのファイルを操作する方法をご紹介してきました。最後となる3回目は、大容量のファイルをアップロードする方法をご紹介したいと思います。

これまでの記事

なお、過去の記事は「DataSpider Cloud」をご利用の場合もお読みいただけます。今回は、「DataSpider Cloud」を使用して説明していきたいと思います。

サイズの大きいファイルに気を付けよう

Salesforceのファイルをアップロードする方法については、過去の記事「Salesforceのファイルをアップロード/ダウンロードしてみよう」でご紹介していました。

以前の記事では、書き込み系コンポーネントの「データ書き込み(INSERT)」を使用して簡単にファイルをアップロードすることができましたが、サイズの大きいファイルを扱う場合は注意が必要です。

この機能は SOAP API を使用しており、アップロードでは 38MB までという制限が設けられています。

Salesforce CRM Content や Salesforce ファイル は 2GB まで許容されていますが、SOAP API では制限のため 38MB を超えるファイルをアップロードすることができません。

では、SOAP API の制限を超えるファイルをアップロードしたい場合にどのように解決すべきかというと、 REST API を使用する方法があります。

REST APIとは?

Salesforceには多くの種類のAPIが用意されていますが、REST APIはその中でも軽量に動作する特徴があります。ファイルの操作は1件ずつとなりますが、アップロードできるサイズは 2GB (ヘッダーを含む)まで許容されています。

DataSpider CloudでREST APIを実行する場合、RESTアダプタを使用します。RESTアダプタは汎用的なアダプタとなっており、様々なRESTfulサービスへリクエストを送ることができます。

(なんとここまでほぼ前回の記事のコピペで構成されています。エコですね。)

RESTアダプタを使用した設定手順

100MBのファイルをDataSpider Cloudのストレージに用意しておきました。このファイルを「Salesforce ファイル」へアップロードする設定を行ってみたいと思います。

▼ グローバルリソース接続設定の作成

グローバルリソースの新規作成にて ネットワーク > REST > REST接続設定 を選択します。

URLは、下記のように設定します。instance_name には組織が所属するインスタンス名(apなど)を指定します。

https://instance_name.salesforce.com/services/data/v40.0

▼ セッションIDの取得処理

ここからデザイナに移り、スクリプトの設定をしていきます。REST APIでリクエストを送信する場合、認証ヘッダーにSalesforceのセッションIDを渡す必要があります。SalesforceのセッションIDを取得する方法はいくつかありますが、今回はSalesforceアダプタの「サーバ情報取得」コンポーネントを使用します。

この処理が実行されると、サーバ情報の取得を実行するためにログインが実行され、取得したセッションIDがコンポーネント変数「session_id」に格納されます。

▼ REST API の実行処理

RESTアダプタの「POST実行」コンポーネントを使用します。

【必須設定】

パスには、グローバルリソースに設定したURL以降のパスを指定します。(Salesforceファイル のエンドポイントは API マニュアルから確認することができます。)

【リクエスト設定】

REST API のファイルアップロードではマルチパートフォーム形式でリクエスト送信する必要があります。要素はjsonとバイナリです。

【ヘッダ設定】

AuthorizationヘッダにBearerトークンとしてセッションIDを指定します。「サーバ情報取得」のコンポーネント変数を代入指定することでセッションを再利用してREST APIを実行することになります。

【レスポンス設定】

REST APIのレスポンスデータを後続の処理で扱うことも可能ですが、今回は割愛してデフォルト設定のままとします。

【認証設定】

セッションIDによる認証となるため、ここでの認証設定は必要ありません。

▼ マッピングの作成

「マッピング」コンポーネントを配置して、「POST実行」へデータフローを引きます。(ちなみに今回は1件の入力データを渡したかったので、入力データのないマッピングからデータフローを引いています。こうすると、スクリプト変数やロジックアイコンの値から1件のデータを作成して渡すことができます。)

「複数行文字列定数」には、json形式の文字列を設定しています。

{
"title":"100MBファイル"
}
json

これ以外のロジックアイコンは「単一行文字列定数」を使用して、それぞれの名称と同じ文字列を設定しています。

実行してみる

プロセスフローをつなげて完成したスクリプトを実行してみます。

Salesforceにログインして「ファイル」タブを表示すると、正常にアップロードされていることが確認できました!

今回は、Salesfroceファイルへのアップロードを例に紹介しましたが、Salesforce CRM Contentへのアップロードも実行することができました。

注意点

ファイルサイズの制限は筆記時点(2018/2/28)で確認した内容となっています。

26 件

関連する記事