2022-10-20
(C) Questetra, Inc. (MIT License)
2
This item gets values of a record in a Kintone App.
この工程は、kintone アプリのレコード(1件)の内容を取得します。
https://support.questetra.com/bpmn-icons/kintone-record-get/
https://support.questetra.com/ja/bpmn-icons/kintone-record-get/
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_domain', domain);
configs.put('conf_guestSpaceId', guestSpaceId);
configs.put('conf_appId', appId);
configs.putObject('conf_recordId', recordIdDef);
const dataDefList = [];
for (let i = 0; i < FIELD_SIZE; i++) {
configs.put(`conf_fieldCode${i+1}`, `フィールドコード_${i+1}`);
// 文字型データ項目(単一行)を準備
const dataDef = engine.createDataDefinition(`文字型データ項目_${i+1}`, i+2, `q_value${i+1}`, 'STRING_TEXTFIELD');
engine.setData(dataDef, `事前文字列_${i+1}`);
configs.putObject(`conf_fieldValue${i+1}`, dataDef);
dataDefList.push(dataDef);
}
return dataDefList;
};
/**
* レコード ID の準備(文字型データ項目の場合)
* @param recordId
* @return recordIdDef
*/
const prepareRecordIdStringDef = (recordId) => {
// 文字型データ項目(単一行)を準備
const recordIdDef = engine.createDataDefinition('レコード ID', 1, 'q_recordId', 'STRING_TEXTFIELD');
engine.setData(recordIdDef, recordId);
return recordIdDef;
};
/**
* レコード ID の準備(選択型データ項目の場合)
* @param recordId
* @return recordIdDef
*/
const prepareRecordIdSelectDef = (recordId) => {
// 選択型データ項目を準備
const recordIdDef = engine.createDataDefinition('レコード ID', 1, 'q_recordId', 'SELECT_SINGLE');
const select = new java.util.ArrayList();
const item = engine.createItem(recordId, `${recordId} を選択`);
select.add(item);
engine.setData(recordIdDef, select);
return recordIdDef;
};
/**
* リクエストのテスト
* ゲストスペース外のアプリの場合
* @param {Object} request
* @param request.url
* @param request.method
* @param domain
* @param appId
* @param recordId
*/
const assertRequestWithoutGuestSpaceId = ({url, method}, domain, appId, recordId) => {
expect(method).toEqual('GET');
expect(url).toEqual(`https://${domain}/k/v1/record.json?app=${appId}&id=${recordId}`);
};
/**
* リクエストのテスト
* ゲストスペース内のアプリの場合
* @param {Object} request
* @param request.url
* @param request.method
* @param domain
* @param guestSpaceId
* @param appId
* @param recordId
*/
const assertRequestWithGuestSpaceId = ({url, method}, domain, guestSpaceId, appId, recordId) => {
expect(method).toEqual('GET');
expect(url).toEqual(`https://${domain}/k/guest/${guestSpaceId}/v1/record.json?app=${appId}&id=${recordId}`);
};
/**
* ドメインが不正な文字列でエラーになる場合
*/
test('Invalid Kintone domain', () => {
prepareConfigs('invalidDomain', '1', '2', prepareRecordIdStringDef('3'));
expect(execute).toThrow('Invalid Kintone domain.');
});
/**
* ゲストスペース ID が不正な文字列でエラーになる場合
*/
test('Invalid Guest Space ID', () => {
prepareConfigs('xxxxx.kintone.com', 'invalidId', '2', prepareRecordIdStringDef('3'));
expect(execute).toThrow('Invalid Guest Space ID.');
});
/**
* アプリ ID が不正な文字列でエラーになる場合
*/
test('Invalid App ID', () => {
prepareConfigs('xxxxx.kintone.com', '1', 'invalidId', prepareRecordIdStringDef('3'));
expect(execute).toThrow('Invalid App ID.');
});
/**
* レコード ID を文字型データ項目で指定し、不正な文字列でエラーになる場合
*/
test('Invalid Record ID - String', () => {
prepareConfigs('xxxxx.kintone.com', '1', '2', prepareRecordIdStringDef('invalidId'));
expect(execute).toThrow('Invalid Record ID.');
});
/**
* レコード ID を選択型データ項目で指定し、不正な文字列でエラーになる場合
*/
test('Invalid Record ID - Select', () => {
prepareConfigs('xxxxx.kintone.com', '1', '2', prepareRecordIdSelectDef('invalidId'));
expect(execute).toThrow('Invalid Record ID.');
});
/**
* レコード ID を文字型データ項目で指定し、空文字列でエラーになる場合
*/
test('Record ID is empty', () => {
prepareConfigs('xxxxx.kintone.com', '1', '2', prepareRecordIdStringDef(''));
expect(execute).toThrow('Record ID is empty.');
});
/**
* レコード ID を選択型データ項目で指定し、未選択でエラーになる場合
*/
test('Record ID is not selected', () => {
// 選択型データ項目を準備
const recordIdDef = engine.createDataDefinition('レコード ID', 1, 'q_recordId', 'SELECT_SINGLE');
const select = new java.util.ArrayList();
engine.setData(recordIdDef, select); // 空のままセット
prepareConfigs('xxxxx.kintone.com', '1', '2', recordIdDef);
expect(execute).toThrow('Record ID is not selected.');
});
/**
* フィールドコードが空なのに値を保存するデータ項目が設定されていて、エラーになる場合
*/
test('Field Code is empty while Data item to save the value is set', () => {
prepareConfigs('xxxxx.kintone.com', '1', '2', prepareRecordIdStringDef('3'));
configs.put('conf_fieldCode3', ''); // 3 番目のフィールドコードを空に
expect(execute).toThrow('Field Code 3 is empty but Data item that will save Value 3 is set.');
});
/**
* フィールドコードが設定されているのに値を保存するデータ項目が設定されておらず、エラーになる場合
*/
test('Data item to save the value is not set', () => {
configs.put('conf_auth', 'kintone');
configs.put('conf_domain', 'xxxxx.kintone.com');
configs.put('conf_appId', '123');
configs.putObject('conf_recordId', prepareRecordIdStringDef('456'));
for (let i = 0; i < FIELD_SIZE; i++) {
configs.put(`conf_fieldCode${i+1}`, `フィールドコード_${i+1}`);
// 文字型データ項目(単一行)を準備。4 番目の値を保存するデータ項目はセットしない
if (i !== 3) {
const dataDef = engine.createDataDefinition(`文字型データ項目_${i+1}`, i+2, `q_value${i+1}`, 'STRING_TEXTFIELD');
engine.setData(dataDef, `事前文字列_${i+1}`);
configs.putObject(`conf_fieldValue${i+1}`, dataDef);
}
}
expect(execute).toThrow('Data item to save the value of フィールドコード_4 is not set.');
});
/**
* 値を保存するデータ項目が重複して設定されており、エラーになる場合
*/
test('The same data item is set multiple times', () => {
const dataDefList = prepareConfigs('xxxxx.kintone.com', '1', '2', prepareRecordIdStringDef('3'));
// 5 番目の値を保存するデータ項目を、4 番目のものと同じに
configs.putObject('conf_fieldValue5', dataDefList[3]);
expect(execute).toThrow('The same data item is set multiple times.');
});
/**
* フィールドコードが一つも設定されておらず、エラーになる場合
*/
test('No Field Code is set', () => {
configs.put('conf_auth', 'kintone');
configs.put('conf_domain', 'xxxxx.kintone.com');
configs.put('conf_appId', '123');
configs.putObject('conf_recordId', prepareRecordIdStringDef('456'));
expect(execute).toThrow('No Field Code is set.');
});
/**
* レコード取得成功
* ゲストスペース外のアプリ
* レコード ID は文字型データ項目で指定
* 取得データはすべて文字列(単一行)で、保存先データ項目はすべて文字列(単一行)
*/
test('200 Success - without guestSpaceId, recordId with String, SINGLE_LINE_TEXT to STRING_TEXTFIELD', () => {
const dataDefList = prepareConfigs('xxxxx.kintone.com', '', '123', prepareRecordIdStringDef('456'));
httpClient.setRequestHandler((request) => {
assertRequestWithoutGuestSpaceId(request, 'xxxxx.kintone.com', '123', '456');
const responseObj = {
"record": {
}
};
for (let i = 0; i < FIELD_SIZE; i++) {
responseObj.record[`フィールドコード_${i+1}`] = {
"type": "SINGLE_LINE_TEXT",
"value": `値_${i+1}`
};
}
return httpClient.createHttpResponse(200, 'application/json', JSON.stringify(responseObj));
});
//