こちらの記事の続きです。
今回は、 Javascript カスタマイズに限らず、テーブル周りに関するあれこれをまとめておきます。
グループとテーブル
カスタマイズとはちょっと異なりますが、テーブルはグループに入れられないです。
個人的には、地味にいやな制限です。
テーブルの要素
フォームで新規登録する場合などは、全ての列フィールドが必須でない場合、行の全フィールドが未入力の行があっても、空行が最低1行は入ってしまいます。テーブルの中身が0行というのはフォームで操作する場合は作れないようです。
カスタマイズの時などは、ちょっと意識しておく必要がありますね。
テーブルの行追加・削除の無効化
テーブルに追加したフィールド単位の有効・無効は制御できます。ですが、テーブル全体の無効化はできないみたいです。全部のフィールドを無効にすればいいかな?と思いきや、それでも行の追加ができるので微妙な感じになります。
ネットを調べてみても、テーブル自体を無効(行の追加、削除)にすることはできないっぽいです。
- テーブルの編集不可について - kintone カスタマイズ - cybozu developer community
- サブテーブルの編集不可について - kintone カスタマイズ - cybozu developer community
なぜか、公式のドキュメントを見つけらなかったのですが、自分でも試したところ、ダメでした。
どうしてもこれをやりたければ、調べてみると、以下の3つの方法で代替できそうです。
DOM で直接操作
下記などを参考にして、直接 DOM で操作すれば何とかなりそうです。
サブテーブルの追加削除を制限したい - kintone カスタマイズ - cybozu developer community
実際に試してみると、結構簡単に制御できたので、これは使えそうですね。
Kintone UI Component v1 の ReadOnlyTable を使う
テーブル上に情報を表示するだけなら、基本的には関連テーブルでできるんですが、何かの事情でそれができないなら、 ReadOnlyTable を使えば編集不可の情報を表示するだけのテーブルが作れます。
ReadOnlyTable | kintone UI Component · Be a smart kintone developer.
個人的には、これが一番しっくりくる解決策です。
試した際の注意点としては、 ReadOnlyTable のコンストラクタを呼び出すタイミングで、表示したい行データも与えておく必要があります。インスタンス生成後に行データを追加しても画面に反映されませんでした。
Kintone UI Component v1 の Table を使う
Kintone UI Component v1 の Table には、ボタンの追加削除を設定できる actionButton プロパティがあるので、それで制御できるかと思います。
Table | kintone UI Component · Be a smart kintone developer.
既存のレコードは編集させたいが、行の追加・削除はさせたくないという場合は、これもありかと思います。
テーブルの行ごとの更新
テーブルの更新はちょっとややこしいです。
更新時は、更新対象の行だけでなく、その他の行も更新時のリクエストに含める必要があります。
フィールド形式 - cybozu developer network
こちらのリファレンスに
テーブルへの追加、更新時には、既存のすべての行の値を指定してください。
とさらっと書かれている点ですね。リファレンスよりは、下記の解説記事のほうがわかりやすいかもしれません。
レコード更新におけるテーブル操作のテクニック - cybozu developer network
同じページのここのところに、
実際の挙動は「既存の行をすべて削除し、リクエストに含まれるデータをテーブルへ追加する」となります。
とあるように、更新とは言うものの内実は、テーブルの中身を削除して、もう一度追加する、ということのため、このような仕様になっているようです。
なので、更新対象以外の行は、 ID だけでいいので指定する必要があります(変更しないフィールドは含めなくていいというのが、作業的にはちょっとはましなところですかね)。
テーブルの行番号の取得方法
テーブルには行番号という概念がありません。どうしても行番号を表示したければ、行追加時の例の記事、
サブテーブルの追加行を特定したい - kintone カスタマイズ - cybozu developer community
にあるのと同じように、その行が、テーブルの行データ(配列)の何番目に一致するのかを自分で調べてやる必要があります。
ちなみに、テーブルの行に対して、自動で連番を振る、というのが下記で紹介されているので、これを利用する方法もありますね。
テーブルに連番をつける - cybozu developer network
テーブルの行数を取得する
こちらは、フィールドの設定でいけるようです。
テーブルの行にカウントを設置して、それを計算フィールドで集計すればよいとのことです。
まとめ
テーブル周りは他にもいろいろと落とし穴がありそうです。あんまり使いたくないけど、パッと情報を確認できるのでユーザーからすると便利なんですよね。
もうちょっとテーブル操作用のAPIを用意してくれるとありがたいんですけどねー。