kintoneのレコードを作成
この記事では、AUTOROでkintoneのレコードを作成する方法を紹介します。
- kintoneUpdateRecordアクションでレコードを1件作成する
- サブテーブルを含むレコードを1件作成する
- ファイルを添付してレコードを作成する
- 繰り返しで1件ずつレコードを作成する
- 複数のレコードを1つのアクションで一括登録する(中級者向け)
※本記事の紹介内容を実装するためには、事前にkintoneとの連携設定を済ませておく必要があります。
連携設定の方法はこちらをご参照ください。
・kintoneと連携
1. kintoneCreateRecord(レコードを1件作成する)
kintoneCreateRecordアクションを使用すると、kintoneの指定したアプリ内に、1件のレコードを作成できます。
この章では1件のレコードを作成する方法を紹介します。
なお、このアクション新規に作成可能なレコードは、1件のレコードのみとなります。複数のレコードを作成する場合は、繰り返し処理でkintoneCreateRecordアクションを使用するか、ブラウザ系アクションでkintoneにログイン後にInjectScriptアクションで作成する必要があります。これらの方法は後述します。
今回は例として、画像のアプリに以下のレコードを作成してみます。
- 「都道府県」が「熊本県」
- 「市区町村」が「玉名郡和水町」
- 「行き先」が「トンカラリン」
- 「ユーザー」が「大トロ」
まずはじめに、作成に使用する基本的な情報を設定します。
- kintoneUpdateRecordを設置します。
- 「プロバイダーID」を設定します。
- 「アプリID」を指定します。
レコードの値を作成します。
- 「作成レコード」パラメータの右端のkintoneアイコンをクリックします。
- ピッカーのfieldから、「都道府県」を選択します。
- ピッカーのvalueに、「熊本県」と入力します。
- ピッカーの+ボタンからフィールドを追加し、「市区町村」「行き先」についても同様に設定します(下記gif参照)
ユーザー選択フィールドの値は、以下の方法で設定する必要があります。
- ピッカーから+ボタンでフィールドを追加します
- fieldに「ユーザー選択」のフィールドを指定します。
- valueに、配列形式でユーザーのログイン名を入力します。これは基本的にログインIDとなります。
例:["example@example.com"]
サブテーブルの値は、kintoneCreateRecordアクションでは作成できません。
サブテーブルの値の作成はHTTPRequestアクションで可能です。方法は「2.サブテーブルの値を作成する」をご参照ください。
# レコードを1件作成する +kintone_create_record_1: action>: kintoneCreateRecord provider: '' appId: '' record: 都道府県: value: '熊本県' 市区町村: value: '玉名郡和水町' 行き先: value: 'トンカラリン' ユーザー選択: value: ["ログイン名"] meta: display:
2.サブテーブルを含むレコードを1件作成する
2024年3月から、kintoneのテーブルにレコードを追加する操作はkintoneAddRecordToTable(テーブルにレコードを追加する)アクションからできるようになりました。
上記のアクションの使い方、並びに以前こちらに記載していたJavaScriptを含む内容は以下のページに移行しました。ご参考ください。
3.ファイルを添付してレコードを作成する
kintoneCreateRecordアクションでは、レコードの作成時にファイルを添付することが可能です。
方法は以下となります。
ファイル型アウトプットを、添付ファイルのフィールドにご指定ください。
CreateList(リストを作成)にてファイルのリストを作成したあと、添付ファイルのフィールドにご指定ください。
4.繰り返しでレコードを作成する
スプレッドシートなどに蓄積された情報を元に、複数の新しいレコードを作成することも可能です。
ここでは、シートにまとめられた情報を元に新しいレコードを作成する例を紹介します。
今回は、以下の3つのレコードを繰り返しで作成してみます。
なお、この章では以下の列順を想定してワークフローを組み上げていきます。
- A列:都道府県
- B列:市区町村
- C列:行き先
レコード作成に使用する値をスプレッドシートにまとめたら、AUTORO側でシートと値を取得します。
- GetSpreadsheetを設定します。
- 「プロバイダID」を設定します。
- 「スプレッドシートID」に値が存在するスプレッドシートを指定します。
- GetCellsを設定します。
- 「範囲」に以下を入力します。
ご自身で設定されたシート名!A2:C
- forEachを設定します。
- 「繰り返すリスト」に1のアウトプットを指定します。
- 「要素を格納する変数名」に以下を入力します。
recordRow
ここで作成した値で、レコードを作成します。
- forEachの中に、kintoneCreateRecordを設定します。
- 「プロバイダID」を設定します。
- 「アプリID」を設定します。
- 「作成レコード」欄の右端のkintoneアイコンをクリックします。
- ピッカーからfieldをクリックし、「都道府県」を選びます。
- ピッカーのvalueに、${recordRow[0]}と入力します。
- +ボタンからフィールドを追加します。
- 「市区町村」「行き先」についても、同様に入力します。recordRow[x]のxの部分のみ、フィールドを追加するごとに1ずつ加算します。
- フィールドを設定し終えたら、右下のOKをクリックします。
# 既存のスプレッドシートを取得 +get_spreadsheet_1: action>: GetSpreadsheet provider: '' spreadsheet_id: '' meta: display: # セルの値を取得 +get_cells_1: action>: GetCells spreadsheet: +get_spreadsheet_1 range: 'シート1!A2:C' findAll: false # 各要素について繰り返す +for_each_1: for_each>: recordRow: +get_cells_1 _do: # レコードを1件作成する +kintone_create_record_1: action>: kintoneCreateRecord provider: '' appId: '' record: 都道府県: value: ${recordRow[0]} 市区町村: value: ${recordRow[1]} 行き先: value: ${recordRow[2]} meta: display:
サブテーブルにレコードを挿入する場合は、kintoneAddRecordToTableをご使用ください。
5.JavaScriptを使用して複数のレコードを一括登録する(中級者向け)
ワークフロー内部でJavaScriptを使用し、kintoneの複数の複数レコードを1つのアクションで一括作成/一括登録する方法を紹介します。
内容は中級者向けとなります。基本的には3.繰り返しでレコードを更新するの方法を推奨いたします。
今回は、以下のスプレッドシートから取得した値を元に複数のレコードを作成し、InjectScriptアクションを使用してレコードを新規登録します。
kintone REST APIを認証済み環境で使用するために、AUTORO上でkintoneにログインし、新しいレコードを作成したいアプリに遷移します。
- 以下ワークフローをコピーし、エディタモードからペーストします。
- 以下をご自身の環境の情報に更新します。
・サブドメイン名
・ログインID
・ログインパスワード
・更新対象レコードが存在するアプリのURL
# ブラウザを開く_kintoneログイン画面 +open_browser_1: action>: OpenBrowser url: 'https://サブドメイン名.cybozu.com' lang: 'ja-JP' timeZone: 'Asia/Tokyo' headless: true windowSize: '1920 x 1080' useShadowDomSelector: false # 文字入力_ユーザーID +type_text_1: action>: TypeText browser: +open_browser_1 selector: '#username-\3A 0-text' text: 'ユーザーID' clearValue: false ignoreError: true # パスワード入力 +type_password_1: action>: TypePassword browser: +type_text_1 selector: 'input[type=password]' password: '' ignoreError: true # キーを送信_ログイン +send_keys_1: action>: SendKeys browser: +type_password_1 selector: 'input[type=password]' keys: ["Enter"] ignoreError: true # URLへ遷移_レコードを新規作成(登録)したいアプリ +go_to_1: action>: GoTo browser: +send_keys_1 url: 'https://サブドメイン名.cybozu.com/k/アプリID'
- 画像のようなシートを作成します。ヘッダー(1行目)はフィールドコードと同じ値にします。
- GetSpreadsheetを設定します。
- 「プロバイダID」を設定します。
- 「スプレッドシートID」に値が存在するスプレッドシートを指定します。
- GetCellsを設定します。
- 「範囲」に以下を入力します。
ご自身で設定されたシート名!A1:C
- StoreValueを設定します。
- 「変数名」をrecordRowsとします。
- 「値」を2のGetCellsのアウトプットとします。
- RunScriptを設定し、以下のコードをコピペします。
- コード中の「アプリID」を任意のアプリID(半角数字)に置換します。
const fields = recordRows.shift(); const kintoneRecords = recordRows.reduce((recordsArray, recordRow) => { const record = {}; recordRow.forEach((cell, i) => { record[fields[i]] = { value: cell }; }); recordsArray.push(record); return recordsArray; }, []); return { app: アプリID, records: kintoneRecords };
- StoreValueを設定します。
- 「変数名」をkintoneReqBodyとします。
- 「値」をRunScriptのアウトプットにします。
JavaScriptでレコードを3件作成し、まとめてアプリに登録します。
アクションには、レコード作成のレスポンスを出力させます。
- InjectScriptを設定します。
- 「ブラウザ」に、1のOpenBrowserのアウトプットを指定します。
- 以下コードをInjectScript内にコピペします。
(async () => { const appId = kintone.app.getId(); const postReqBody = ${JSON.stringify(kintoneReqBody)} const postResp = await kintone .api(kintone.api.url("/k/v1/records", true), "POST", postReqBody) .catch(e => e.message); return postResp; })();
HTTPRequestアクションを使用する場合は、上述の手順から1を飛ばし、2,3では同じ設定を行います。
その後、4をHTTPRequestアクションとします。
- HTTPRequestを設定します。
- 「URL」を以下とします。1件更新のURLとは異なります。
https://サブドメイン名.cybozu.com/k/v1/records.json
- リクエストボディを以下とします。
${kintoneReqBody}
- 「リクエストメソッド」をPOSTとします。
- 「ヘッダ」を以下とします。
{"X-Cybozu-API-Token":"更新対象レコードが存在するアプリのAPIトークン"}
# スクリプトを実行_レコードを生成 +run_script_1: action>: RunScript code: "return {\n app: アプリID,\n record: {\n 都道府県: { value: \"東京都\" },\n 費用: {\n value: [\n {\n value: {\n おやつ代: {\n value: 350\n },\n 交通費: {\n value: 20000\n }\n }\n }\n ]\n }\n }\n};\n" # 変数に保存 +store_value_1: action>: StoreValue key: reqBody value: +run_script_1 # ブラウザを開く_kintoneログイン画面 +open_browser_1: action>: OpenBrowser url: 'https://サブドメイン名.cybozu.com' lang: 'ja-JP' timeZone: 'Asia/Tokyo' headless: true windowSize: '1920 x 1080' useShadowDomSelector: false # 文字入力_ユーザーID +type_text_1: action>: TypeText browser: +open_browser_1 selector: '#username-\3A 0-text' text: 'ユーザーID' clearValue: false ignoreError: true # パスワード入力 +type_password_1: action>: TypePassword browser: +type_text_1 selector: 'input[type=password]' password: '' ignoreError: true # キーを送信_ログイン +send_keys_1: action>: SendKeys browser: +type_password_1 selector: 'input[type=password]' keys: ["Enter"] ignoreError: true # URLへ遷移_更新したいアプリ +go_to_1: action>: GoTo browser: +send_keys_1 url: 'https://サブドメイン名.cybozu.com/k/アプリID' # ページ内でJavaScriptを実行する_レコードを新規作成・一括登録 +inject_script_1: action>: InjectScript browser: +go_to_1 code: "(async () => {\n const appId = kintone.app.getId();\n\n const postReqBody = ${JSON.stringify(kintoneReqBody)}\n\n const postResp = await kintone\n .api(kintone.api.url(\"/k/v1/records\", true), \"POST\", postReqBody)\n .catch(e => e.message);\n return postResp;\n})();" waitAfter: 5000 returnValue: true # ページ内でJavaScriptを実行する_ページ更新 +inject_script_3: action>: InjectScript browser: +go_to_1 code: "location.reload();\n" waitBefore: 2000 waitAfter: 5000 returnValue: false # スクリーンショットを撮る +take_screenshot_1: action>: TakeScreenshot browser: +inject_script_3 full_page: false type: png
# 既存のスプレッドシートを取得 +get_spreadsheet_1: action>: GetSpreadsheet provider: '' spreadsheet_id: '' meta: display: # セルの値を取得_ヘッダー(フィールドコード)ごと取得 +get_cells_1: action>: GetCells spreadsheet: +get_spreadsheet_1 range: 'シート1!A1:C' findAll: false # 変数に保存 +store_value_1: action>: StoreValue key: recordRows value: +get_cells_1 # スクリプトを実行_シートの値をkintoneレコードの形式に加工&リクエストボディ生成 +run_script_1: action>: RunScript code: "const fields = recordRows.shift();\nconst kintoneRecords = recordRows.reduce((recordsArray, recordRow) => {\n const record = {};\n recordRow.forEach((cell, i) => {\n record[fields[i]] = {\n value: cell\n };\n });\n recordsArray.push(record);\n return recordsArray;\n}, []);\n\nreturn {\n app: アプリID,\n records: kintoneRecords\n};\n" # 変数に保存 +store_value_2: action>: StoreValue key: kintoneReqBody value: +run_script_1 # HTTPリクエスト_新規作成/一括登録 +h_t_t_p_request_1: action>: HTTPRequest url: 'https://サブドメイン名.cybozu.com/k/v1/records.json' params: ${kintoneReqBody} method: POST headers: X-Cybozu-API-Token: '更新対象レコードが存在するアプリのAPIトークン' multipart: false