[kintone×gas]スプレッドシートに入力した情報からフィールドを登録する_3

前回まで

kintoneにAPIリクエストを送る際必要な↓の3つの情報を入力するダイアログの作成までやった。

  • ドメイン
  • APIトークン
  • アプリID

記事はこちら
今回からリクエストの処理を作っていく。

定義ファイルの作成

スプレッドシートの変更をしやすくするため、definiton.gsファイルを作成して↓の2つをclassで定義しておく。

  • スプレッドシートの列番号
  • フィールドタイプの選択肢
class Definitions {
  constructor () {
    this.columns = {
      // フィールドの列番号を定義
      "row": 0,
      "fieldLabel": 1,
      "fieldCode": 2,
      "fieldType": 3,
      "noLabel": 4,
      "isRequired": 5,
      "isUnique": 6,
      "choices": 7,
      "linkType": 8,
      "formula": 9
    }

    this.fieldTypes = {
      // フィールドタイプの選択肢を定義
      // kintoneのリクエストの際は英語で送る必要がある
      // https://developer.cybozu.io/hc/ja/articles/202166330
      "文字列1行": "SINGLE_LINE_TEXT",
      "文字列複数行": "MULTI_LINE_TEXT",
      "リッチエディタ": "RICH_TEXT",
      "リンク": "LINK",
      "数値": "NUMBER",
      "計算": "CALC",
      "チェックボックス": "CHECK_BOX",
      "ドロップダウン": "DROP_DOWN",
      "ラジオボタン": "RADIO_BUTTON",
      "複数選択": "MULTI_SELECT",
      "日付": "DATE",
      "時刻": "TIME",
      "日時": "DATETIME",
      "添付ファイル": "FILE",
      "ユーザー選択": "USER_SELECT",
      "グループ選択": "GROUP_SELECT",
      "組織選択": "ORGANIZATION_SELECT",
      "サブテーブル": "SUBTABLE",
      "レコード番号": "RECORD_NUMBER",
      "作成者": "CREATOR",
      "更新者": "MODIFIER",
      "作成日時": "CREATED_TIME",
      "更新日時": "UPDATED_TIME"
    }
  }
}

ダイアログに入力したデータを受け取る

main.gs ファイルを作成し、ダイアログに入力された値をログに出す処理だけ書く。

/**
 * @param {Object} formObj
 * @param {string} formObj.domain
 * @param {string} formObj.token
 * @param {number} formObj.appId
 */
const main = (formObj) => {
  console.log(formObj)
}

入力した値


ログ

ちゃんと受け取れてる。

大まかな流れを作成

メインのリクエストボディを作成する処理以外を main.gs に追加

/**
 * @param {Object} formObj
 * @param {string} formObj.domain
 * @param {string} formObj.token
 * @param {number} formObj.appId
 */
const main = (data) => {
  try{
    const definitions = new Definitions();
    const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("シート1");
    const lastRow = sheet.getLastRow();
    // スプレッドシートに入力された情報を全て取得
    const values = sheet.getRange(2, 1, lastRow - 1, Object.keys(definitions.COLUMNS).length).getValues();
    // フォームに入力された情報
    const apiToken = data.token;
    const appId = data.appId;
    const domain = data.domain;

    // リクエストボディを作成する getRequestBody 関数に必要な情報を渡す。
    const [fieldRegistrationBody, layoutBody] = getRequestBody(appId, values, definitions);
    const options = {
      "method": "post",
      "contentType": "application/json",
      "muteHttpExceptions" : true,
      "headers": {
        "X-Cybozu-API-Token": apiToken
      },
      "payload": JSON.stringify(fieldRegistrationBody)
    };
    // フィールド登録APIリクエストを送る
    const fetchFieldsUrl = `https://${domain}.cybozu.com/k/v1/preview/app/form/fields.json`;
    const resp1 = UrlFetchApp.fetch(fetchFieldsUrl,options);
    // リクエストが失敗したらエラーメッセージを投げる
    if (resp1.getResponseCode() >= 400) throw new Error(resp1.getContentText());
    
    // アプリに登録されたフィールドの位置を変更するリクエストなのでputで送る
    options.method = "put";
    options.payload = JSON.stringify(layoutBody);
    // フィールドレイアウト更新APIにリクエストを送る
    const fetchLayoutUrl = `https://${domain}.cybozu.com/k/v1/preview/app/form/layout.json`;
    const resp2 = UrlFetchApp.fetch(fetchLayoutUrl,options);
    // リクエストが失敗したらエラーメッセージを投げる
    if (resp2.getResponseCode() >= 400) throw new Error(resp2.getContentText());
    
    // リクエストが成功したらmsgBoxにsuccessMsgを表示して終了
    const successMsg = `処理が完了しました。設定画面で結果を確認して下さい。https://${domain}.cybozu.com/k/admin/app/flow?app=${appId}#section=form`;
    Browser.msgBox(successMsg);
  } catch (err) {
    Browser.msgBox(err)
    console.error(err);
  }
}

まとめ

おおまかな流れはできたので、次回からメインのgetRequestBody 関数を実装していく。

[kintone×gas]スプレッドシートに入力した情報からフィールドを登録する_3” に対して1件のコメントがあります。

コメントは受け付けていません。