はじめに
kintoneのREST APIを使用してレコードの更新を行う際、REST APIに渡したJSONデータのレコード内容がエラーとなってしまい、途方に暮れることはないでしょうか?また、項目数が多くなってくるとレコード構造を作るのも一苦労です。
そんな時はChromeブラウザで対象のkintoneアプリの1レコードを表示し、DevToolsのコンソールでkintone.app.record.get()とkintone.app.record.set()を実行することで、簡単にレコード内容の取得と検証を行うことができます。
補足
この記事を作成している時点(2022年11月)でkintone.app.record.get()とkintone.app.record.set()は、kintoneレコード表示画面のchangeイベント( app.record.create.change.<フィールドコード>、app.record.edit.change.<フィールドコード>)以外のイベント内では使用できません。
例としてshowイベント内で使用するとこんな感じでエラーが表示されます。
サンプルアプリ
サンプルとして項目を並べて、適当なアプリを作成しました。
また、レコード内容を取得した時に分かりやすいように、各項目にデータを入力したレコードをkintoneアプリに登録しています。
レコードの取得
まず、レコード構造を取得したいkintoneアプリのレコードを1件開いて、編集モードにします。その画面でF12キーを押下してDevToolsを起動します。DevToolsが起動したら、コンソールウィンドウに"kintone.app.record.get()"と入力し、実行します。
実行結果が表示されるので、{record: {…}}を右クリックして「objectをコピー」をクリックします。
「objectをコピー」した内容をメモ帳などに貼り付けます。これでレコード構造付きでレコード内容を取得することができました。
{
"record": {
"支店コード": {
"type": "SINGLE_LINE_TEXT",
"value": "SMPL001"
},
"支店名": {
"type": "SINGLE_LINE_TEXT",
"value": "サンプル支店"
},
"配送オプション": {
"type": "CHECK_BOX",
"value": [
"段ボール",
"冷蔵"
]
},
"明細テーブル": {
"type": "SUBTABLE",
"value": [
{
"id": "209188",
"value": {
"品目コード": {
"type": "SINGLE_LINE_TEXT",
"value": "001"
},
"品名": {
"type": "SINGLE_LINE_TEXT",
"value": "みかん"
},
"数量": {
"type": "NUMBER",
"value": "1"
}
}
}
]
},
"$revision": {
"type": "__REVISION__",
"value": "5"
},
"$id": {
"type": "__ID__",
"value": "1"
},
"レコード番号": {
"type": "RECORD_NUMBER",
"value": "1"
},
"更新者": {
"type": "MODIFIER",
"value": {
"code": "K211033",
"name": "ds_user"
}
},
"作成者": {
"type": "CREATOR",
"value": {
"code": "K211033",
"name": "ds_user"
}
},
"更新日時": {
"type": "UPDATED_TIME",
"value": "2022-11-30T11:40:00Z"
},
"作成日時": {
"type": "CREATED_TIME",
"value": "2022-11-29T10:35:00Z"
}
}
}
レコードの検証
ここからの作業はkintoneアプリ側がレコード編集画面でなければ、画面の内容に反映されません。
まず、先程取得したレコード構造の内容を書き換えて、コンソール上で適当な変数に格納します。今回の例では支店コード、支店名、配送オプションを変更し、テーブルにレコードを追加しています。
var aa = {
"record": {
"支店コード": {
"type": "SINGLE_LINE_TEXT",
"value": "SMPL002"
},
"支店名": {
"type": "SINGLE_LINE_TEXT",
"value": "サンプル支店2"
},
"配送オプション": {
"type": "CHECK_BOX",
"value": [
"マルチ"
]
},
"明細テーブル": {
"type": "SUBTABLE",
"value": [
{
"id": "209188",
"value": {
"品目コード": {
"type": "SINGLE_LINE_TEXT",
"value": "001"
},
"品名": {
"type": "SINGLE_LINE_TEXT",
"value": "みかん"
},
"数量": {
"type": "NUMBER",
"value": "1"
}
}
},
{
"value": {
"品目コード": {
"type": "SINGLE_LINE_TEXT",
"value": "002"
},
"品名": {
"type": "SINGLE_LINE_TEXT",
"value": "りんご"
},
"数量": {
"type": "NUMBER",
"value": "2"
}
}
}
]
},
"$revision": {
"type": "__REVISION__",
"value": "5"
},
"$id": {
"type": "__ID__",
"value": "1"
},
"レコード番号": {
"type": "RECORD_NUMBER",
"value": "1"
},
"更新者": {
"type": "MODIFIER",
"value": {
"code": "K211033",
"name": "ds_user"
}
},
"作成者": {
"type": "CREATOR",
"value": {
"code": "K211033",
"name": "ds_user"
}
},
"更新日時": {
"type": "UPDATED_TIME",
"value": "2022-11-30T11:40:00Z"
},
"作成日時": {
"type": "CREATED_TIME",
"value": "2022-11-29T10:35:00Z"
}
}
}
実際にはコンソールでこんな感じで貼り付けます。
次に、先程の変数を引数にkintone.app.record.set()を実行します。
kintoneのレコード編集画面を確認すると、編集したレコード内容が反映されています。これで編集したレコード内容が想定通り反映されているか、確認することができます。
kintone.app.record.set()は、レコード編集画面上の内容を変更するだけでkintoneアプリのレコードを更新しているわけではありません。このため、レコード編集画面でキャンセルボタンを押下すれば、変更した内容を破棄することができます。つまり、編集したレコード内容がうまく反映されなければ、何度でもやり直すことができます。
レッツ、トライアンドエラー!!
おわりに
kintone REST APIによるレコード更新時にレコード内容が原因と思われるエラーが発生する度にウンザリしていたのですが、今回の手順でkintoneから取得したレコード内容(構造付き)と自作のコード内で生成したレコード内容と比較することができるようになり、問題箇所が把握しやすくなりました。コードで登録したいレコード内容をkintone画面上で登録して、レコード内容を取得してしまえばよいのです。
また、レコード新規登録時のJSONデータでは$id項目、レコード番号や作成者、作成日時、更新者、更新日時、それにサブテーブルのid項目は不要になるので、これらの要素を省略すれば、レコード構造を流用することができます。