knowledge クラウドストレージ「BOX」との連携

AutoMateを使用すると、クラウドストレージ「BOX」へのファイルアップロードとメタデータの付与の完全自動化が可能になります。
この記事では、BOXへのファイルアップロード/メタデータ付与を自動化するタスク構築例をご紹介します。

ファイルトリガーで起動するように設定すると、ファイルを所定のフォルダに配置するだけで上のサンプル映像のような挙動になります。

■事前準備
本記事のタスクを作成する場合、まず以下の準備が必要です。
1. メタデータテンプレートの作成
→Box Business Plus以上のライセンスで使用が可能になるメタデータのテンプレートをあらかじめ作成しておく必要があります。
作成手順はこちらの記事をご確認下さい。
「取引日」「取引金額」「取引相手」の計3種類の属性を作成してください。
2. CData Box ODBC Driverのインストールと設定
→AutoMateを利用してリアルタイムにBoxと連携するためCData Box ODBC Driverをダウンロードします。
CData Software Japan 社のページからインストーラーを入手し、ウィザードに従いインストールします。

インストール後にDSN構成のウィンドウが開くので、"詳細">"Miscellaneous(その他)"配下の"Include Custom Fields"をTrueに書き換えOKボタンを押下します。

ブラウザの画面が立ち上がるので、認証情報を入力しBoxへのアクセスを許可します。
これによりODBCドライバーがインストールされた環境に認証トークンが保存されるため、逐一ブラウザ認証を行うことなくBOXへアクセスできるようになります。

■タスクの作成
事前準備が済んだ状態で、AutoMateのタスク作成に入ります。
本記事のAutoMateのタスクでは「発注伝票をアップロードし、メタデータを付与する」というシナリオを例に、以下の処理フローを組みます。
A. 必要な変数の作成
B. アップロードするファイルの情報取得と調整
C. メタデータ入力ダイアログの表示
D. ODBCドライバーを使用したBOXへのファイルアップロード
E. BOXにアップロードされたファイルへのメタデータ付与
F. アップロード済みファイルの移動

この構成で作成されたタスクに、ファイルを検知して自動実行を可能にする「ファイルシステムトリガー」を組み合わせることで「ファイルを所定のフォルダに投入したら自動的にBOXへアップロードする」という自動化が可能になります。
ファイルトリガーの設定については逆引きリファレンスの記事をご参照ください。

なお、
・アップロードするファイルはPDF形式
・アップロードするファイルを投入するフォルダはデスクトップ上の"アップロード用"、
・アップロード済みのファイルが投入されるフォルダはデスクトップ上アップロード用内、"アップロード完了"
とします。

各処理や手順について解説します
〇A. 必要な変数の作成
→このタスクでは以下6種類の変数を使用します
・var_amount (取引金額格納用)
・var_company (取引相手情報格納用)
・var_date (取引日格納用)
・var_filepath (アップロードファイルのフルパス格納用)
・var_filename (アップロードファイルのファイル名格納用)
・var_fileid (アップロードファイルのBOX上ID格納用)
それぞれ、AutoMateの[変数 - 作成]アクションを使用して宣言します。

〇B. アップロードするファイルの情報取得と調整
B-1. [ファイル - 情報の取得]アクションでフォルダの情報を取得する
→プルダウンは[フォルダー]を選択し、[ソース]は以下のように記述します
C:\Users\[ユーザー名]\Desktop\アップロード用\*.pdf
[データセットに実行結果を設定する]に任意のデータセット名を指定します(この例では"ds_folder"とします)。
こうすることで、デスクトップの"アップロード用"にあるPDFファイルの情報のみ取得することが可能になります。
B-2. 取得したデータセットのうち、ファイル名の情報とファイルパス情報をそれぞれ対応する変数に設定
→[変数 - セット]アクションを使用し、データセットに取得された情報のうちファイルのフルパスとファイル名をそれぞれ変数に設定します。
変数"var_filepath"にはデータセットの値"%ds_folder.fullname%"を、変数"var_filename"には"%ds_folder.filename%"を設定します。

B-3. [テキスト - 置換]アクションを使用し、ファイルのフルパスの"\"を"\\"に置き替える
→ファイルパス記述の円マークが正規表現のエスケープ文字として扱われないよう、ファイルのフルパス変数に格納された値の円マークを二重にします。
[テキスト]には"%var_filepath%"を記述し、[検索する文字]には"\"、[置換後の文字列]には"\\"を入力します。
[結果を変数に設定する]にはファイルパスの変数を指定します。

〇C. メタデータ入力ダイアログの表示
C-1. [ダイアログ - 入力]アクションを使用し、メタデータ情報の入力ウィンドウを出す。
→メタデータとして付与する取引年月日、取引金額、取引先企業名を、ユーザー入力により変数へ設定します。
[表示するメッセージ]に表示させたいメッセージテキストを指定し、[変数に入力した値を設定する]に、入力情報に対応する変数を指定します。

上は取引年月日を入力させるダイアログの定義サンプルです。今回のタスク例ではこれに加え、取引金額用、取引先企業名用のダイアログの計3つを用意します。
それぞれ対応する変数の指定に注意してください。

〇D. ODBCドライバーを使用したBOXへのファイルアップロード
D-1. [データベース - SQL接続を開く]アクションでBOXと接続する
→セッション名が入っていることを確認したら、[接続を編集する]ボタンを押下し、データリンクプロパティを設定します。
[プロバイダー]タブでは"Microsoft OLE DB Provider for ODBC Drivers"を選択し、[接続]タブ配下"データソース名を使用する"を有効にしてプルダウンから"Cdata Box Source"を選択しプロパティを閉じます。

これによりAutoMateを使用したBOXへの接続が可能になります。
D-2. [データベース - SQLクエリ]アクションでファイルアップロードを定義する
→CData Box ODBC Driverのストアドプロシージャを使用して、指定したフォルダへファイルをアップロードします。
ファイルのアップロードは以下の構文で記述します。

EXEC UploadFile FilePath = 'ファイルのフルパス', ParentId = 'BOXのフォルダID'

ファイルのフルパスには、既に作成済みのAutoMateの変数"var_filepath"を使用します。
BOXのフォルダIDは、ブラウザでフォルダを表示させた時のURLから取得可能です(赤線部の数値12桁)。

この二つの値をフォーマットに代入すると、以下のような記述になります。

EXEC UploadFile FilePath = '%var_filepath%', ParentId = '000000000000'

[SQLクエリ]アクションの[SQLステートメント]に上記のSQL文を記入します。
[データセットを作成して設定する]に任意のデータセット名を指定します(この例では"ds_Result"とします)。
D-3. SQL結果から、BOXへアップロードしたファイルのファイルIDを取得する
→D-2. でファイルのアップロードが成功すると、アップロードしたファイルのIDがデータセットの列"ID"に格納されます。

[変数 - セット]アクションを使用し、データセットに取得されたファイルIDの値(赤線部)を変数"var_fileid"に設定します。

〇E. BOXにアップロードされたファイルへのメタデータ付与
E-1. BOXに登録済みのメタデータテンプレート情報を確認する
→メタデータを付与するためには、BOXに登録されているメタデータテンプレートのスコープ/テンプレートキー/フィールドキーの情報が必要になります。
これらの情報はAutoMateの[データベース - SQLクエリ]アクションで以下の文を発行することで取得可能です。
SELECT DisplayName, TemplateKey, Scope, FieldsDisplayName, FieldsKey FROM MetadataTemplates;
正しく発行されると、以下のような形で各情報が取得されます。

スコープ/テンプレートキー/フィールドキーの情報について、それぞれ記録しておいてください。
E-2. ストアドプロシージャを使用してファイルにメタデータを付与
→メタデータの付与は以下の構文で記述します。

EXEC AddMetadataTemplatesToFile FileId = 'ファイルID', Scope = 'スコープ', TemplateKey = 'テンプレートキー', TemplateValues = 'フィールドキー = 初期値'

これまで変数への設定や取得してきた情報を踏まえると、メタデータを付与するためのSQL文は以下になります。

EXEC AddMetadataTemplatesToFile FileId = '%var_fileid%', Scope = 'スコープ', TemplateKey = 'テンプレートキー', TemplateValues = '取引日のキー=%var_date%,取引金額のキー=%var_amount%,取引相手のキー=%var_company%'

E-3. BOXとの接続を閉じる
→手順D-1. で開始したBOXとの接続を終了します。
[SQL - 接続を閉じる]アクションで、手順D-1. で設定したセッション名を指定します。

〇F. アップロード済みファイルの移動
F-1. ファイルのフルパス用変数の表記を元に戻す
→ファイルアップロードを行う際に円マークがエスケープ記号として扱われないよう、手順B-3. でファイルパスが編集されていました。
このままではファイルの移動に使用できないため、ファイルパス中の二重になっている円マークを元の表記に戻します。
手順B-3. 同様[テキスト - 置換]アクションを使用し、[テキスト]には"%var_filepath%"を記述します。
検索する文字]には"\\"、[置換後の文字列]には"\"を入力します。
[結果を変数に設定する]にはファイルパスの変数を指定します。
F-2. BOXへアップロードされたファイルを別フォルダへ移動
→同じファイルの多重アップロードを防ぐため、[ファイルシステム - 移動]アクションを使用してアップロードが完了したファイルを別のフォルダに移動させます。
[ソース]にはファイルのフルパス用変数を、[保存先]にはアップロード済のファイルを投入するパスと、ファイル名変数を指定します。

以上の手順に準拠したタスクサンプルは以下です。
タスクビルダーに内容を張り付けてご確認下さい。

<AMVARIABLE NAME="var_amount" VALUE="" />
<AMVARIABLE NAME="var_company" VALUE="" />
<AMVARIABLE NAME="var_date" VALUE="" />
<AMVARIABLE NAME="var_filepath" VALUE="" />
<AMVARIABLE NAME="var_filename" VALUE="" />
<AMVARIABLE NAME="var_fileid" VALUE="" />
<AMFILESYSTEM ACTIVITY="get" SOURCE="%GetDesktopDirectory()%\アップロード用\*.pdf" RESULTDATASET="ds_folder" FILEPROPERTY="fullname" />
<AMVARIABLE ACTIVITY="set" VARIABLENAME="var_filepath">%ds_folder.fullname%</AMVARIABLE>
<AMVARIABLE ACTIVITY="set" VARIABLENAME="var_filename">%ds_folder.filename%</AMVARIABLE>
<AMTEXT ACTIVITY="replace" TEXT="%var_filepath%" FIND="\" REPLACE="\\" RESULTVARIABLE="var_filepath" />
<AMSHOWDIALOG ACTIVITY="input" RESULTVARIABLE="var_date" WINDOWTITLE="取引記録1/3">%var_filename%について
取引年月日を入力</AMSHOWDIALOG>
<AMSHOWDIALOG ACTIVITY="input" RESULTVARIABLE="var_amount" WINDOWTITLE="取引記録2/3">%var_filename%について
取引金額を入力</AMSHOWDIALOG>
<AMSHOWDIALOG ACTIVITY="input" RESULTVARIABLE="var_company" WINDOWTITLE="取引記録3/3">%var_filename%について
取引先企業を入力</AMSHOWDIALOG>
<AMDATABASE SESSION="DatabaseSession1" CONNECTION="0AM5F4hl9pSPHFukuzDCNuA5JvzHxy/vMN8UjxuNZr5EBizp73vLi78Iks8jMBivvvz2i38+pLxHcxnoMyF9GW1zkHj9ypbji8oOS2hndHSF7j+ASW5uwXZVVVA802BZhb/XXXX" />
<AMDATABASE ACTIVITY="sql_query" SESSION="DatabaseSession1" RESULTDATASET="ds_Result">EXEC UploadFile FilePath = '%var_filepath%', ParentId = '000000000000'</AMDATABASE>
<AMVARIABLE ACTIVITY="set" VARIABLENAME="var_fileid">%ds_Result.ID%</AMVARIABLE>
<AMDATABASE ACTIVITY="sql_query" SESSION="DatabaseSession1">EXEC AddMetadataTemplatesToFile FileId = '%var_fileid%', Scope = 'スコープ名', TemplateKey = 'テンプレートキー名', TemplateValues = '取引日のキー=%var_date%, 取引金額のキー=%var_amount%, 取引相手のキー=%var_company%'
</AMDATABASE>
<AMDATABASE ACTIVITY="close_sql_connection" SESSION="DatabaseSession1" />
<AMTEXT ACTIVITY="replace" TEXT="%var_filepath%" FIND="\\" REPLACE="\" RESULTVARIABLE="var_filepath" />
<AMFILESYSTEM ACTIVITY="move" SOURCE="%var_filepath%" DEST="%GetDesktopDirectory()%\アップロード用\アップロード完了\%var_filename%" OVERWRITE="YES" />