AirTable: Add New Record
Adds a new record to the AirTable Base.
Configs
- A: Select Authorization Setting in which API key is set *
- B: Set Base ID *
- C: Select STRING DATA for Record ID (update)
- D1F: Set Field Name 1
- D1V: Select STRING DATA for Value 1#{EL}
- D2F: Set Field Name 2
- D2V: Select STRING DATA for Value 2#{EL}
- D3F: Set Field Name 3
- D3V: Select STRING DATA for Value 3#{EL}
- D4F: Set Field Name 4
- D4V: Select STRING DATA for Value 4#{EL}
- D5F: Set Field Name 5
- D5V: Select STRING DATA for Value 5#{EL}
Script (click to open)
const FIELD_NUM = 5; // 扱えるフィールドの数
main();
function main(){
//// == 工程コンフィグ・ワークフローデータの参照 / Config & Data Retrieving ==
const authSettingName = configs.get("conf_auth");
const baseId = configs.get("conf_baseId");
const recordIdDef = configs.getObject("conf_recordId");
const recordObj = retrieveRecordContent();
//// == 演算 / Calculating ==
const apiUri = determineApiUri( baseId );
const recordId = addRecord( apiUri, authSettingName, recordObj );
//// == ワークフローデータへの代入 / Data Updating ==
setData( recordIdDef, recordId );
}
/**
* configからレコード情報(フィールドコードとフィールドの値)を読み出し、JSON オブジェクトを返す
* @return {Object} recordObj レコード情報の JSON オブジェクト
*/
function retrieveRecordContent() {
const recordObj = {};
recordObj.records = [];
recordObj.records[0] = {};
recordObj.records[0].fields = {};
for (let i = 0; i < FIELD_NUM; i++) {
const fieldNameConfigName = `conf_fieldName${i+1}`;
const fieldValueConfigName = `conf_fieldValue${i+1}`;
const fieldName = configs.get( fieldNameConfigName );
if ( fieldName === "" || fieldName === null ) { // フィールドコードが空
continue;
}
if ( recordObj[fieldName] !== undefined ) { // フィールドコードの指定が重複
throw "The same Field Name is set multiple times.";
}
let fieldValue = configs.get( fieldValueConfigName );
if ( fieldValue === "" || fieldValue === null ) { // 値が空
fieldValue = null;
}
recordObj.records[0].fields[fieldName] = fieldValue;
}
return recordObj;
}
/**
* REST API のレコード追加の URI を決定する
* ドメインが空、または kintone のドメインとして不正な文字列であればエラーとする
* ゲストスペース ID が不正な文字列であればエラーとする
* @param {String} baseId ゲストスペース ID
* @return {String} apiUri API の URI
*/
function determineApiUri( baseId ) {
let apiUri = "";
apiUri = `https://api.airtable.com/v0/${baseId}/Table1?maxRecords=3&view=Grid%20view`;
return apiUri;
}
/**
* REST API にレコード追加の POST リクエストを送信する
* アプリ ID が空、または不正な文字列であればエラーとする
* @param {String} apiUri API の URI
* @param {String} authSettingName API key を含む認証設定
* @param {Object} recordObj レコード情報の JSON オブジェクト
* @return {String} recordId レコード ID
*/
function addRecord( apiUri, apiToken, recordObj ) {
const body = recordObj;
engine.log(`API URI: ${apiUri}`);
engine.log(`Request Body: ${JSON.stringify(body)}`);
const response = httpClient.begin()
.authSetting(apiToken)
.body(JSON.stringify(body), "application/json; charset=UTF-8")
.post( apiUri );
//when error thrown
const responseJson = response.getResponseAsString();
const status = response.getStatusCode();
const accessLog = `---POST request--- ${status}\n${responseJson}\n`;
engine.log(accessLog);
if (status >= 300) {
throw `Failed to add record. status: ${status}`;
}
const json = JSON.parse(responseJson);
return json.id;
}
/**
* データ項目に出力する
* @param {ProcessDataDefinitionView} dataDef データ項目の ProcessDataDefinitionView
* @param {String} dataString 出力する文字列
*/
function setData( dataDef, dataString ){
if(dataDef !== null){
engine.setData( dataDef, dataString );
}
}
Download
2021-12-15 (C) Questetra, Inc. (MIT License)
https://support.questetra.com/addons/airtable-record-add/
The Add-on import feature is available with Professional edition.
Freely modifiable JavaScript (ECMAScript) code. No warranty of any kind.
Notes
- Please refer to this page to get the API key, Base ID, etc. for AirTable settings. Also, for HTTP authentication settings on Questetra, please use direct token specification.
Capture
