2024-07-29
https://support.questetra.com/bpmn-icons/service-task-converter-file-copy/
https://support.questetra.com/ja/bpmn-icons/service-task-converter-file-copy/
This item copies the attachment files of the File type data item to the specified File type data item. If there is only one source file, the file name can be changed.
この工程は、ファイル型データ項目の添付ファイルを、指定したファイル型データ項目に複製します。コピー元ファイルが1つなら、ファイル名を変更することも可能です。
(C) Questetra, Inc. (MIT License)
>
3
2
iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAACx0lEQVRYR8WXz0sUYRjHP5O0CLX+
uHTIQ7sHIby0BdIh0EU6hwmd20Vx9mb9AUvlQQSRVhBq0WW3gxcFKzx4000kBKO2QNgSssgS6uDu
oQQJJt4ZZ3ecH+s4O+kLyy7s+z7fz/PM87zPMxKnvKRj6afpBbpRiCDRAkQOzhdQKCEhvvMkeOnW
7tEAWVrYZwi4B6qom1UCUgSYII747bhqAzwhxhkeH0PYLCTE48i8cCJwBnhKCkn13I+VQua+nSF7
gDQ54K4fyhUbCjkSxM02rQD+en5YT2GChJpLlXUYQHvmWV89txq7bcyJKoCW7Vt1JJxb7hIBwnp1
VAHSPAQeuLVSa99U1xTzW/Msflt02vYIWdXDCCBKptkPgI07GzQFmhhcGXSCKCHTWgXQbrjnRvGe
iz20nWvzxJO8lqS9uZ3t39u1INRc0CJgk/nCi47WDk8AxkOOEAcVoQGkyat3vGH5BbD3d4/RwijD
b4fNzrxCJqoDfAEuGXdMd03TeaHTUwRC50NqDgjx8Q/jJN8k7ewUkLmqAyielBwOieiFg+Fa4tpJ
GelIgODZIJnuDDt/dhh67a41rN5aZfnHspPnVWwDgOURiF1CPBvN0hvqJfcxx8DKgH+BUnhPgohj
EhrFG6QG1n6usVne9ASw9H2J3CfR3w4tQxLalOHszVn6wn0I8XpXppixRs9UhpaLaPLGJP2X+2ls
aKxXH1sAMFxE2l1guYqNEHOf51j4uuAJplgqsv5r3Xi2jKyNd0c2Ix1iZnPGzyS0aUZaOxbVYGlI
Y9fH2N3fZeTdiKcImA6VCRCytmOx61QHEh3zf45kUAm9LndyQyk8QyZmfoYnNZZbPK8dAf1fbVAR
V5jXSakMxLy9mOgQWnWIUVp83IIIYfFqlqrv1cz8wEREFKJIRFBoQeKKukU0FokSCgUk8rU8dp8D
flS8Cxv/AFp57iGwqv7bAAAAAElFTkSuQmCC
{
// ファイル型データ項目を準備して、config に指定
const sourceFileDef = engine.createDataDefinition('コピー元ファイル', 1, 'q_file', 'FILE');
configs.putObject('conf_SourceFileDataId', sourceFileDef);
engine.setData(sourceFileDef, sourceFiles);
const destinationFileDef = engine.createDataDefinition('コピー先ファイル', 2, 'q_file2', 'FILE');
configs.putObject('conf_DestinationFileDataId', destinationFileDef);
engine.setData(destinationFileDef, destinationFiles);
configs.putObject('conf_DeleteOtherFiles', deleteOtherFiles);
// ファイル名を config に指定
configs.put('conf_FileName', fileName);
return {
sourceFileDef,
destinationFileDef
};
};
/**
* 設定の準備
* コピー元ファイル、コピー先ファイルのデータ項目が同一
* @param sourceFiles コピー元ファイル
* @param deleteOtherFiles
* @param fileName
* @param destinationFiles コピー先ファイル
* @return fileDef: {Object}
*/
const prepareSameConfigs = (sourceFiles, deleteOtherFiles, fileName, destinationFiles) => {
// ファイル型データ項目を準備して、config に指定
const sourceFileDef = engine.createDataDefinition('コピー元ファイル', 1, 'q_file', 'FILE');
configs.putObject('conf_SourceFileDataId', sourceFileDef);
engine.setData(sourceFileDef, sourceFiles);
const destinationFileDef = engine.createDataDefinition('コピー先ファイル', 2, 'q_file2', 'FILE');
configs.putObject('conf_DestinationFileDataId', destinationFileDef);
engine.setData(destinationFileDef, sourceFiles);
configs.putObject('conf_DeleteOtherFiles', deleteOtherFiles);
// ファイル名を config に指定
configs.put('conf_FileName', fileName);
return {
sourceFileDef,
destinationFileDef
};
};
/**
* 異常系のテスト
* @param func
* @param errorMsg
*/
const assertError = (func, errorMsg) => {
let failed = false;
try {
main();
} catch (e) {
failed = true;
expect(e.message).toEqual(errorMsg);
}
if (!failed) {
fail();
}
};
/**
* コピー元ファイルが添付されていない場合
*/
test('Source file is empty', () => {
prepareConfigs(null, true, '', null);
assertError(main, 'Source file is empty.');
});
/**
* コピー元にファイルが複数添付されている
* ファイル名が設定されている
*/
test('Attachment of multiple files can not be nameed', () => {
let sourceFiles = new java.util.ArrayList();
sourceFiles.add(engine.createQfile('事前ファイル.txt', 'text/plain; charset=UTF-8', '事前ファイル\n'));
sourceFiles.add(engine.createQfile('test.html', 'text/html; charset=UTF-8', ''));
const {
sourceFileDef,
destinationFileDef
} = prepareConfigs(sourceFiles, true, 'test.txt', null);
assertError(main, 'Attachment of multiple files can not be named.');
});
/**
* ファイルのテスト
* @param file
* @param name
* @param contentType
*/
const assertFile = (file, name, contentType) => {
expect(file.getName()).toEqual(name);
expect(file.getContentType()).toEqual(contentType);
};
/**
* コピー成功
* コピー元のファイル型データには 1 ファイル添付
* 他のファイルを削除する
* ファイル名指定無し
* コピー先のファイル型データには 2 ファイル添付
*/
test('success - 1file - deleteOtherFiles - 2 attachments ', () => {
let sourceFiles = new java.util.ArrayList();
sourceFiles.add(engine.createQfile('test.pdf', 'application/pdf', 'test'));
let destinationFiles = new java.util.ArrayList();
destinationFiles.add(engine.createQfile('事前ファイル.txt', 'text/plain; charset=UTF-8', '事前ファイル\n'));
destinationFiles.add(engine.createQfile('test.html', 'text/html; charset=UTF-8', ''));
const {
sourceFileDef,
destinationFileDef
} = prepareConfigs(sourceFiles, true, '', destinationFiles);
main();
const files = engine.findData(destinationFileDef);
expect(files.size()).toEqual(1);
const file = files.get(0);
assertFile(file, 'test.pdf','application/pdf');
});
/**
* コピー成功
* コピー元のファイル型データには 1 ファイル添付
* 他のファイルを削除しない
* ファイル名を指定
* コピー先のファイル型データには 2 ファイル添付
*/
test('success - 1file - 2 attachments - with name', () => {
let sourceFiles = new java.util.ArrayList();
sourceFiles.add(engine.createQfile('test.txt', 'text/plain; charset=UTF-8', 'test\n'));
let destinationFiles = new java.util.ArrayList();
destinationFiles.add(engine.createQfile('事前ファイル.txt', 'text/plain; charset=UTF-8', '事前ファイル\n'));
destinationFiles.add(engine.createQfile('test.html', 'text/html; charset=UTF-8', ''));
const {
sourceFileDef,
destinationFileDef
} = prepareConfigs(sourceFiles, false, 'testqqq.txt', destinationFiles);
main();
const files = engine.findData(destinationFileDef);
expect(files.size()).toEqual(3);
let file = files.get(0);
assertFile(file, '事前ファイル.txt','text/plain; charset=UTF-8');
file = files.get(1);
assertFile(file, 'test.html','text/html; charset=UTF-8');
file = files.get(2);
assertFile(file, 'testqqq.txt','text/plain; charset=UTF-8');
});
/**
* コピー成功
* コピー元のファイル型データには 2 ファイル添付
* 他のファイルを削除しない
* ファイル名を指定しない
* コピー先のファイル型データには 1 ファイル添付
*/
test('success - 2files - 1 attachment - with name', () => {
let sourceFiles = new java.util.ArrayList();
sourceFiles.add(engine.createQfile('test.txt', 'text/plain; charset=UTF-8', 'test\n'));
sourceFiles.add(engine.createQfile('test.png', 'image/png', 'test\n'));
let destinationFiles = new java.util.ArrayList();
destinationFiles.add(engine.createQfile('事前ファイル.txt', 'text/plain; charset=UTF-8', '事前ファイル\n'));
const {
sourceFileDef,
destinationFileDef
} = prepareConfigs(sourceFiles, false, '', destinationFiles);
main();
const files = engine.findData(destinationFileDef);
expect(files.size()).toEqual(3);
let file = files.get(0);
assertFile(file, '事前ファイル.txt','text/plain; charset=UTF-8');
file = files.get(1);
assertFile(file, 'test.txt','text/plain; charset=UTF-8');
file = files.get(2);
assertFile(file, 'test.png','image/png');
});
/**
* コピー成功
* コピー元のファイル型データ項目とコピー先のファイル型データ項目が同一
* コピー元のファイル型データには 2 ファイル添付
* 他のファイルを削除しない
* ファイル名を指定しない
*/
test('success - 2files - Same File type data ', () => {
let sourceFiles = new java.util.ArrayList();
sourceFiles.add(engine.createQfile('test.png', 'image/png', 'test\n'));
sourceFiles.add(engine.createQfile('test.txt', 'text/plain; charset=UTF-8', 'test\n'));
const {
sourceFileDef,
destinationFileDef
} = prepareSameConfigs(sourceFiles, false, '', sourceFiles);
main();
const files = engine.findData(destinationFileDef);
expect(files.size()).toEqual(4);
let file = files.get(0);
assertFile(file, 'test.png','image/png');
file = files.get(1);
assertFile(file, 'test.txt', 'text/plain; charset=UTF-8');
file = files.get(2);
assertFile(file, 'test.png','image/png');
file = files.get(3);
assertFile(file, 'test.txt', 'text/plain; charset=UTF-8');
});
/**
* コピー成功
* コピー元のファイル型データ項目とコピー先のファイル型データ項目が同一
* コピー元のファイル型データには 1 ファイル添付
* 他のファイルを削除する
* ファイル名を指定
*/
test('success - 1file - Same File type data - deleteOtherFiles - with name', () => {
let sourceFiles = new java.util.ArrayList();
sourceFiles.add(engine.createQfile('test.txt', 'text/plain; charset=UTF-8', 'test\n'));
const {
sourceFileDef,
destinationFileDef
} = prepareSameConfigs(sourceFiles, true, 'qqq.txt', sourceFiles);
main();
const files = engine.findData(destinationFileDef);
expect(files.size()).toEqual(1);
const file = files.get(0);
assertFile(file, 'qqq.txt', 'text/plain; charset=UTF-8');
});
]]>