AirTable: Add New Record

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

Discover more from Questetra Support

Subscribe now to keep reading and get access to the full archive.

Continue reading

Scroll to Top