動的アクションのクライアント側の条件が動かない、との相談を受けました。少々確認が必要だったので、その作業を記録します。
クライアント側の条件のタイプとしてアイテム = 値を指定したときに、アイテムが選択リスト(LOV)だった場合、値としては画面に表示される値を指定するのか、ページ・アイテムとして保存される値を指定するのか?という点を確認しました。
結果としては、ページ・アイテムとして保存される値です。LOVの設定としては表示値ではなく戻り値の方です。
確認のためにアプリケーションを作りました。
空のアプリケーション(名前をDA Client Side Conditionとしました)を作成し、ホーム・ページに静的コンテンツのリージョン(名前をCountry and Statesとしました)を追加します。
国を選択するページ・アイテムをP1_COUNTRYとして作成し、タイプを選択リストにします。ラベルにはCountryを設定します。
LOVのタイプを静的値、追加値の表示はOFF、NULL表示値は- Choose Country -を指定します。
LOVの静的値として以下の3つを設定しました。
- 表示値: United States、戻り値: US
- 表示値: Japan、戻り値: JP
- 表示値: Romania、戻り値: RO
一般的には、国情報はISO 3166に基づいたLOVを、共有コンポーネントにしている場合が多いと思います。
次に、州を入力するページ・アイテムP1_STATESを作成します。これは動的アクションにて表示、非表示にするためだけに使用するので、州の一覧を選択リストにするといった凝ったことは行いません。ラベルはStatesと設定します。
国としてUnited Statesが選択されたときにページ・アイテムP1_STATESを表示し、そうで無い時は表示しない動的アクションを定義します。
名前をActivate Statesとし、タイミングはイベントが変更、選択タイプはアイテム、アイテムはP1_COUNTRYとします(P1_COUNTRYにたいして動的アクションの作成を行うと、デフォルトでこのタイミングになるはずです)。
クライアント側の条件はタイプがアイテム = 値、アイテムがP1_COUNTRY、値はUSとします。
Trueアクションとして、識別のアクションが表示、影響を受ける要素として、選択タイプをアイテム、アイテムをP1_STATESとして、アクションを作成します。
作成したTrueアクションにたいして、反対のアクションの作成を実行すると、ページ・アイテムP1_STATESを非表示にするFalseアクションが作成されます。
以上で動作を確認するためのアプリケーションが作成できました。アプリケーションを実行すると、最初のGIF動画の動作が確認できると思います。
作成したアプリケーションのエクスポートを以下に置きました。
https://github.com/ujnak/apexapps/blob/master/exports/daclientsidecondition.sql
Oracle APEXのアプリケーション開発の一助になれば幸いです。
完