プライマリ・コンテンツに移動

Oracle® Application Expressアプリケーション・ビルダー・ユーザーズ・ガイド リリース5.1 E83810-03 |
| 目次 | 索引

前 | 次 |

# 13.1 ページ・レベル・アイテムの理解

アイテムは、HTMLフォームの一部です。アイテムは、テキスト・フィールド、テキスト領域、パスワード、選択リスト、チェック・ボックスなどを示します。アイテム属性は、ページ上のアイテムの表示に影響します。たとえば、これらの属性は、ラベルの表示位置、アイテムの大きさおよびアイテムの表示位置(前のアイテムの横または下)に影響します。

トピック:

- ページ・アイテムとアプリケーション・アイテムの違いについて
- アイテムのネーミング規則について
- アイテム値の参照
- JavaScriptを使用したアイテムの参照
- 複数選択リスト・アイテムでの操作

関連項目:

ページ・デザイナでのページ・レベル・アイテムの管理およびレガシー・コンポーネント・ビューでのページ・レベル・アイテムの管理

## 13.1.1 ページ・アイテムとアプリケーション・アイテムの違いについて

アイテムには、ページ・アイテムとアプリケーション・アイテムの2つのタイプが存在します。ページ・アイテムはページ上に配置され、「表示のみ」、「ラベル」、「ラベル・テンプレート」などの関連付けられたユーザー・インタフェースのプロパティを持ちます。ページ・レベル・アイテムの例としてはチェック・ボックス、日付ピッカー、テキストとしての表示、「ファイル参照」フィールド、「ポップアップLOV」、「選択リスト」、または「テキスト領域」などがあります。アプリケーション・アイテムはページに関連付けられないため、ユーザー・インタフェースのプロパティを持ちません。アプリケーション・アイテムは、グローバル変数として使用できます。

関連項目:

アプリケーション・レベル・アイテムの管理

## 13.1.2 アイテムのネーミング規則について

アイテム名を指定する場合は、次の規則に注意してください。規則は次のとおりです。

- アプリケーション内で一意である必要があります。

- 引用符を含めることはできません。

- 先頭は文字または数字である必要があります。その後は、文字、数字またはアンダースコア文字を使用できます。

- 大/小文字が区別されません。

- 30文字以内にする必要があります。30文字を超えるアイテムは、バインド変数構文を使用して参照できません。バインド変数構文を使用したセッション・ステートの参照を参照してください。

- 基本ASCIIキャラクタ・セット以外の文字を含めることはできません。

アイテム名を指定する場合は、ページ番号を含めることをお薦めします。デフォルトでは、ウィザードによってページ・アイテム名の先頭に`P``<page no>``_``<item name>`が付けられます(たとえば、`P1_NAME`)。

## 13.1.3 アイテム値の参照

リージョン、計算、プロセス、検証およびブランチのセッション・ステートに格納されたアイテム値を参照できます。表13-1に、アイテム値を参照するためにサポートされている構文を示します。

表13-1アイテム値を参照するための構文

データ型 | 構文 | 説明
--- | --- | ---
SQL | `:MY_ITEM` | 名前が30バイト以下のアイテム用の標準のバインド変数構文。この構文は、SQL問合せおよびPL/SQLコード内の参照用に使用します。
PL/SQL | `V('MY_ITEM')` | `V`ファンクションを使用してアイテム値を参照するPL/SQL構文。この構文は、パッケージまたはストアド・プロシージャやファンクションのPL/SQLコードで使用します。 この構文をSQL文で使用しないでください。使用すると、パフォーマンスの問題が発生する場合があります。
PL/SQL | `NV('MY_NUMERIC_ITEM')` | `NV`ファンクションを使用して数値アイテム値を参照する標準のPL/SQL構文。この構文は、パッケージまたはストアド・プロシージャやファンクションのPL/SQLコードで使用します。 この構文をSQL文で使用しないでください。使用すると、パフォーマンスの問題が発生する場合があります。
静的テキスト(完全置換) | `&MY_ITEM.` | 静的テキスト。完全置換です。 注意: 正確な置換構文をSQLまたはPL/SQLコードで使用しないでください。使用すると、SQLインジェクションに対して脆弱になる可能性があります。

次のいずれかの方法を使用すると、アプリケーションのアイテム値を設定できます。

- ページ・レベル・アイテムの場合、ソース属性を使用してアイテム値を設定します。

  ページから、アイテム名を選択してページ・アイテムの編集ページを表示します。「ソース」までスクロールして、該当するフィールドを編集します。

  次の構文を使用して、PL/SQLまたはプロセスに基づく任意のリージョンのアイテム値を設定することもできます。

      BEGIN
       :MY_ITEM :=  'new value';
      END;

- `f?p`構文を使用してURL参照の値を渡します。次に例を示します。

      f?p=100:101:10636547268728380919::NO::MY_ITEM:ABC

- 計算を使用して値を設定します。計算は、アイテム値を設定するように設計されています。次に例を示します。

      TO_CHAR(SYSDATE,'Day DD Month, YYYY');

- PL/SQL APIを使用して、PL/SQLコンテキストにアイテム値を設定します。次に例を示します。

      APEX_UTIL.SET_SESSION_STATE('MY_ITEM',SYSDATE);
      F

関連項目:

- セッション・ステートのクリア

- クロスサイト・スクリプティング保護の理解

- セッション・ステート値の管理

## 13.1.4 JavaScriptを使用したアイテムの参照

アイテムを参照する場合、最も有効な方法は、IDで参照する方法です。WebブラウザでOracle Application ExpressページのHTMLソースを表示すると、すべてのアイテムにID属性が含まれていることがわかります。このIDは、アイテム・ラベルではなく、アイテム名に対応します。たとえば、`P1_FIRST_NAME`という名前で、`First Name`というラベルを持つアイテムを作成した場合、IDは`P1_FIRST_NAME`になります。

JavaScriptファンクション`$v('P1_FIRST_NAME')`と`$s('P1_FIRST_NAME', 'Joe');`を使用して、アイテム属性と値を取得および設定できます。次に例を示します。

    function showFirstName(){
      alert('First Name is ' +$v('P1_FIRST_NAME'))
    };
    function setFirstName(pFirstName){
      $s('P1_FIRST_NAME', pFirstName);
    };

これらのファンクションは、他のJavaScriptファンクションにより、またはJavaScriptコードの実行動的アクションを使用してコールできます。

関連項目:

『Oracle Application Express APIリファレンス』のAPEX_JAVASCRIPTに関する説明

## 13.1.5 複数選択リスト・アイテムでの操作

この項では、複数の選択リスト・アイテムから返された値を処理する方法について説明します。

- 複数の選択リスト・アイテムから返された値の処理について

- APEX_UTIL.STRING_TO_TABLEを使用した選択値の変換

- シャトル・アイテムの作成

トピック:

- 複数の選択リスト・アイテムから返された値の処理について
- APEX_UTIL.STRING_TO_TABLEを使用した選択値の変換
- シャトル・アイテムの作成

### 13.1.5.1 複数の選択リスト・アイテムから返された値の処理について

複数選択アイテムは複数選択リストのフォーム要素としてレンダリングされ、複数選択リストまたはシャトル・アイテム・タイプのいずれかになります。送信されると、選択した値は単一のコロンで区切られた文字列に戻されます。このフォーマットの値は3通りの方法で処理できます。

- `INSTR`ファンクションの使用

- `APEX_UTIL.STRING_TO_TABLE`ファンクションの使用

- シャトルの作成

### 13.1.5.2 APEX_UTIL.STRING_TO_TABLEを使用した選択値の変換

たとえば、部門の複数選択リストから選択した部門によって限定されている`EMP`表および`DEPT`表に関するレポートがあるとします。まず、次の問合せを使用して、複数選択アイテム「P1_DEPTNO」を作成します。

    SELECT dname, deptno
    FROM dept

次に、次のように入力して、選択した部門内の従業員のみを戻します。

    SELECT ename, job, sal, comm, dname
    FROM emp e, dept d
    WHERE d.deptno = e.deptno
    AND instr(':'||:P1_DEPTNO||':',':'||e.deptno||':') > 0

次に、複数選択アイテム「P1_DEPTNO」で選択した値をプログラムで処理するとします。このタスクを行うには、`APEX_UTIL.STRING_TO_TABLE`ファンクションを使用して、コロンで区切られた文字列をPL/SQL配列に変換します。次の例では、選択した部門を問合せの日付が含まれている監査表に挿入する方法を示します。

    DECLARE
        l_selected APEX_APPLICATION_GLOBAL.VC_ARR2;
    BEGIN
      --
      -- Convert the colon separated string of values into
      -- a PL/SQL array

      l_selected := APEX_UTIL.STRING_TO_TABLE(:P1_DEPTNO);

      --
      -- Loop over array to insert department numbers and sysdate
      --

      FOR i IN 1..l_selected.count
      LOOP
        INSERT INTO report_audit_table (report_date, selected_department)
            VALUES (sysdate, l_selected(i));
      END LOOP;
    END;

関連項目:

Oracle Application Express APIリファレンスの「STRING_TO_TABLEファンクション」

### 13.1.5.3 シャトル・アイテムの作成

この項では、シャトル・アイテム・タイプを作成する方法について説明します。まず、`DEPT`表に、特定の部門に割り当てられている従業員を示すレポートおよびフォームを作成します。次に、従業員を部門に割り当てやすくするために従業員をアルファベット順に一覧表示するシャトル・アイテムを作成します。

トピック:

- 表でのレポートおよびフォームの作成
- ページ・デザイナのフォーム・ページでのシャトル・アイテムの作成
- コンポーネント・ビューのフォーム・ページでのシャトル・アイテムの作成

#### 13.1.5.3.1 表でのレポートおよびフォームの作成

この項の手順では、アプリケーションがすでに作成されていると想定しています。

表でレポートおよびフォームを作成するには、次のステップを実行します。

1. ワークスペースのホームページで、「アプリケーション・ビルダー」アイコンをクリックします。
2. アプリケーションを選択します。
3. 「ページの作成」をクリックします。
4. 「ページの作成」で、次のステップを実行します。

   1. ユーザー・インタフェース - 「デスクトップ」を選択します。

   2. ページ・タイプの選択: 「フォーム」を選択します。

   3. 「次へ」をクリックします。

5. 「表のフォーム付きレポート」を選択して「次へ」をクリックします。
6. 「レポート・ページ属性」で、次のステップを実行します。
   1. 必要な属性を編集します。
      オプションの詳細は、フィールドレベル・ヘルプを参照してください。
   2. 「次へ」をクリックします。
7. 「ナビゲーション・メニュー」で、ナビゲーション・プリファレンスを選択して「次へ」をクリックします。
8. 「データ・ソース」で、次のステップを実行します。
   1. 表/ビューの所有者 - レポートを作成している表の所有者を選択します。
   2. 表/ビューの名前 - フォームの基になる表またはビューを選択します。
   3. レポートに表示される列の選択(必須の値): レポートに含める1つ以上の列を選択します。
   4. 「次へ」をクリックします。
9. 「フォーム・ページの定義」で、次のステップを実行します。

   1. 主キー - 「データベースで管理(ROWID)」を選択して、フォームがROWID擬似列を使用して更新および削除する行を識別するようにします。ソース表の主キー列を使用するには、「主キー列の選択」を選択します。

   2. フォームに含まれる列の選択(必須の値) - フォームに含める1つ以上の列を選択します。

   3. 「作成」をクリックします。

#### 13.1.5.3.2 ページ・デザイナのフォーム・ページでのシャトル・アイテムの作成

フォーム・ページでシャトルを作成するには、次のステップを実行します。

1. ページ・デザイナでフォーム・ページを表示します。
2. 「ページ・レンダリング」で、フォームを含むリージョンをクリックして「ページ・アイテムの作成」を選択します。
   次に、「プロパティ・エディタ - ページ・アイテム」に属性を入力します。
3. 「指定」で、次の項目を指定します。

   1. 名前 - このアイテムの名前(たとえば`PX`_`EMP_LIST`)を入力します。

      ヒント:

      この例では、アイテム名(`P2_EMP_LIST`など)の`PX`はアイテムが存在するページを示しています。

   2. タイプ - 「シャトル」を選択します。

4. 「LOV」で、次のステップを実行します。

   1. タイプ - 「SQL問合せ」を選択します。

   2. SQL文 - このLOVに移入するためのSQL問合せ定義を入力します。 次に例を示します。:

          SELECT ename, empno FROM emp ORDER BY 1

5. 「ソース」で、次のようにします。

   - タイプ - 「SQL問合せ(コロン区切りの値を返す)」を選択します

   - アイテム・ソース値 - このアイテム値のソースとして使用される1行以上の行を返すSQL問合せ文を入力します。結果に複数の行が含まれる場合、各行の値が、コロンで区切られた1つの値に形成されます。次に例を示します。

         SELECT empno FROM emp WHERE deptno = :P8_DEPTNO ORDER BY ename

6. 「保存」をクリックします。
7. 保存と実行をクリックして、ページを表示します。

#### 13.1.5.3.3 コンポーネント・ビューのフォーム・ページでのシャトル・アイテムの作成

コンポーネント・ビューのフォーム・ページでシャトルを作成するには、次のステップを実行します。

1. フォーム・ページに移動して、コンポーネント・ビューで表示します。レガシー・コンポーネント・ビューでのページの表示を参照してください。
2. 「アイテム」で、「作成」をクリックします。
3. 「アイテム・タイプ」で、「シャトル」を選択して「次へ」をクリックします。
4. 「アイテム名」で、`PX`_`EMP_LIST`を入力して「次へ」をクリックします。

   ヒント:

   この例では、アイテム名(`P2_EMP_LIST`など)の`PX`はアイテムが存在するページを示しています。

5. 「アイテム属性」で、デフォルト値を受け入れ、「次へ」をクリックします。
6. 「設定」で、デフォルト値を受け入れ、「次へ」をクリックします。
7. 「LOV」で、次のようにします。

   - LOV問合せ: 次のように入力します。

         SELECT ename, empno FROM emp ORDER BY 1

   - 「次へ」をクリックします。

8. 「LOV」で、次のようにします。

   - ソース・タイプ - 「SQL問合せ(コロン区切りの値を返す)」を選択します

   - アイテム・ソース値: 次のように入力します。

         SELECT empno FROM emp WHERE deptno = :P8_DEPTNO ORDER BY ename

   - 「アイテムの作成」をクリックします。

9. 「実行」をクリックして、ページを表示します。シャトル・アイテムが次の図のように表示されます。