前々回は @DbColmun、前回は @DbLookup の使い方をまとめました。使用したのはダイアログリストフィールドで、入力した部に従属する課だけを検索して表示する事例を紹介しました。ただ、このままの状態では、選択肢が正常に表示されない現象が発生します。その原因と対策について整理します。
問題となる現象
まずは、症状の確認です。
部を選択して課を選択しようとすると正しく部に従属したかが表示されます。そこで、いったん選択画面をキャンセルして、部を変更します。再度、課を選択しようとすると、選択肢が更新されず、変更前の選択肢がそのまま表示されます。
課を選択するフィールドには次の通り式を記述しました。"NoCache" を指定して毎回最新情報を取得する設定になっているのになぜでしょうか?
@DbLookup("Notes":"NoCache"; ""; "vFunc"; Dept; 2) |
原因と対策
この症状の原因は @DbLookup 式が評価(実行される)タイミングにあります。
ダイアログリストフィールドの[制御]タブには「キーワードの変更時にフィールドを更新」と「文書の更新時に選択肢を更新」の2つのオプションがあります。似たような名称ですが、それぞれ役割があります。
まず、「キーワードの変更時にフィールドを更新」は、ダイアログリストの選択肢を変更したら画面を更新する設定になります。画面を更新すると計算結果フィールドの式や非表示式が評価され再計算されることになります。
「文書の更新時に選択肢を更新」は、画面を更新したタイミングで選択肢を更新する動作となり、「式で選択肢を設定」している場合の式を再評価(再実行)します。
今回の事例で言うと、部のフィールドでは「キーワードの変更時にフィールドを更新」、課のフィールドでは「文書の更新時に選択肢を更新」を指定します。
こうすることで、部を再選択すると画面が更新され、その更新により課の選択肢の式が再評価され、選択肢が再取得されるという流れになります。
まとめ
今回はダイアログフィールド利用の注意点として、「キーワードの変更時にフィールドを更新」と「文書の更新時に選択肢を更新」の2つのオプションの機能について紹介しました。設定しなくても初回は正常に動作してしまうので、発見しにくく、バグになりやすいので注意しましょう。
ところで、このオプションの名称 ”フィールドを更新” と言ったり "文書の更新" と言ったり用語が安定していませんよね。そして、”ダイアログリスト” フィールドは以前のバージョンでは、”キーワード” フィールドと呼んでいました。その名残がオプション名称に残っていますね。
このあたりを統一させてくれるだけでももう少しわかりやすくなると思うんですけどね...
0 件のコメント:
コメントを投稿