CData Software Blog

クラウド連携のCData Software の技術ブログです。

CData Driver で Salesforce のファイル・添付ファイル・ドキュメントのダウンロード・アップロードを行う方法

f:id:sugimomoto:20210601091022p:plain こんにちは。CData Software Japan リードエンジニアの杉本です。

CData DriverはSQLのSELECTやINSERT・UPDATEなどを駆使して、主にデータの参照や追加・削除を行うのがベーシックなユースケースですが、APIにはそういったCRUD操作には沿わない特殊なユースケースがあると思います。

その中でもおそらく最もよく存在するユースケースはファイルのダウンロードやアップロードといったものではないでしょうか。

f:id:sugimomoto:20210601090241p:plain

ユーザーの方からも「どうやってファイルのアップロードやダウンロードを行うの?」という質問を良く頂くので、今回はSalesforceを例に、ファイルのアップロード・ダウンロード方法を紹介したいと思います。

ちなみに例ではSalesforce JDBC Driverを利用していますが、ODBCADO.NETなどすべてのテクノロジーで共通の機能です。

CData Salesforce Driverでのファイルのアップロード・ダウンロード方法

実はCData Salesforce Driverでは、「DownloadAttachment」や「UploadDocument」といった専用に定義された「ストアドプロシージャ」を使って、ファイルのダウンロードやアップロードを行うことができます。

cdn.cdata.com

cdn.cdata.com

ただ、具体的な説明に入る前に、まずSalesforceのファイル郡の扱いについておさえておきましょう。

Salesforceでは、「ファイル」、「Salesforce CRM Content」、「Salesforce ナレッジ」、「ドキュメント」、「添付ファイル」といったファイルを管理するための機能が複数存在します。

詳しくは以下のリファレンスを参照してみてください。

help.salesforce.com

f:id:sugimomoto:20210601090233p:plain

その中でCData Driverがサポートしているのは「ファイル」・「ドキュメント」・「添付ファイル」のアップロード・ダウンロードになります。

それぞれ実際の画面を通して見てみましょう。

ファイルは以下のレコードに紐づけてアップロードできるファイル群ですね。

f:id:sugimomoto:20210601090241p:plain

おそらく現在一番利用されている機能かとは思います。

ただし、注意しないといけないのが、古いバージョンの添付ファイルのフォーマットも含まれる可能性がある点です。最新のLightningUIからだとアップロードできませんが、古いUIで作成したものが残っていることがあります。その場合は、「添付ファイル」という名称がついています。

先程の画面をSalesforce Clasicc UIで表示すると、以下のようになり、「添付ファイル」がアップロードできるようになります。この画面からだと、種別の項目で「ファイル」「添付ファイル」の区別がつきますね。

f:id:sugimomoto:20210601090247p:plain

「ドキュメント」は以下のような画面で管理しているデータです。

f:id:sugimomoto:20210601090255p:plain

このようにそれぞれ利用するための画面・機能・特性が異なるので注意しましょう。

「ファイル」「添付ファイル」「ドキュメント」一覧の確認方法

続いて「ファイル」「添付ファイル」「ドキュメント」の一覧を取得してみましょう。これはファイルのIDや名前を識別するために利用します。

これらの一覧の取得には、使用するテーブルがそれぞれ異なります。

SELECT * FROM ContentDocument; // ファイル

SELECT * FROM Attachment; // 添付ファイル

SELECT * FROM Document; // ドキュメント

「添付ファイル」と「ドキュメント」はわかりやすいですが、おそらく現在一番利用するであろう「ファイル」はContentDocumentというテーブルから取得できます。

f:id:sugimomoto:20210601090300p:plain

アップロード・ダウンロード方法

それでは実際にファイルのアップロード・ダウンロードをやってみます。前述の通り CData Driverを通じたファイルのアップロード・ダウンロードには専用の「ストアドプロシージャ」を利用します。

「ファイル」「添付ファイル」の場合は「DownloadAttachment」と「UploadAttachment」を利用し、

cdn.cdata.com

cdn.cdata.com

「ドキュメント」の場合は「DonwloadDocument」と「UploadDocument」を利用します。

cdn.cdata.com

cdn.cdata.com

「ファイル」「添付ファイル」は共通のストアドプロシージャを利用しますが、「LightningMode」をTrueにするかFalseにするかで、利用する先が異なります。

例えば、同じレコードに添付ファイル・ファイルがそれぞれ混ざったものを用意します。

f:id:sugimomoto:20210601090308p:plain

以下のようなSQLをぞれぞれ発行します。

ObjectIdには添付先のレコードのId(今回は取引先責任者)、LocalPathにはファイルの保存先のフォルダパスを指定します。ちなみに合わせてIdもしくはNameを指定することで、ダウンロード対象のファイルも絞り込むことができますが、指定しない場合はそのObjectIdに含まれるすべてのファイルもしくは添付ファイルがダウンロードされます。

まず「LightningMode = true;」で実行すると、

Exec DownloadAttachment 
ObjectId = '0030I000025OQ2jQAG', // 関連先のレコード
LocalPath = 'C:\\LogFolder\\JDBC\\Salesforce', // 保存先のフォルダ
LightningMode = true; // ファイルを対象とする

以下のようにファイルが2つダウンロードされます。

f:id:sugimomoto:20210601090326p:plain

f:id:sugimomoto:20210601090331p:plain

「LightningMode = false; 」で実行すると

Exec DownloadAttachment 
ObjectId = '0030I000025OQ2jQAG', // 関連先のレコード
LocalPath = 'C:\\LogFolder\\JDBC\\Salesforce', // 保存先のフォルダ
LightningMode = false; // 添付ファイルを対象とする

以下のように添付ファイルの1つだけがダウンロードできます。

f:id:sugimomoto:20210601090337p:plain

f:id:sugimomoto:20210601090342p:plain

このように「LightningMode」の設定で機能が異なるので注意しましょう。

アップロードも基本的な使い方は同様です。

Exec UploadAttachment 
ObjectId = '0030I000025OQ2jQAG', // 関連先のレコードID
FullPath = 'C:\\LogFolder\\JDBC\\Salesforce\\sample_LightningTrue.png',  // 対象ファイルパス
LightningMode = true; // ファイルを対象とする

Exec UploadAttachment 
ObjectId = '0030I000025OQ2jQAG', // 関連先のレコードID
FullPath = 'C:\\LogFolder\\JDBC\\Salesforce\\sampleLightningFalse.png', // 対象ファイルパス
LightningMode = false; // 添付ファイルを対象とする

f:id:sugimomoto:20210601090350p:plain

以下のようにファイルがアップロードされました。それぞれファイル・添付ファイルと異なる形式でアップロードされていることがわかります。

f:id:sugimomoto:20210601090355p:plain

ドキュメントは「LightningMode」に関する設定が無いので、割愛しますが以下のようにリクエストできます。

Exec UploadDocument 
FullPath = 'C:\\Work\\Photo\\sample.jpg',  // アップロード対象のファイルパス
FolderId = '00l0I000001SkG0QAK'; // 対象のフォルダーID

Exec DownloadDocument 
FolderId = '00l0I000001SkG0QAK', // ダウンロード対象のフォルダID
LocalPath = 'C:\\LogFolder\\JDBC\\Salesforce'; //  ダウンロード先のフォルダパス

利用する際には、それぞれのヘルプに記載されているパラメータを確認して、利用してみてください。

おわりに

Salesforceはファイルの種類がちょっと多くてそこだけ注意が必要ですね。

その他のドライバー、例えばGoogle DriveやOneDriveのドライバーでもこのような形でファイルのアップロード・ダウンロードをサポートしています。

上記以外にも気になる点があれば、お気軽にテクニカルサポートまで問い合わせてみてください。

https://www.cdata.com/jp/support/submit.aspx