2021年2月18日木曜日

動的アクションのクライアント側の条件を定義する

 動的アクションのクライアント側の条件が動かない、との相談を受けました。少々確認が必要だったので、その作業を記録します。

クライアント側の条件のタイプとしてアイテム = 値を指定したときに、アイテムが選択リスト(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のアプリケーション開発の一助になれば幸いです。

完