こんにちは。CData Software Japan リードエンジニアの杉本です。
CData DriverはSQLのSELECTやINSERT・UPDATEなどを駆使して、主にデータの参照や追加・削除を行うのがベーシックなユースケースですが、APIにはそういったCRUD操作には沿わない特殊なユースケースがあると思います。
その中でもおそらく最もよく存在するユースケースはファイルのダウンロードやアップロードといったものではないでしょうか。
ユーザーの方からも「どうやってファイルのアップロードやダウンロードを行うの?」という質問を良く頂くので、今回はSalesforceを例に、ファイルのアップロード・ダウンロード方法を紹介したいと思います。
ちなみに例ではSalesforce JDBC Driverを利用していますが、ODBC・ADO.NETなどすべてのテクノロジーで共通の機能です。
CData Salesforce Driverでのファイルのアップロード・ダウンロード方法
実はCData Salesforce Driverでは、「DownloadAttachment」や「UploadDocument」といった専用に定義された「ストアドプロシージャ」を使って、ファイルのダウンロードやアップロードを行うことができます。
ただ、具体的な説明に入る前に、まずSalesforceのファイル郡の扱いについておさえておきましょう。
Salesforceでは、「ファイル」、「Salesforce CRM Content」、「Salesforce ナレッジ」、「ドキュメント」、「添付ファイル」といったファイルを管理するための機能が複数存在します。
詳しくは以下のリファレンスを参照してみてください。
その中でCData Driverがサポートしているのは「ファイル」・「ドキュメント」・「添付ファイル」のアップロード・ダウンロードになります。
それぞれ実際の画面を通して見てみましょう。
ファイルは以下のレコードに紐づけてアップロードできるファイル群ですね。
おそらく現在一番利用されている機能かとは思います。
ただし、注意しないといけないのが、古いバージョンの添付ファイルのフォーマットも含まれる可能性がある点です。最新のLightningUIからだとアップロードできませんが、古いUIで作成したものが残っていることがあります。その場合は、「添付ファイル」という名称がついています。
先程の画面をSalesforce Clasicc UIで表示すると、以下のようになり、「添付ファイル」がアップロードできるようになります。この画面からだと、種別の項目で「ファイル」「添付ファイル」の区別がつきますね。
「ドキュメント」は以下のような画面で管理しているデータです。
このようにそれぞれ利用するための画面・機能・特性が異なるので注意しましょう。
「ファイル」「添付ファイル」「ドキュメント」一覧の確認方法
続いて「ファイル」「添付ファイル」「ドキュメント」の一覧を取得してみましょう。これはファイルのIDや名前を識別するために利用します。
これらの一覧の取得には、使用するテーブルがそれぞれ異なります。
SELECT * FROM ContentDocument; // ファイル SELECT * FROM Attachment; // 添付ファイル SELECT * FROM Document; // ドキュメント
「添付ファイル」と「ドキュメント」はわかりやすいですが、おそらく現在一番利用するであろう「ファイル」はContentDocumentというテーブルから取得できます。
アップロード・ダウンロード方法
それでは実際にファイルのアップロード・ダウンロードをやってみます。前述の通り CData Driverを通じたファイルのアップロード・ダウンロードには専用の「ストアドプロシージャ」を利用します。
「ファイル」「添付ファイル」の場合は「DownloadAttachment」と「UploadAttachment」を利用し、
「ドキュメント」の場合は「DonwloadDocument」と「UploadDocument」を利用します。
「ファイル」「添付ファイル」は共通のストアドプロシージャを利用しますが、「LightningMode」をTrueにするかFalseにするかで、利用する先が異なります。
例えば、同じレコードに添付ファイル・ファイルがそれぞれ混ざったものを用意します。
以下のようなSQLをぞれぞれ発行します。
ObjectIdには添付先のレコードのId(今回は取引先責任者)、LocalPathにはファイルの保存先のフォルダパスを指定します。ちなみに合わせてIdもしくはNameを指定することで、ダウンロード対象のファイルも絞り込むことができますが、指定しない場合はそのObjectIdに含まれるすべてのファイルもしくは添付ファイルがダウンロードされます。
まず「LightningMode = true;」で実行すると、
Exec DownloadAttachment ObjectId = '0030I000025OQ2jQAG', // 関連先のレコード LocalPath = 'C:\\LogFolder\\JDBC\\Salesforce', // 保存先のフォルダ LightningMode = true; // ファイルを対象とする
以下のようにファイルが2つダウンロードされます。
「LightningMode = false; 」で実行すると
Exec DownloadAttachment ObjectId = '0030I000025OQ2jQAG', // 関連先のレコード LocalPath = 'C:\\LogFolder\\JDBC\\Salesforce', // 保存先のフォルダ LightningMode = false; // 添付ファイルを対象とする
以下のように添付ファイルの1つだけがダウンロードできます。
このように「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; // 添付ファイルを対象とする
以下のようにファイルがアップロードされました。それぞれファイル・添付ファイルと異なる形式でアップロードされていることがわかります。
ドキュメントは「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のドライバーでもこのような形でファイルのアップロード・ダウンロードをサポートしています。
上記以外にも気になる点があれば、お気軽にテクニカルサポートまで問い合わせてみてください。