Docly Child

kintoneのレコードを作成

174 views

この記事では、AUTOROでkintoneのレコードを作成する方法を紹介します。

  1. kintoneUpdateRecordアクションでレコードを1件作成する
  2. サブテーブルを含むレコードを1件作成する
  3. ファイルを添付してレコードを作成する
  4. 繰り返しで1件ずつレコードを作成する
  5. 複数のレコードを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件作成する(中級者向け)

2022年8月現在、サブテーブルの値の作成は、kintoneCreateRecordアクションでは実現できません。

サブテーブルの値を作成する場合は、以下いずれかの方法で対応する必要があります。

  • 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

 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:

サブテーブルを更新する場合は、kintoneCreateRecordではなく、HTTPRequestアクションをご使用ください。使用方法は「2.サブテーブルを含むレコードを1件作成する」をご参照ください。

 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
<kintone>キントーン

このページは役に立ちましたか?