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:'); }); ]]>