ZOHO Creator には、レコードを作成するたびに、数値フィールド上で連番を作成する機能がないようだ。そこで、Deluge Scripting を利用して、現在保存されてる最大値よりも 1 だけ大きい値が、入力画面に自動で表示するようにした。
方法
対象のフォームにおいて、スクリプトタブを選択する。
SQL が利用できれば、MAX 関数を使って、対象のフィールドにおける最大値を取得し、+ 1 する。しかし、SQL は利用できないようだ。
そこで、対象のレコードを全て走査し、その中で最大値のものを見つけ、+ 1 することにした。
スクリプトビルダー
ZOHO Creator でおもしろいのは、スクリプトを書くための「スクリプトビルダー」というものが用意されているところ。変数の設定ですら、ドラッグ&ドロップとクリックで行うことに驚いた。ブラウザ上で、こんな芸当ができるなんて...(@_@;)
特定のフォームに関連付けられたデータの集合を走査するためには、 for each Record を使う。
Edit ボタンを押すと、スクリプトの文を設定するためのダイアログが表示される。
ここでは、次の手順で設定を行う。
- 走査するデータと関連付けらたフォームを選択
- コレクションから取り出したレコードを保持する変数を定義
- データを抽出するための基準を設定する。
(今回は、全てのレコードを走査するので、抽出のための基準は設定しない。)
これを全部、ダイアログで設定するというのには違和感を覚えたけれど、おもしろい。^^; てゆうか、すごすぎ... 慣れてきたら、スクリプトビルダーではなくて、フリースクリプトの方を利用すればよい。
変数の参照
制御構造や、変数の設定、コレクション (レコードの集合) の走査において、共通に表示されるタブがある。
それぞれの左のタブから、次のものを参照することができる。
- フォームのフィールド
- スクリプト上で定義した変数
- ZOHO における特別な変数 (ex. 現在の時刻)
- スクリプト上で定義したコレクション
- 組み込みの関数
連番を表示するスクリプト
maxID = 0;
for each 変数 in フォーム名
{
if (変数.フィールド > maxID)
{
maxID = 変数.フィールド;
}
}
input.対象フィールド = (maxID + 1);
上記を、フォームのアクション > 追加時 > 読込時 に設定した。
1人だけでアプリケーションを使うなら、これでよい。しかし、複数の人で同時に利用するとなると、データの登録時に、最大値がバッティングしてしまう。そこで、 追加時 > 検証 において、同じコードを実行するようにした。
(どこかに共通に利用するスクリプトを保存できないかなぁ... (?_?))