Handsontableを使ってkintoneをExcelライクに入力しよう その2 - 基本編
はじめに
前回、
Handsontable
を使って、Excelのように入力ができるようなTipsを公開しました。
今回は、前回の閲覧・編集に加えて、レコードの追加・削除にも対応したいと思います。
前回記事
のコードをベースに修正していきますので前回記事も参照ください。
また、コードは、
GitHub mura-/kintone_handsontable.js
に公開しています。
基本的に上記をコピーして必要な部分を書き換えれば動くとは思いますが、必要に応じてコードを参照しながら下記をお読みください。
viewIdはカスタマイズビュー設定時のviewIdを入力してください。
デモ環境
デモ環境
で実際に動作を確認できます。
ログイン情報は
cybozu developer networkデモ環境
で確認してください。
サンプルアプリの設定
前回と同様のアプリ設定を用います。
前回記事の
「kintoneカスタマイズでの導入方法 - サンプルアプリの準備」
の項目を参考にしてください。
カスタマイズで利用しているHandsontableは、v7.0.0以降MITライセンスではなくなりました。
このカスタマイズでは、
MIT
ライセンスのv6.2.2を利用しています(
ライセンス表記
)。
v7.0.0以降を利用する際は
HandsontableのHP
で有償ライセンスを購入し、ライセンス条件にしたがって利用してください。
詳細は、
Cybozu CDNライセンス対応ガイド
を参照してください。
コードの改修の解説
レコードの追加に対応する
前回のsaveRecordsメソッドを拡張し、追加・更新両方に対応します。
今回は、追加・更新のために
bulkRequest
を利用しました。
bulkRequestは、本来複数アプリへのレコード一括処理をするためにありますが、もちろん同じアプリにも使えます。
これを使うことで1回のAPIの呼び出しだけでkintoneのレコード更新が済みますし、なにより追加・更新処理どちらかでエラーが有った場合はロールバックされるので安全です。
引数には、kintoneのレコードデータ(records)と、Handsontable上でセルが編集された際に取得できる配列(changeDatas)を指定することとします。
|
|
レコードの削除に対応する
handsontableの設定
削除は、コンテキストメニュー(右クリックメニュー)から実行できるようにしたいと思います。
まず、handsontableのコンテキストメニューオプションを設定します。
デフォルトで機能はたくさんあるのですが、今回は行削除(remove_row)だけに対応します。
|
|
削除メソッドの作成
次に、削除用メソッド(deleteRecords)を作成します。
引数には、kintoneのレコードデータ(records)と、削除する行(index)・削除できる行数(amount)を指定できるようにします。
削除するべきレコード番号を抽出して、削除APIを呼び出します。
|
|
削除メソッドの呼び出し
レコードを削除すると、HandsontableのbeforeRemoveRowイベントが発行します。
beforeRemoveRowイベントの中で、deleteRecordsメソッドを呼び出して、削除処理を行います。
|
|
データを同期する
データの乖離が起きないよう、追加・更新・削除のタイミングでデータを再同期します。
データ取得メソッドの作成
今回は特に検索条件を指定しませんが、次のように並び替えだけはレコード番号昇順にしてください。
降順だとレコードを追加した行が一番先頭に表示されてしまいます。
また、limitも500と指定することで500件まで表示できます。
|
|
追加・更新・削除時に同期する
次のように、追加・更新・削除時のcallbackメソッドに同期するメソッドを指定します。
HandsontableはloadDataメソッド
があり、引数に取得したkintoneレコードデータを指定することで再同期できます。
また、同期することにより、フォーム設定画面で指定したデフォルト値が表示されたり、計算フィールドのレコードが計算されて表示されるなどのメリットもあります。
|
|
データを定期的に同期する
追加・更新・削除時だけでなく、長く画面を開いていればデータに乖離が起こる場合もあります。
そこで、今回はデータを定期的に同期する処理もいれてみました。
|
|
注意点
- 今回のコードにおいて表示できるデータ件数は500件まで、更新は100件までとなっています。コードをカスタマイズすることで、絞り込みやデータの条件を増やすことができます。
- 表示できるデータ件数に制限があるため、今回のサンプルは
一覧の設定
の「ページネーションを表示する」に対応していません。
- 表示できるデータ件数に制限があるため、今回のサンプルは
一覧の設定
- APIの呼び出し回数は1アプリ1日あたり上限10,000回です。今回は同期処理をいれていますが、必要に応じて同期間隔を遅くしてください。開きっぱなしに注意してください。
最後に
Excelライクな操作で前回の閲覧・編集に加えて、レコードの追加・削除ができるようになりました。
一括でデータを追加、更新したい場合や、削除したい場合に便利ですね。
次回は、
Handsontableを使ってkintoneをExcelライクに入力しよう その3 - 上級編
で、有償版のHandsontableでできることを紹介します。
このTipsは、2022年7月版kintoneで動作を確認しています。
