ボタン名と表示条件(表示制御)
最終更新日: 2021年1月29日
R8 | R9
ボタン名に式を適用した例を図1,図2に示します。ログオンアカウントによってボタン名が変わります。
各画面に用意された「ボタン表示」の「ボタン名」は固定の名称だけでなく式が設定できます。
ボタン名をそのまま指定します。
式の計算結果の戻り値の型が文字列型となるようにします。
式の詳細は「計算式」をお読み下さい。
「ボタン表示条件」を設定すると、条件に合致した場合にのみ、当該ボタンが画面に表示されるようになります。図4は "日付が本日以降の場合" という条件を指定した例です。
式の戻り値は真偽値としてください。
項目の表記ルールは自動計算式と同じです。モデル参照項目の場合、ID部を取得したい場合は
次のコードはモデル参照項目 DONEFLAG の ID が 0 かどうかを判定するものです。
図4の例では、新規登録画面を開いた時に条件に合致しなければ、登録ボタンは非表示となります。その後、条件となる日付項目を入力しても、ボタンは非表示のままです。
この動作を修正し、条件となる項目の値に連動してボタンの表示・非表示を制御させる場合は、図5に示すように(条件となっている項目について)「値変更時に画面を再描画する」設定を有効にします。
ボタン名の変更例
ボタン名の定義方法
固定名称を指定する場合
スケジュール登録
式を用いる場合
IF(EXACT(USERNAME(),"admin"), "管理者登録","一般登録")
ボタン表示条件
DATE(${sdate})>=DATE(TODAY())
true
またはfalse
が戻るようにします。
#id
を付与してください。
${DONEFLAG#id}==0
条件となる項目の値に連動してボタンの表示・非表示を制御する
条件式の記述例
項目 item の値が 1 のとき、登録ボタンを表示する
${item}==1
項目 item の値が "東京" のとき、登録ボタンを表示する
EXACT(${item}, "東京")
EXACT関数は文字列の比較を行います。
モデル schedule について、権限 "perm_button" を持っている利用者が操作する場合にボタンを表示する
HASMODELPERMISSION("perm_button", "schedule")
HASMODELPERMISSION関数は、利用者が指定した権限を有しているかどうかを返します。
プリンシパル "publicuser" を持っている利用者が操作する場合にボタンを表示する
HASPRINCIPAL("publicuser")
管理者のみボタンを表示する
HASPRINCIPAL("all")
allは管理者権限を意味します。
true
を返します。そのため、管理者権限のみボタンを表示する、という場合、カッコ内に与える引数(プリンシパル名)は実際にはなんでもよい、ということになります。しかし他のプリンシパルと区別するため、上記のように all と指定することを推奨します。
検索条件の値を用いる8.1.1
ボタン表示制御の式に特別表記 ${cond.項目名}
を指定することができます。
「検索の実行」ボタンを押すことで検索条件部の値を用いて判断します。
例えば一覧帳票を出力する際、検索結果により帳票出力ボタンの制御するために、次のような式を記述することができます。
検索項目 item1 の値が "A" の場合:
EXACT(${cond.item1},"A")
検索項目 status がモデル参照項目で、そのID部の値が 1 の場合:
${cond.status#id}==1
検索項目 num が整数型項目で範囲検索が有効となっており、その値が 1 の場合:
${cond.num1jshparam}==1
数値および日付型で範囲検索が有効の場合、開始の項目には接尾語 "1jshparam" を、終了の項目には "2jshparam" を付与してください。
制約
- 集合関数、モデル参照関数を使うことはできません。
外部キー関係での式の扱い
外部キー関係では、親モデルの画面に複数の子モデルを一覧表示することができます。
この場合のボタン表示制御は次のルールになります。
- 条件式に含めることができる項目は親モデルになります。
- ただし、親からみた子の一覧表示として、"子モデル_lp" という表記が利用できます。
例:「外部キー連携>表示条件」で、親モデルの項目 item1 の値が 100 より大きい場合に子モデルの新規登録ボタンを表示する。
${item1} > 100
例:この親モデルに紐づく子モデルの数が 3 未満のとき、子モデルの登録ボタンを表示する。
COUNT(${support_lp}) < 3
COUNT関数は、子レコードの総数を返します。
ボタン名を式で制御する例も示します。子モデルの数によってボタン名が変わります。
IF(COUNT(${support_lp})==2,
"あと一つ",
IF(COUNT(${support_lp})==1,
"あと二つ",
"あと三つ"
)
)
制約
この指定は子モデル一覧更新画面の「新規」ボタンには反映されません。
(一覧更新画面の「新規」ボタンの制御には未対応です。)
一覧表示(行)の扱い
親モデル customer と子モデル support が外部キーで連携している例で説明します。
親モデル customer の一覧表示画面で、各行に用意する独自ボタンに表示条件として、自身に紐づく子モデル (support) の COUNT 関数を用いることを想定します。図8の条件式 COUNT(${support_lp})>0
は機能しません。
回避策
親モデル customer の項目に COUNT(${support_lp})
を保持させます。これを supportcount 項目として用意した場合、次のように記述してください。${supportcount}>0
親-子-孫の扱い
親モデル parent、子モデル child、孫モデル gchild がそれぞれ外部キーで連携している例で説明します。
子モデル child の項目 citem1 に、自身に紐づくモデル gchild の数をかぞえる式COUNT(${gchild_lp})
を設定したとします。ここで citem1 をデータベースに保存しない設定とします。
親モデル parent の詳細表示画面に子モデル child を表示させることができますが、child の項目 citem1 の値は計算されません。 これは親モデルの詳細表示では、子モデルの値を取得しますが、孫モデルの値までは取得しないということを示します。パフォーマンス上の問題を回避するため、標準では孫以降の値は取得しません。
回避策
- 子モデルの項目 citem1 をデータベースに保存する、とします。
- 式に代わって、スクリプトで citem1 の値を設定します。スクリプトでは孫モデル gchild の件数を EntityService を使って取得するようにします。