AirTable: レコード追加 (AirTable: Add New Record)
AirTable Base にレコードを1件追加します。
Configs
  • A: API key を設定した通信許可設定を選択してください *
  • B: Base ID(シート毎に付与されたId)を入力してください *
  • C: レコード ID が格納される文字型データを選択してください
  • D1F: 追加データ1のフィールド名を入力してください
  • D1V: 追加データ1が格納されている文字型データを選択してください#{EL}
  • D2F: 追加データ2のフィールド名を入力してください
  • D2V: 追加データ2が格納されている文字型データを選択してください#{EL}
  • D3F: 追加データ3のフィールド名を入力してください
  • D3V: 追加データ3が格納されている文字型データを選択してください#{EL}
  • D4F: 追加データ4のフィールド名を入力してください
  • D4V: 追加データ4が格納されている文字型データを選択してください#{EL}
  • D5F: 追加データ5のフィールド名を入力してください
  • D5V: 追加データ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/ja/addons/airtable-record-add/
Addonファイルのインポートは Professional でのみご利用いただけます
自由改変可能な JavaScript (ECMAScript) コードです。いかなる保証もありません。

Notes

  • AirTable 側の設定、API key・Base ID 等の取得はこちらのページを参考にしてください。また、Questetra 側の「HTTP 認証設定」は「トークン直接指定」を使ってください。

Capture

%d人のブロガーが「いいね」をつけました。