2022-06-20
(C) Questetra, Inc. (MIT License)
2
This item deletes records in a Kintone App. It can delete multiple ones at once. It must contain one record ID per line.
この工程は、kintone アプリのレコードを削除します。一度に複数の削除が可能です。1行につき1つのレコード IDが含まれている必要があります。
https://support.questetra.com/bpmn-icons/kintone-record-delete/
https://support.questetra.com/ja/bpmn-icons/kintone-record-delete/
iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAEAElEQVRYR8VXXWhTVxz/nZubNLlJ
bVbd6nSDglFwKkOrY+zDdAzBB1mHDoZSX/wAqw9WnPRBNzuHMJljsuksbPPBiQ4RpThlMLGNL+Jg
iiAbaARfrNqa2ObjNuQm9y/n3N7b3JvcNI6OnKfk/L9+9/f/OOcw1HmxWuMPtc1R/I3KWonwAYCl
AFoBvDRh/wzAAwC3dIaBXFo9P+fvIbUW31MCyLS3zi7qcg8YthHgr9FpDoQ+j1Q4FBp88LiaTVUA
o+3ztxHRYQYEawns1CEgyxj7LDx4r8/N3hXAWDTyIwFd/yWw04YBx5ti8e2VfFUEMBqddxpg66cj
+KQPOhOO3d9QAZx9azq/vBYmbAzwnIPo+PR+ucMbY12lNWEB4NWukRx3KzhpVguIdFBipCo+z4LF
KN6946rDC9PLChGzOywAYysj3xFDd5ml1wel52t4P1wjRNqf/VC/2QtoeZuq/NZKKPu+BZsRBiVH
oH7ZjcLtvyoCYYQjTdfiu7hQAOBDJhhSEs4+967qQGD3V2D+gM0R5cYxfngvtCsXwcLNCB7sg2cR
n032Vbh5HernO0DZtE3AgFw2o87kw0oASLZHOiXCr6VanshChH7qB5hLpxIhs7UD/p1fQF6y3JXy
wo0Ysj1byuQ6w8bmwfgp4X00GvkFwKZSrdDR3yBF3gB0HUyxzyFSs4AkgZJPIb36GiidAgs1ij1r
FYugTEqkJLWmrYwFACfCsfhmE8DNiflu2YeOnbVopfQYmF8RMsqpYI1Nxu/ECNjMlw0bTQONZ4WM
Uy70ZVmIUuveqVS8t8Kx+DITQLLkYBFGnAHP4jYLEGUzyJ8/iYbOListvNhY8wQAAPrwI2gDl9Hw
6WYb5elP3oP+9IkzDc/CsXizCYCcUicAXvVULAJkqLKAIpzy9uRpEl8dmgE9MQJp1iu1AEA4Fjcq
bDQaKQMQ/OGMvbh42/HgvgaD/tQYtIFLkN+OQuIseH3GvoMVvufCgA1AWQrkFe9D6f0eLBiayLHB
gNmSvBVzR3rh69gAz8I3J1PlAKDF/oDauxMgvWoKyorQ4FlCoHs/fB+tnxw8stegO9gIPcnpboHZ
FRycWZj6k4dQ921H8d4/zsDmf1sRlrVhqZU0ey58H3dCer0Vctu7FgtWDQjuCXpiGPn+06L98hdO
uQU29yfbsNIgqmTNB45y6GdrLtgA8E68+jvUA2LCTrlsg8htFFf0InkQ2HMQvtVroQ8PQWqZK7qB
j9ziv7enDCwy6xzFfNP1MHJxyScgnxPM60X+8rmaAptKZYcRF0x1HL9QhCrKrscxt6nrhcQEXdcr
mQmirpfS/4OJF76WW0zU82Figqjr06y0m+r2OJ2u/nfz8xwerN4wOc7tdwAAAABJRU5ErkJggg==
{
configs.put('conf_auth', 'kintone');
configs.put('conf_basic', basic);
configs.put('conf_domain', domain);
configs.put('conf_guestSpaceId', guestSpaceId);
configs.put('conf_appId', appId);
// 削除するレコードの ID が保存されている文字型データ項目
const recordIdDef = engine.createDataDefinition('削除するレコードの ID', 1, 'q_record_id', 'STRING_TEXTAREA');
engine.setData(recordIdDef, recordId);
configs.putObject('conf_recordId', recordIdDef);
};
/**
* レコードID がnullでエラー
*/
test('record IDs are null', () => {
prepareConfigs('', 'test-01.cybozu.com', '', '1', null);
expect(execute).toThrow('Record IDs aren\'t set.');
});
/**
* レコードID が空行でエラー
*/
test('record IDs are blank lines.', () => {
prepareConfigs('basic', 'test-02.kintone.com', '', '2', '\n\n\n');
expect(execute).toThrow('Record IDs aren\'t set.');
});
/**
* レコードID が自然数以外の文字列でエラー
*/
test('record IDs contain a non-natural number', () => {
prepareConfigs('', 'test-03.cybozu.com', '', '3', '33\n-1');
expect(execute).toThrow('Includes invalid Record ID.');
});
/**
* ドメインが{サブドメイン}.kintone.com または {サブドメイン}.cybozu.com以外でエラー
*/
test('domain is not {subdomain}.kintone.com or {subdomain}.cybozu.com', () => {
prepareConfigs('', 'test-04.test.com', '', '4', '44');
expect(execute).toThrow('Invalid Kintone domain.');
});
/**
* サブドメインに英数ハイフン以外が含まれていてエラー
*/
test('subdomain contains an underscore', () => {
prepareConfigs('', 'test_05.cybozu.com', '', '5', '55');
expect(execute).toThrow('Invalid Kintone domain.');
});
/**
* サブドメインが32文字以下でないのでエラー
*/
test('subdomain is not 32 characters or less', () => {
const subdomain = 'test-06';
prepareConfigs('', `${subdomain.padEnd(33, 'a')}.cybozu.com`, '', '6', '66');
expect(execute).toThrow('Invalid Kintone domain.');
});
/**
* サブドメインが3文字以上でないのでエラー
*/
test('subdomain is not 3 characters or more', () => {
prepareConfigs('', 'te.cybozu.com', '', '7', '77');
expect(execute).toThrow('Invalid Kintone domain.');
});
/**
* ゲストスペース ID が自然数以外の文字列でエラー
*/
test('Guest Space ID is a non-natural number', () => {
prepareConfigs('', 'test-08.cybozu.com', '8.8', '8', '88');
expect(execute).toThrow('Invalid Guest Space ID.');
});
/**
* アプリ ID が自然数以外の文字列でエラー
*/
test('App ID is a non-natural number', () => {
prepareConfigs('', 'test-09.cybozu.com', '', '-9', '99');
expect(execute).toThrow('Invalid App ID.');
});
/**
* DELETE リクエストのテスト
* @param {Object} request
* @param request.url
* @param request.method
* @param domain
* @param guestSpaceId
* @param appId
* @param recordIdsParameter
*/
const assertDeleteRequest = ({url, method}, domain, guestSpaceId, appId, recordIdsParameter) => {
if ( guestSpaceId === "" || guestSpaceId === null ) {
expect(url).toEqual(`https://${domain}/k/v1/records.json?app=${appId}${recordIdsParameter}`);
} else {
expect(url).toEqual(`https://${domain}/k/guest/${guestSpaceId}/v1/records.json?app=${appId}${recordIdsParameter}`);
}
expect(method).toEqual('DELETE');
};
/**
* レコード削除成功1件 - basic認証あり
* ドメインは{サブドメイン}.cybozu.com
*/
test('200 Success - 1 record, with Basic Authentication', () => {
prepareConfigs('basic', 'test-10.cybozu.com', '', '10', '110');
httpClient.setRequestHandler((request) => {
assertDeleteRequest(request, 'test-10.cybozu.com', '', '10', '&ids%5B0%5D=110');
return httpClient.createHttpResponse(200, 'application/json', '{}');
});
execute();
});
/**
* レコード削除成功2件 - レコードIDに前後・途中に空白行を含む、ゲストスペースIDを指定
* ドメインは {サブドメイン}.kintone.com
*/
test('200 Success - 2 records, reocord Ids with blank lines, specify guest space ID', () => {
prepareConfigs('', 'test-11.kintone.com', '110', '11', '\n111\n\n112\n');
httpClient.setRequestHandler((request) => {
assertDeleteRequest(request, 'test-11.kintone.com', '110', '11', '&ids%5B0%5D=111&ids%5B1%5D=112');
return httpClient.createHttpResponse(200, 'application/json', '{}');
});
execute();
});
/**
* レコード削除成功100件
* 削除上限100件は kintone API の制約
* ドメインは {サブドメイン}.cybozu.com
*/
test('200 Success - 100 records', () => {
let ids = '';
let parameters = '';
for (let i = 0; i < 100; i++) {
ids += `${i+1}\n`;
parameters += `&ids%5B${i}%5D=${i+1}`
}
prepareConfigs('', 'test12.cybozu.com', '', '12', ids);
httpClient.setRequestHandler((request) => {
assertDeleteRequest(request, 'test12.cybozu.com', '', '12', parameters);
return httpClient.createHttpResponse(200, 'application/json', '{}');
});
execute();
});
/**
* DELETE リクエストでエラー - 100件より多い
* 削除上限100件は kintone API の制約
*/
test('DELETE Failed - more than 100', () => {
let ids = '';
let parameters = '';
for (let i = 0; i < 100; i++) {
ids += `${i+1}\n`;
parameters += `&ids%5B${i}%5D=${i+1}`
}
prepareConfigs('', 'test-13.cybozu.com', '', '13', ids);
httpClient.setRequestHandler((request) => {
assertDeleteRequest(request, 'test-13.cybozu.com', '', '13', parameters);
return httpClient.createHttpResponse(400, 'application/json', '{}');
});
expect(execute).toThrow('Failed to delete records. status:');
});
]]>