プライマリ・コンテンツに移動
Oracle® Application Expressアプリケーション・ビルダー・ユーザーズ・ガイド
リリース18.1
E98591-01
目次へ移動
目次
索引へ移動
索引

前
次

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

アイテムは、チェック・ボックス、日付ピッカー、テキストとしての表示、ファイル参照フィールド、ポップアップLOV、選択リスト、テキスト領域などのHTMLフォームの一部です。

アイテムを定義する場合、開発者は、定義されたネーミング規則と、セッション・ステートに格納されたアイテム値を参照する場合の特定のルールに従う必要があります。

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

ページ・アイテムはページ上に配置され、関連付けられたユーザー・インタフェースのプロパティを持ち、アプリケーション・アイテムはページに関連付けられません。

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

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

アイテム名を作成する場合、開発者は非常に具体的なアイテムのネーミング規則に従う必要があります。

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

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

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

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

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

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

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

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

14.1.1.3 アイテム値の参照

リージョン、計算、プロセス、検証およびブランチのセッション・ステートに格納されたアイテム値を参照できます。

表14-2に、アイテム値を参照するためにサポートされている構文を示します。

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

データ型 構文 説明

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

14.1.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に関する説明

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

数の選択リスト・アイテムから返された値を処理する方法について学習します。

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

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

  • INSTRファンクションの使用

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

  • シャトルの作成

14.1.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ファンクション」