kintoneにおけるテーブル操作の基本(テーブルの構造・行の追加)
はじめに
kintoneで便利なテーブルですが、JavaScriptカスタマイズで取得して操作する場合は、入れ子構造が深く複雑になります。
本記事では、テーブルの構造と行の追加方法について解説します。
行の更新方法や削除方法については、次の記事を参照してください。
テーブルの操作の方法
テーブルの構造
テーブルがどのような構造になっているかを図に示しました。
特に、テーブルのオブジェクトの中には3階層にわたってvalueがあるので注意してください。
実際のオブジェクトを示すとこのようになります。(テーブル以外のフィールドは省略)
|
|
サンプルアプリ:テーブル操作
JavaScriptカスタマイズでテーブルの操作ができるサンプルアプリを、デモ環境で公開しています。
デモ環境
デモ環境で実際に動作を確認できます。
https://dev-demo.cybozu.com/k/313/
ログイン情報は cybozu developer networkデモ環境 で確認してください。
このアプリでは、「追加」「更新」「削除」ができます。
- 追加ボタンを押したとき:「追加_テキスト」「追加_チェックボックス」フィールドの値をテーブルに追加する。
- 更新ボタンを押したとき:「更新_行番号」で指定したテーブルの対象の「テキスト」フィールドを「更新_テキスト」「更新_チェックボックス」で更新する。
- 削除ボタンを押したとき:「削除_行番号」で指定したテーブルの対象の行を削除する。
デモアプリのサンプルコード
デモアプリのサンプルコードは次のとおりです。
|
|
行を追加するサンプルコード
本記事ではデモアプリのサンプルコードから、テーブルの行を追加するサンプルコードを抜き出して紹介します。
|
|
JavaScriptカスタマイズ全体の構成
このJavaScriptカスタマイズは、「テーブルの行追加」部分と「スペースフィールドにボタンを設置する」部分に分かれます。
今回は「テーブルの行追加」について解説しますので、「スペースフィールドにボタンを設置する」方法は次の記事を参考にしてください。
スペースフィールドにボタンを設置する処理
|
|
テーブルの行を追加する処理
|
|
テーブルの行番号を更新する処理
|
|
以下に、それぞれの部分ごとに解説をします。
ボタン設置部分
ここでは、スペースフィールドへのボタン設置と、ボタン押下時の設定をそれぞれいれています。
下記は「追加ボタン」の後続に宣言している「行追加」の関数を指定しています。
|
|
行追加処理
テーブルは配列で表現されていますので、JavaScriptでいうと配列の最後に値を追加する処理を書きます。
配列に行を追加するにはpush()を使います。
push()の中にはテーブルの行に相当するvalueを指定します。
このとき、テーブル内のすべてのフィールドのフィールドコードやtype, valueも指定する必要があります。
テーブルへ1行追加するためのコード(例)
|
|
行追加のイメージ
サンプルアプリのコードの行追加部分の解説
前述の例のとおりpush()をつかって行を追加します。
このサンプルでは、追加/更新/削除すべてのタイミングでresetRowNo()という関数を呼んで行番号をリセットしています。
詳しくは
行番号リセット処理
で説明します。
record取得と追加する行にセットするための値を代入する
|
|
push()で行を追加する
このとき、すべてのフィールドのvalue/typeを指定する必要があります。
|
|
行番号には空文字を指定する
行追加の直後に行番号を更新するため、行番号には空文字を指定します。
|
|
行番号を更新する関数(後述)
|
|
ここまでの変更内容をrecordに反映させる
|
|
行番号リセット処理
サンプルアプリでは追加/更新/削除どの関数を使っても毎回最後に行番号をリセットしています。
行番号更新と削除と同じようにforEach()で繰り返し処理をして、番号を書き換えています。
リセット処理は各追加/更新/削除関数で呼ばれるため、recordデータは引数に渡しています。
|
|
補足
保存時に処理を実行させたい場合
サンプルアプリでは、編集画面でボタンを押したときに動作するものなので、
レコードの値を取得する
と
レコードに値をセットする
を利用しています。
保存時に処理を実行させる場合は、
レコード編集画面で保存するときのイベント
を使って引数eventに渡されるrecordを編集すればOKです。
.forEach() などの繰り返し処理について
通常のfor文よりも、forEach()やmap()、reduce()などの繰り返し処理が便利ですので、下記リンクを参考にしてください。
forEach, map, filterなどをつかってkintoneのrecords配列をもっと上手に扱う
このTipsは、2024年9月版kintoneで動作を確認しています。
