kintoneのテーブルに行を追加する
※本ページの紹介内容をワークフローに実装するためには、事前にkintoneとの連携設定を済ませておく必要があります。
連携設定の方法はこちらをご参照ください。
kintoneと連携
仕様により、以下のフィールドは更新ができません。
- ルックアップ元からコピーされるフィールド
- 計算
- 作成者
- 自動計算が設定されている文字列(1行)フィールド
kintoneのテーブル
テーブルに1行を追加する
# テーブルにレコードを追加する +kintone_add_record_to_table_1: action>: kintoneAddRecordToTable provider: appId: recordId: 1 tableName: '活動履歴' tableRecord: 日付: value: '2024-04-10' 活動内容_0: value: '訪問' 滞在メモ: value: '飛び込み' clearTableRecords: false private: false meta: display: provider: type: chip label: 'kintone (example.cybozu.com)' icon: kintone appId: label: '商談履歴サブテサンプル' icon: kintone type: chip
テーブルに複数行を追加する
取得したシートの情報を「どのレコード(ID)の、どのテーブルに追加するか?」を下記の通り設定します。
どのレコード(ID)に追加するか? | シートのA列(レコードID) |
どのテーブルに追加するか? | 滞在先テーブル |
まずはテーブルから設定していきます。
- kintoneAddRecordToTable(テーブルにレコードを追加する)アクションを設定します
- プロバイダーIDは、右端のkintoneアイコンから指定します
- アプリIDは、右端のkintoneアイコンから選択するか、アプリIDの直打ちで指定します
- テーブル名は、右端のkintoneアイコンから選択するか、テーブルのフィールドコードを直打ちします。
- レコードIDには以下を設定します。A列の値は今回は[0]で呼び出せます。
${tableRow[0]}
列名 | 列アルファベット | 列番号 |
---|---|---|
レコードID | A | 0 |
タイトル | B | 1 |
滞在地 | C | 2 |
滞在開始日 | D | 3 |
滞在終了日 | E | 4 |
費用 | F | 5 |
添付ファイル | G | 6 |
メモ | H | 7 |
- 「テーブルに書き込むレコード」欄の右端のアイコンをクリックします
- 表示されたモーダルの+ボタンをクリックして、項目を追加していきます
- モーダルのfieldをプルダウンから選択し、valueには対応する値を入力していきます
テーブルの親レコードのIDがシートなどに無い場合は、何らかの方法で親レコードのIDを特定する必要があります。
今回の例であれば、kintoneのタイトルフィールドが他と重複しないようになっていれば、シート上のタイトル(B列)からレコードIDを割り出せます。
このようなIDの特定作業は、kintoneGetRecordアクションや、ブラウザ系アクションで起動したkintoneからできる場合が多いです(利用者の環境によります)
※弊社テスト環境のアプリで使用した例となります。実際の設定内容はアプリにより異なります。
# 既存のスプレッドシートを取得 +get_spreadsheet_1: action>: GetSpreadsheet provider: '' spreadsheet_id: '' private: false meta: display: # セルの値を取得 +get_cells_1: action>: GetCells spreadsheet: +get_spreadsheet_1 range: 'シート1!A2:M' findAll: true private: false # 各要素について繰り返す +for_each_1: for_each>: tableRow: +get_cells_1 _do: # テーブルにレコードを追加する +kintone_add_record_to_table_1: action>: kintoneAddRecordToTable provider: kintone_ffd168138e4f42b6c169 appId: '' recordId: ${tableRow[0]} tableName: '滞在地テーブル' tableRecord: 滞在地: value: ${tableRow[2]} 滞在開始日: value: ${tableRow[3]} 滞在終了日: value: ${tableRow[4]} 滞在メモ: value: ${tableRow[7]} clearTableRecords: false private: false meta: display: provider: type: chip label: 'kintone (example.cybozu.com)' icon: kintone
AUTOROで作成したkintoneレコードにテーブルを追加する
kintoneに、中身の入ったテーブルを含んだ状態のレコードを1件作成したい場合、kintoneCreateRecord(レコードを1件作成する)アクションだけではテーブルへのレコード追加ができません。
このようなケースでは、以下の手順で「テーブルを追加したいレコードのID」を割り出す必要があります。
- kintoneCreateRecordアクションでレコードを作成
- レコードIDの降順でレコードを取得
- 最新のレコードIDを取り出し
- 取り出したレコードIDをkintoneAddRecordToTable(テーブルにレコードを追加)アクションのレコードIDに指定
以下より詳細な方法を紹介します
# レコードを1件作成する +kintone_create_record_1: action>: kintoneCreateRecord provider: '' appId: 51 record: タイトル: value: 'トリポリ' private: false meta: display: # レコードを一括取得する_id降順,先頭3件 +kintone_get_records_1: action>: kintoneGetRecords provider: '' appId: 51 fields: ["$id"] query: 'order by $id desc limit 5' private: false meta: display: # リストから要素を取得_最新のレコード +get_item_from_list_1: action>: GetItemFromList list: +kintone_get_records_1 index: '0' private: false # オブジェクトのキーの値を取得_最新のレコードID +get_value_with_key_1: action>: GetValueWithKey object: +get_item_from_list_1 key: '$id' private: false # テーブルにレコードを追加する +kintone_add_record_to_table_1: action>: kintoneAddRecordToTable provider: '' appId: 51 recordId: +get_value_with_key_1 tableName: '' tableRecord: '' clearTableRecords: false private: false meta: display:
参考:JavaScriptを使用してテーブルにレコードを追加する
2024年4月以前はkintoneAddRecordToTableアクションがなかっため、JavaScriptを使用した方法を別のページにて紹介しておりました。
その際に記載していた、JavaScriptを使用した2つの方法をこちらに残しておきます
- HTTPRequestアクションを使用する
- InjectScriptアクションを使用する
今回は例として、以下のレコードを新規作成してみます。
- サブテーブルの「おやつ代」が「350」
- サブテーブルの「交通費」が「20000」
- サブテーブルではない「都道府県」が「東京都」
- RunScriptアクションを設定します。
- サブテーブルを含むレコード1件を、kintoneで定められた形式で記述します。
- アプリIDを、新たにレコードを作成したいアプリのID(半角数字)に変更します。
- StoreValueアクションを追加します。
- 変数名は任意とします。
- 値にRunScriptアクションのアウトプットを指定します。
参考:レコードの登録(POST) リクエストボディの構造部を参照
参考:レコード更新におけるテーブル操作のテクニック(登録においても有用です)
- kintoneから、レコードを新規追加したいアプリの設定画面を開きます。
- 「設定」タブから、「APIトークン」をクリックします。
- APIトークンが存在しない場合、「生成する」をクリックします。
- APIトークンのアクセス権を設定します。
- 画面左上の「保存」をクリックします。
- 「アプリを更新」をクリックします。
- HTTPRequestアクションを設定します。
- 「URL」を以下とします。
https://サブドメイン名.cybozu.com/k/v1/record.json
- リクエストボディを以下とします。
${1で作成した変数名}
- 「リクエストメソッド」をPOSTとします。
- 「ヘッダ」を以下とします。
{"X-Cybozu-API-Token":"2でコピーしたAPIトークン"}
サブテーブル更新のためにInjectScriptアクションを使用する場合、InjectScriptアクションの前に、OpenBrowserアクションからkintoneにログインしておく必要があります。
InjectScriptアクション内部では、kintone REST APIのJavaScriptをそのままご使用いただけます。
加えて、InjectScript内部のスクリプトでasync/awaitを使用すると、kintone REST APIからのレスポンスを出力できます。(参考リンク)
実際のワークフロー例は、下記のワークフロー実行結果のうち「InjectScript(kintone REST API)」タブをご参照ください。
※ログインするユーザーには、該当アプリのレコードを編集する権限が必要です。(参考リンク)
※InjectScriptを使用する場合は、HTTPRequestで必要なAPIトークンの発行は不要です。(参考リンク)
※kintoneにIPアドレス制限がされている場合は、制限を解除頂くか、AUTOROオプションの固定IPサービスをご利用ください(参考リンク)
# スクリプトを実行_レコードを生成 +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 # HTTPリクエスト +h_t_t_p_request_1: action>: HTTPRequest url: 'https://サブドメイン名.cybozu.com/k/v1/record.json' params: ${reqBody} method: POST headers: X-Cybozu-API-Token: '2で発行したAPIトークン' multipart: false
# スクリプトを実行_レコードを生成 +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(reqBody)}\n\n const postResp = await kintone\n .api(kintone.api.url(\"/k/v1/record\", true), \"POST\", postReqBody)\n .catch(e => e.message);\n return postResp;\n})();\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