
Box: ファイルダウンロード (Box: Download File)
この工程は、Box 内の指定ファイルをダウンロードします。ファイル名を指定しない場合、Boxでのファイル名で保存されます。
Configs:共通設定
- 工程名
- メモ
Configs
- C1: OAuth2 設定 *
- C2: ダウンロードするファイルの ID *
- C3: ファイル名 (空白の場合、Boxでのファイル名で保存されます。)#{EL}
- C4: ダウンロードファイルを追加保存するファイル型データ項目 *
Notes
- ファイル ID は、URL に含まれています https://app.box.com/file/(ファイル ID)
- Box のリフレッシュトークンには、期限があります
- 期限を超えないよう、定期的に利用する必要があります (Box: トークンおよびURLの有効期限)
Capture

See also
Script (click to open)
- 下記のスクリプトを記述した XML ファイルをダウンロードできます
- box-file-download.xml (C) Questetra, Inc. (MIT License)
- Professional をご利用であればファイルの内容を改変することでオリジナルのアドオンとして活用できます
main();
function main(){
const oauth2 = configs.get("conf_OAuth2");
const fileIdDef = configs.getObject("conf_FileId");
let fileId = decideFileId(fileIdDef);
let fileName = configs.get( "conf_FileName" );
if(fileName === "" || fileName === null){
// Boxでのファイル名を取得する
fileName = getBoxFileName(oauth2, fileId);
}
const {contentType, content} = downloadBoxFile(oauth2, fileId);
const filesDef = configs.getObject("conf_Files");
saveFile(filesDef, fileName, contentType, content);
}
/**
* ダウンロードするファイルのIDをconfigから読み出して出力する
* @param {String} fileIdDef
* @return {String} fileId ファイルの ID
*/
function decideFileId(fileIdDef){
let fileId = "";
if(fileIdDef === null){
fileId = configs.get( "conf_FileId");
}else{
fileId = engine.findData(fileIdDef);
}
if(fileId === "" ||fileId === null) {
throw "fileId is blank";
}
return fileId;
}
/**
* Boxのファイル名を取得する
* @param {String} oauth2 認証設定
* @param {String} fileId ダウンロードするファイルのID
* @return {String} jsonRes.name Boxでのファイル名
*/
function getBoxFileName(oauth2, fileId){
const url = `https://api.box.com/2.0/files/${fileId}/`;
const response = httpClient.begin()
.authSetting(oauth2)
.get(url);
const status = response.getStatusCode();
const responseTxt = response.getResponseAsString();
if (status !== 200) {
engine.log(`${responseTxt}`);
throw `Failed to get file name. status: ${status}`;
}
let jsonRes;
try {
jsonRes = JSON.parse(responseTxt);
} catch(e) {
engine.log("failed to parse as json");
throw `Failed to get file name. status: ${status}`;
}
return jsonRes.name;
}
/**
* box API にファイルダウンロードの GET リクエストを送信し、レスポンスを返す
* @param {String} oauth2 認証設定
* @param {String} folderId ダウンロードするファイルのID
* @return {Object} response
* @return {String} response.contentType
* @return {ByteArrayWrapper} response.content
*/
function downloadBoxFile(oauth2, fileId){
const url = `https://api.box.com/2.0/files/${fileId}/content/`;
const response = httpClient.begin()
.authSetting(oauth2)
.get(url);
const status = response.getStatusCode();
const responseTxt = response.getResponseAsString();
if (status !== 200) {
engine.log(`${responseTxt}`);
throw `Failed to download file. status: ${status}`;
}
return {
contentType: response.getContentType(),
content: response.getResponse()
};
}
/**
* ダウンロードしたファイルを保存する
* @param {ProcessDataDefinitionView} filesDef 保存先データ項目
* @param {String} fileName 保存する際のファイル名
* @param {String} contentType
* @param {ByteArrayWrapper} content
*/
function saveFile(filesDef, fileName, contentType, content){
let files = engine.findData( filesDef );
if (files === null) {
files = new java.util.ArrayList();
}
const qfile = new com.questetra.bpms.core.event.scripttask.NewQfile(
fileName, contentType, content
);
files.add( qfile );
// == ワークフローデータへ代入する
engine.setData( filesDef, files );
}