kintone.apiによる簡単なレコード内容の取得と検証

# はじめに
kintoneのREST APIを使用してレコードの更新を行う際、REST APIに渡したJSONデータのレコード内容がエラーとなってしまい、途方に暮れることはないでしょうか？また、項目数が多くなってくるとレコード構造を作るのも一苦労です。

そんな時はChromeブラウザで対象のkintoneアプリの１レコードを表示し、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イベント内で使用するとこんな感じでエラーが表示されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/355999/52ea19bf-e5cb-7511-e077-98377abcb41b.png)

# サンプルアプリ
サンプルとして項目を並べて、適当なアプリを作成しました。
また、レコード内容を取得した時に分かりやすいように、各項目にデータを入力したレコードをkintoneアプリに登録しています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/355999/d0c538a5-987d-8364-f436-9d8cdbc192ab.png)

# レコードの取得
まず、レコード構造を取得したいkintoneアプリのレコードを1件開いて、編集モードにします。その画面でF12キーを押下してDevToolsを起動します。DevToolsが起動したら、コンソールウィンドウに"kintone.app.record.get()"と入力し、実行します。
実行結果が表示されるので、{record: {…}}を右クリックして「objectをコピー」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/355999/dad1d6df-f084-17ba-718f-cce559bb708e.png)

「objectをコピー」した内容をメモ帳などに貼り付けます。これでレコード構造付きでレコード内容を取得することができました。
~~~json
{
    "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アプリ側がレコード編集画面でなければ、画面の内容に反映されません。

まず、先程取得したレコード構造の内容を書き換えて、コンソール上で適当な変数に格納します。今回の例では支店コード、支店名、配送オプションを変更し、テーブルにレコードを追加しています。
~~~js
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"
        }
    }
}
~~~
実際にはコンソールでこんな感じで貼り付けます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/355999/d9a03777-3954-782e-e1b4-082b3f1293f2.png)
次に、先程の変数を引数にkintone.app.record.set()を実行します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/355999/5b4dab68-29fe-e910-ba0b-76e92ec83480.png)
kintoneのレコード編集画面を確認すると、編集したレコード内容が反映されています。これで編集したレコード内容が想定通り反映されているか、確認することができます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/355999/e6bfceff-c738-4eb9-e4ff-1b5ea9413d7e.png)

kintone.app.record.set()は、レコード編集画面上の内容を変更するだけでkintoneアプリのレコードを更新しているわけではありません。このため、レコード編集画面でキャンセルボタンを押下すれば、変更した内容を破棄することができます。つまり、編集したレコード内容がうまく反映されなければ、何度でもやり直すことができます。
レッツ、トライアンドエラー！！

# おわりに
kintone REST APIによるレコード更新時にレコード内容が原因と思われるエラーが発生する度にウンザリしていたのですが、今回の手順でkintoneから取得したレコード内容(構造付き)と自作のコード内で生成したレコード内容と比較することができるようになり、問題箇所が把握しやすくなりました。コードで登録したいレコード内容をkintone画面上で登録して、レコード内容を取得してしまえばよいのです。
また、レコード新規登録時のJSONデータでは$id項目、レコード番号や作成者、作成日時、更新者、更新日時、それにサブテーブルのid項目は不要になるので、これらの要素を省略すれば、レコード構造を流用することができます。