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
















