[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件のコメントがあります。
コメントは受け付けていません。