16.11.3 動的リストの作成

動的リストは、SQL問合せまたは実行時に実行されるPL/SQLファンクションに基づいています。

16.11.3.1 動的リストの作成について

動的リストの作成に関連するステップについて説明します。

動的リストにより、SQL問合せまたはSQL問合せを戻すPL/SQLファンクションからのアイテムに基づくリスト・コンポーネントを作成できます。これらの動的リストは、テーマのリスト・テンプレートを使用してページにレンダリングできます。

動的リストの作成プロセスでは、次のステップを実行します。

  • ステップ1: 次のいずれかの方法で動的リストを作成します。

    • リストの作成ウィザードを実行して、「動的」リスト・タイプを選択します。

    • リストのコピー・ウィザードを実行して既存の動的リストをコピーします。

  • ステップ2: リスト問合せを定義します。

    • 問合せソース・タイプを選択します。オプションは次のとおりです。

      • SQL問合せ

      • SQL問合せを戻すファンクション

    • SQL問合せを入力します。

  • ステップ3: リスト・リージョンを作成して、ページにリストを追加します。

16.11.3.2 動的リスト構文の理解

動的リスト構文について説明します。

SQL問合せまたはSQL問合せを戻すファンクションを使用して、動的リストを作成します。Oracle APEXは、次の表に示すようにSELECT構文のリストの列位置を使用して問合せの結果を解釈します。列の別名は無視されるため、問合せで返される情報を最も適切に示す名前を選択します。SQL文では、SELECT構文のリストに2つ以上の列を含める必要がありますが、必要に応じて最大17列を返すことができます。すべてのオプション列は、NULL値をプレースホルダとして受け入れ、後の列位置に対してNULL以外の値を指定できます。たとえば、リスト・リージョンの「外観」の「リスト・テンプレート」属性にバッジ・リストを選択した場合、ユーザー属性1に対応する列8の値によって、バッジ内に表示されるテキストが決まります。

ヒント:

「リスト」リージョンのドキュメントでは、異なる「外観」テンプレート・オプションで使用されるユーザー属性値が説明されています。
用途 データ型 必須 ノート

1

レベル

NUMBER

Yes

階層リストの深さレベル。それ以外の場合はNULLを使用します

2

Label

VARCHAR2

Yes

リスト・エントリに表示するテキスト

3

ターゲットURL

VARCHAR2

No

リスト・エントリの選択時にブランチ先となるターゲットURL

4

現在かどうか

VARCHAR2

No

リスト・エントリの動作を制御します。有効な値は'YES'、'NO'およびNULLです

5

アイコン名

VARCHAR2

No

リスト・エントリに表示されるアイコンの名前

6

イメージ属性

VARCHAR2

No

幅や高さなどのイメージの属性

7

イメージのALTテキスト

VARCHAR2

No

ユーザーがイメージ上でクリックする必要のあるテンプレートでアクセシビリティに必要なイメージALTタグの値。

8

ユーザー属性1

VARCHAR2

No

なし

9

ユーザー属性2

VARCHAR2

No

なし

10

ユーザー属性3

VARCHAR2

No

なし

11

ユーザー属性4

VARCHAR2

No

なし

12

ユーザー属性5

VARCHAR2

No

なし

13

ユーザー属性6

VARCHAR2

No

なし

14

ユーザー属性7

VARCHAR2

No

なし

15

ユーザー属性8

VARCHAR2

No

なし

16

ユーザー属性9

VARCHAR2

No

なし

17

ユーザー属性10

VARCHAR2

No

なし

たとえば、従業員名の動的リストに対する単純な問合せは次のようになります。

select null  c1_level,
       ename c2_name_for_label
from emp
order by ename

リスト内の各従業員名の横に個人アイコンを含めるには、次のように、間の列にNULLを選択し、5列目の位置でfa-userのようなアイコンの名前を返します。

select null      c1_level,
       ename     c2_name_for_label,
       null      c3_target_url,
       null      c4_is_current,
       'fa-user' c5_icon_name
from emp
order by ename

リスト・エントリをページ10にリンクするには、P10_EMPNOページ・アイテムのEMPNOの値を渡して、次のように3番目の列にターゲットURLの値を指定するように問合せを調整します。

select null      c1_level,
       ename     c2_name_for_label,
       apex_page.get_url(p_page   => 10,
                         p_items  => 'P10_EMPNO',
                         p_values => EMPNO) c3_target_url,
       null      c4_is_current,
       'fa-user' c5_icon_name
from emp
order by ename

次の問合せは、ユーザー属性の値を返します。前の問合せを拡張し、ユーザー属性1の列8のスロットに各従業員の給与(sal)を返します。「リスト」リージョンの「外観」「リスト・テンプレート」オプション、バッジ・リストでは、このユーザー属性1の値をバッジに表示するテキストとして使用します。

select null      c1_level,
       ename     c2_name_for_label,
       apex_page.get_url(p_page   => 10,
                         p_items  => 'P10_EMPNO',
                         p_values => EMPNO) c3_target_url,
       null      c4_is_current,
       'fa-user' c5_icon_name,
       null      c6_icon_attrs,
       null      c7_icon_alt_text,
       sal       c8_user_attr1_badge_text
from emp
order by ename
階層リストを作成するには、階層の深さレベルを示す最初の列にnull以外の値を返します。この例では、ツリー上部にマネージャがいない従業員で始まる従業員の階層リストを返します。
select level                                     c1_level,
       ename                                     c2_name_for_label
       apex_page.get_url(p_page   => 10,
                         p_items  => 'P10_EMPNO',
                         p_values => EMPNO)      c3_target_url,
       null                                      c4_is_current,
       'fa-user'                                 c5_icon_name
from emp
connect by prior empno = mgr
start with mgr is null

ファンクションによって定義されたSQL問合せを戻す必要がある場合は、同じルールが適用されます。次の例に示すように、PL/SQLの複数行の文字列リテラル構文q'[ ... ]'を使用すると、複数の行にまたがる問合せテキストをより簡単に返すことができます。正しくフォーマットされたSQL文を返す構文が許可されます。

return q'[
   select null      c1_level,
          ename     c2_name_for_label,
          apex_page.get_url(p_page   => 10,
                            p_items  => 'P10_EMPNO',
                            p_values => EMPNO) c3_target_url,
          null      c4_is_current,
          'fa-user' c5_icon_name
   from emp
   order by ename
]';

16.11.3.3 動的リストを最初から作成

リストの作成ウィザードを実行して動的リストを最初から作成します。

動的リストを作成するには:

  1. リストの作成/編集ウィザードへのアクセス
    1. ワークスペースのホームページで、「アプリケーション・ビルダー」アイコンをクリックします。
    2. アプリケーションを選択します。
    3. アプリケーションのホームページで、「共有コンポーネント」をクリックします。
    4. 「ナビゲーション」で、「リスト」をクリックします。
    5. 「作成」をクリックします。
    リストの作成ウィザードが表示されます。
  2. 「名前およびタイプ」で、次のステップを実行します。
    1. 名前: 数字または英数字のリスト名を入力します。
    2. タイプ: 「動的」を選択します。
    3. 「次」をクリックします。
  3. 「問合せまたは静的値」で、次のステップを実行します。
    1. 問合せソース・タイプ: 「SQL問合せ」または「SQL問合せを戻すファンクション」を選択します。
    2. 問合せ: SQL問合せまたはSQL問合せを戻すファンクションを入力します。SQL問合せの例を表示するには、「例」リージョンを展開します。

      問合せの作成: 「問合せの作成」をクリックし、ウィザードを使用して選択した表またはビューで問合せを作成します。画面に表示されるステップに従います。

    3. 「次」をクリックします。
  4. 「確認」で、次のようにします。
    1. リスト・リージョンを作成しますか。: リスト・リージョンを作成するかどうかを選択します。オプションは次のとおりです。
      • リスト・リージョンを作成しない

      • カレント・ページにリスト・リージョンを作成する

    2. リージョン位置: 新しいリージョンを作成する場合は、リージョン位置を選択します。
    3. リージョン・テンプレート: 新しいリージョンを作成する場合は、リージョン・テンプレートを選択します。
    4. 「作成」をクリックします。