今回の記事は、SKEで階層連動ドロップダウンのサンプルです。
テーブルを準備する
CREATE TABLE "区分1マスタ"
(
"区分1コード" character varying(10) NOT NULL,
"区分1名" character varying(10),
CONSTRAINT "区分1マスタ_pkey" PRIMARY KEY ("区分1コード")
);
CREATE TABLE "区分2マスタ"
(
"区分1コード" character varying(10) NOT NULL,
"区分2コード" character varying(10) NOT NULL,
"区分2名称" character varying(10),
CONSTRAINT "区分2マスタ_pkey" PRIMARY KEY ("区分1コード", "区分2コード")
);
共通設定
以下のテーブルを利用して、サンプルを作成します。
CREATE TABLE "テストテーブル"
(
"主キー" integer NOT NULL,
"名称" character varying(10),
"区分1コード" character varying(10),
"区分2コード" character varying(10),
"作成者" character varying(20),
"作成日時" timestamp without time zone,
"最終更新者" character varying(20),
"最終更新日時" timestamp without time zone,
CONSTRAINT "テストテーブル_pkey" PRIMARY KEY ("主キー")
)
区分1コードと区分2コードは文字列ですから、タイプを省略しても大丈夫です。
入力ダイアログ
区分1と区分2はアドオンの可読性のためIDを設定します。タイプはコンボを設定します。ソースのアドオンを登録します。
新規モードの値は空白を設定します。区分1の入力枠操作アドオンを登録します。
区分1のリスト内容は区分1マスタから取得します。
fd区分1のソース
function(initFormData,dbData,initData,result){
return db.select("select * from 区分1マスタ order by 区分1コード")
.map({
value:"区分1コード",
option:"区分1名",
}).getArray();
}
区分2のリスト内容はテーブルデータの区分1コードを検索条件として区分2マスタから取得します。新規の場合テーブルデータがないため、区分2のリストはカラになります。
fd区分2のソース
function(initFormData,dbData,initData,result){
var fd区分1=dbData["区分1コード"];
var ary=db.select("skeComm","freeSql",{
sql:"select * from 区分2マスタ where 区分1コード=:fd区分1 order by 区分2コード",
fd区分1:fd区分1,
}).map({
value:"区分2コード",
option:"区分2名称",
}).getArray();
ary.unshift({
value:"",
option:"",
});
return ary;
}
区分1が操作されたら、区分1の選択値を条件として、区分2マスタから配列を取得して、区分2コンボのリストに設定します。
fd区分1の入力枠操作
function(touchFormData){
var fd区分1=touchFormData.fd区分1;
var ary=db.select("skeComm","freeSql",{
sql:"select * from 区分2マスタ where 区分1コード=:fd区分1 order by 区分2コード",
fd区分1:fd区分1,
}).map({
value:"区分2コード",
option:"区分2名称",
}).getArray();
ary.unshift({
value:"",
option:"",
});
return new Result()
.runat("#TEST_inputDialog #fd区分2")
.remove("option")
.append("<option value={value}>{option}</option>")
.withdata(ary);
}
効果
新規の場合、区分1コンボのリストは値があります。
区分1コンボを選択したら、区分2コンボのリストはそれに合わせて内容が設定されます。
保存後のデータを編集モードで開く場合、区分1区分2のリスト内容をと選択値は正しく設定されます。
まとめ
今回の記事のサンプルには、以下のアドオンを利用しました。
- ソースのアドオン
- 入力枠操作のアドオン