今回の記事は、SKEで自動採番機能のサンプルです。
1、連番型の自動採番
連番型項目は、データ挿入時値が設定されなかったら自動的に増加する数字項目です。PKとしてよく利用されます。以下のテーブルを利用して、サンプルを作ります。
CREATE TABLE "テストテーブル"
(
"主キー" serial NOT NULL,
"名称" character varying(10),
CONSTRAINT "テストテーブル_pkey" PRIMARY KEY ("主キー")
)
共通設定
テーブル名と項目名を登録します。PK項目は役割に「主キー」と設定します。
一覧画面
今回は入力ダイアログで試したいですから、以下のように、一覧画面に入力ダイアログ利用することを設定します。
一覧画面の表示項目を設定します。
入力ダイアログ
入力ダイアログには、主キー項目を設定しないようにします。主キー項目を設定されたら、保存時画面の値をDBに代入するので、自動的に増加する効果がなくなります。
その他設定
メニュー定義とロール定義を設定して、テストできるようにします。このあたりはプロトタイプ作成をご参考ください。
効果
名称を入力します。
保存したら主キーが自動採番されます。
但し、新規保存後編集モードで継続することはできません。保存時採番した主キーを入力ダイアログ側が知らないからです。
2、初期表示時シーケンスの自動採番
連番型をやめて、シーケンスと数字項目で代替ります。
CREATE SEQUENCE "主キー用シーケンス"
INCREMENT 1
MINVALUE 1
MAXVALUE 9223372036854775807
START 1
CACHE 1;
CREATE TABLE "テストテーブル"
(
"主キー" integer NOT NULL,
"名称" character varying(10),
CONSTRAINT "テストテーブル_pkey" PRIMARY KEY ("主キー")
共通設定、一覧画面
「連番型で自動採番」と同じ
入力ダイアログ
主キー項目を追加します。編集不可にします。フォーマットに「0」を設定して画面から受け取るテキストを数字に変更して、データ型の整合性を保つためです。値のアドオンを登録します。
新規モードとコピー新規モードの場合、画面初期表示時、シーケンス採番の値を表示します。
{
"add": function(initFormData,dbData,result){
return db.select("select nextval('主キー用シーケンス')").getValue("nextval");
},
"copyAdd": function(initFormData,dbData,result){
return db.select("select nextval('主キー用シーケンス')").getValue("nextval");
}
}
効果
新規モードで入力ダイアログを開く際、主キー項目に初期値が設定されます。
名称を入力して保存して、そのまま継続できます。
但し、新規モードで入力ダイアログを開いて保存しないまま閉じて、もう一回開く場合、シーケンスを再採番されて飛び番現象が出ます。
3、保存時シーケンスの自動採番
「初期表示時シーケンスの自動採番」のシーケンスとテーブルはそのまま利用します。
共通設定
基本的に「連番型で自動採番」の設定内容と同じですが、以下のように主キー項目の新規とコピー新規モードの設定値アドオンを登録します。
{
"add": function(saveFormData){
var id=db.select("select nextval('主キー用シーケンス')").getValue("nextval");
saveFormData.fd主キー=id;
return id;
},
"copyAdd": function(saveFormData){
var id=db.select("select nextval('主キー用シーケンス')").getValue("nextval");
saveFormData.fd主キー=id;
return id;
}
}
一覧画面
「連番型で自動採番」と同じ
入力ダイアログ
アドオンプログラムの可読性のため、主キー項目のIDを設定します。主キー項目の値は新規モードとコピー新規モードの場合空白を設定します。
効果
新規モードで入力ダイアログを開いて、主キー項目は空白です。名称を入力して保存ボタンを押します。
保存後、主キー項目に値が表示されます。
まとめ
今回の記事のサンプルには、以下のアドオンを利用しました。
- 値のアドオン
- モード別項目設定値のアドオン