2022-11-25
(C) Questetra, Inc. (MIT License)
2
This item downloads the specified file on Box. If you do not specify a file name, it will be saved with the file name on Box.
この工程は、Box 内の指定ファイルをダウンロードします。ファイル名を指定しない場合、Boxでのファイル名で保存されます。
https://support.questetra.com/bpmn-icons/service-task-box-file-download/
https://support.questetra.com/ja/bpmn-icons/service-task-box-file-download/
iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAEBElEQVRYR82Xb2jbRRjHP/fL2jXJ
0qSd65x11aK0YgJWZUwEWZ0DfSNaHYKKmgykbP7pH/SVghvCkIlb6kREwfyGOougbgxB2Yt1oGwg
aietdOJoV21ty2ob26xdm+TkLsufJr+2Sdtt3pv8uDx3z+ee+z53zwmucRMF+ff/9ijEtwB1IDwI
9QtIOkGOA50I0UHIezTfeRcH8Pd64GITyGaE8OQ1sVQwIgiONsxqBTZvWxjA3+UHDuTtONuNBjEC
mLcfmY9gfgB/dxBBU14rXsxIyiCmr8XKzBog0GWCeG6xeQv6X2JiegPZY3IBVnLlOVtCG6a3ObN7
LoDacyFCBa2sUGMpGjI1kQbQao/0Lllw+YJoYTqrk9mRAdC9G8Eb+c6zLDvJHkzvbjVHGiDQpXLX
nZw4tOMGyp02Hjn457J8WQ5WUTB9ZWkAdcIJ+XWm8XCwFkexwLWrZ+UB9OmZ0EIiAhbKH2lLAKzZ
eaUAEhmRAAh0dYBQZ3yqKQDnaoPDp8PUVZXo/pM9EV75Ylh/77q/jO2bSlmz2mBgLErjoUHad95I
Z/80re0Jmw+e3UD1dcU8uP+8RRTlSUK++ssA3X3ATdkA61y2nIE/9k7Rd2GWx+4uxWZkAP8bo9Ru
YAho+XyIUruNNxsqiMzE8bxgEUV1gZneO5MAMtuTioACUM7e+W4Uj8Pg5W1rdV9cwvSsxPx+nNPn
LvLStnI2VdsZi8TwOGyMTsY0nNth493j/9DSPmSto5BXLAigsmDLW7388MeUnuDVh9ay74n1+vvI
zxM0vJfOkNGDtdiLDH7pn+beW+3a5kRPhK37rMJ/mScDIGcLBvfXsM61isrWs4xMxPSIpza7+ayx
Un8rbTz94UBqZX8fqNFp+82vkzTc5dL9n54K88xHaZu5YZBnCPnq5hXhqdequecWO2rPH3j7PBvc
qzjWVEXN9cV6HhVmJbwvf5rgcGMlT2526y1wldiYiUl9wKhtUHp4/8TYIiK0SMP6WgdfvbiRMqeN
yKU4NkNQUiToH51lcDyq4aIxtMjcdoOpGYkSkrJpOz6qt6OxvowLkzEqms7mAsjMNLQ4iNSIrbc5
2bu9QqdSNC7pHrjEjo8H+GssyifPV3JfjQNHscFQOMqeoyPsfXw9vw/P8HBbv3b4bWsVG8uL8L5+
zgIg8yBSf2cdxdayXaleGSbk0+Xd/+gyUtexiPRlXkgrtd4s9YeRzptzr2NldU0LkiTmlS3JUnVA
0t3VK0qRhwj5VJk/p12lsjxdAeUPoDWhCpW4KtFTlVJhwpRhpOFf2sMkpQn9NGtGyOb8QZRj/TQL
Lu9plr1c/TiV9QipHqUeEHckTOQZYBwpOkF0LLTiwragsHgvyfo/g3CBMFgjn40AAAAASUVORK5C
YII=
{
configs.put('conf_OAuth2', 'Box');
//fileIdIsFixed が true なら固定値、false ならデータ項目
if (fileIdIsFixed) {
configs.put('conf_FileId', fileId);
}else{
const fileIdDef = engine.createDataDefinition('文字', 2, 'q_string', 'STRING_TEXTFIELD');
configs.putObject('conf_FileId', fileIdDef);
engine.setData(fileIdDef, fileId);
}
configs.put('conf_FileName', fileName);
const fileDef = engine.createDataDefinition('ファイル', 1, 'q_files', 'FILE');
configs.putObject('conf_Files', fileDef);
engine.setData(fileDef, files);
return fileDef;
};
/**
* ファイルのテスト
* @param file
* @param name
* @param contentType
* @param encoding
* @param body
*/
const assertFile = (file, name, contentType, encoding, body) => {
expect(file.getName()).toEqual(name);
expect(file.getContentType()).toEqual(contentType);
let text = '';
fileRepository.readFile(file, encoding, line => text += line + '\n');
expect(text).toEqual(body);
};
/**
* ファイル ID が空の場合
* ファイル ID はデータ項目で指定
*/
test('File ID is empty', () => {
const fileDef = prepareConfigs(configs, '', false, '', null);
expect(execute).toThrow('fileId is blank');
});
/**
* ファイル名を指定せず、ファイル名取得のリクエストで 404 エラーが返ってくる場合
* ファイル ID はデータ項目で指定
*/
test('Failed to find file', () => {
const fileDef = prepareConfigs(configs, '1234567890', false, '', null);
httpClient.setRequestHandler(({url, method, contentType}) => {
engine.log(url);
switch (url) {
case 'https://api.box.com/2.0/files/1234567890/': {
expect(method).toEqual('GET');
const responseObj = {};
return httpClient.createHttpResponse(404, 'application/json', JSON.stringify(responseObj));
}
default:
fail('Request Error');
}
});
expect(execute).toThrow('Failed to get file name. status: 404');
});
/**
* ファイル名を指定し、ファイルダウンロードのリクエストで 403 エラーが返ってくる場合
* ファイル ID は固定値で指定
*/
test('Failed to download file', () => {
const fileDef = prepareConfigs(configs, '1234567890', true, 'file.txt', null);
httpClient.setRequestHandler(({url, method, contentType}) => {
engine.log(url);
switch (url) {
case 'https://api.box.com/2.0/files/1234567890/content/': {
expect(method).toEqual('GET');
return httpClient.createHttpResponse(403, 'application/json', '{}');
}
default:
fail('Request Error');
}
});
expect(execute).toThrow('Failed to download file. status: 403');
});
/**
* ファイル型データ項目に他のファイルが入っていない状態で、ダウンロードに成功した場合
* ファイル名は指定、ファイル ID は固定値で指定
*/
test('Succeeded to download file / File is null', () => {
const fileName = "test.txt";
const fileDef = prepareConfigs(configs, '1234567890', true, fileName, null);
httpClient.setRequestHandler(({url, method, contentType}) => {
engine.log(url);
switch (url) {
case 'https://api.box.com/2.0/files/1234567890/': {
expect(method).toEqual('GET');
const responseObj = {name: "dummy"};
return httpClient.createHttpResponse(200, 'application/json', JSON.stringify(responseObj));
}
case 'https://api.box.com/2.0/files/1234567890/content/': {
expect(method).toEqual('GET');
return httpClient.createHttpResponse(200, 'text/plain; charset=UTF-8', 'こんにちは');
}
default:
fail('Request Error');
}
});
execute();
const files = engine.findData(fileDef);
expect(files.size()).toEqual(1);
assertFile(files.get(0), fileName, 'text/plain', 'UTF-8', 'こんにちは\n');
});
/**
* ファイル型データ項目に他のファイルが入っている状態で、ダウンロードに成功した場合
* ファイル名は指定、ファイル ID はデータ項目で指定
*/
test('Succeeded to download file / File is not null', () => {
let files = new java.util.ArrayList();
files.add(engine.createQfile('test.html', 'text/html; charset=UTF-8', ''));
files.add(engine.createQfile('test.xml', 'text/xml; charset=UTF-16', 'さようなら'));
const fileName = "test.txt";
const fileDef = prepareConfigs(configs, '1234567890', false, fileName, files);
httpClient.setRequestHandler(({url, method, contentType}) => {
engine.log(url);
switch (url) {
case 'https://api.box.com/2.0/files/1234567890/': {
expect(method).toEqual('GET');
const responseObj = {name: "dummy"};
return httpClient.createHttpResponse(200, 'application/json', JSON.stringify(responseObj));
}
case 'https://api.box.com/2.0/files/1234567890/content/': {
expect(method).toEqual('GET');
return httpClient.createHttpResponse(200, 'text/plain; charset=EUC-JP', 'さようなら');
}
default:
fail('Request Error');
}
});
execute();
const files_data = engine.findData(fileDef);
expect(files_data.size()).toEqual(3);
assertFile(files_data.get(2), fileName, 'text/plain', 'EUC-JP', 'さようなら\n');
});
/**
* ファイル名の指定をせずにダウンロードに成功した場合
* ファイルIDはデータ項目で指定
*/
test('File Name is empty', () => {
const fileName = "test.txt";
const fileDef = prepareConfigs(configs, '1234567890', false, '', null);
httpClient.setRequestHandler(({url, method, contentType}) => {
engine.log(url);
switch (url) {
case 'https://api.box.com/2.0/files/1234567890/': {
expect(method).toEqual('GET');
const responseObj = {name: fileName};
return httpClient.createHttpResponse(200, 'application/json', JSON.stringify(responseObj));
}
case 'https://api.box.com/2.0/files/1234567890/content/': {
expect(method).toEqual('GET');
return httpClient.createHttpResponse(200, 'text/plain; charset=UTF-8', 'こんにちは');
}
default:
fail('Request Error');
}
});
execute();
const files = engine.findData(fileDef);
expect(files.size()).toEqual(1);
assertFile(files.get(0), fileName, 'text/plain', 'UTF-8', 'こんにちは\n');
});
]]>