ヘッダーをスキップ
Oracle® Application Expressアプリケーション・ビルダー・ユーザーズ・ガイド
リリース3.2
B53794-04
  目次へ移動
目次
索引へ移動
索引

前
 
次
 

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

インタラクティブな、データに応じて動作するWebアプリケーションを構築するには、セッション・ステート値にアクセスして管理する機能が重要です。Oracle Application Expressでは、セッション・ステートはページごとに自動的に管理され、静的HTML、またはプロセスや検証などのロジック・コントロールによって簡単に参照できます。

この項に含まれる内容は次のとおりです。

セッション・ステートの参照

リージョン、計算、プロセス、検証およびブランチのセッション・ステートに格納されているアイテム値を参照できます。アイテムはフィールド、テキスト領域、パスワード、選択リスト、チェック・ボックスなどです。表3-3に、アイテム値を参照するためにサポートされている構文を示します。

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

タイプ 構文 説明

SQL

:MY_ITEM

名前が30文字以下のアイテム用の標準のバインド変数構文を使用します。この構文は、SQL問合せおよびPL/SQL内の参照用に使用します。

PL/SQL

V('MY_ITEM')

Vファンクションを使用してアイテム値を参照するPL/SQL構文を使用します。

関連項目: Oracle Application Express APIリファレンス

PL/SQL

NV('MY_NUMERIC_ITEM')

NVファンクションを使用して数値アイテム値を参照する標準のPL/SQL構文を使用します。

関連項目: Oracle Application Express APIリファレンス

静的テキスト(完全置換)

&MY_ITEM.

静的テキストまたは完全置換の場合は、次のように&ITEM_NAMEにピリオド(.)を続けた表記を使用します。

&MY_ITEM.


セッション・ステートの設定

次のいずれかの方法を使用して、アプリケーションのアイテム値およびセッション・ステートを設定します。

フォーム送信の例

ページがユーザーによって送信されると、Application Expressエンジンは、フィールド(アイテム)に入力された値をセッション・ステートに自動的に格納します。たとえば、2つのページを持つアプリケーションが存在すると想定します。このアプリケーションの最初のページには、ユーザーが電話番号を入力できるフォームが含まれています。このフォームは、P2_PhoneNoという名前のアイテムを作成して定義しています。2番目のページには、ユーザーがフォームに入力する情報を表示する必要があります。

このページが送信されると、Oracle Application Expressによって、電話番号フィールドに入力された値が取得され、今後使用するためにその値が格納されます。ユーザーが入力した電話番号は、そのページのフィールドに関連付けられたアイテムを参照することで、セッション・ステートから取得できます。

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

アプリケーションの開発時に、特定のアイテム、ページ上のすべてのアイテム、アプリケーション内のすべてのページ、または現行のユーザー・セッション用にキャッシュされた値をクリアする必要がある場合があります。キャッシュされた値をクリアすると、その値がNULLにリセットされます。次のトピックでは、セッション・ステートをクリアする具体的な例について説明します。

この項に含まれる内容は次のとおりです。

アイテムごとのキャッシュのクリア

1つのアイテムのキャッシュをクリアすると、そのアイテムの値がNULLにリセットされます。たとえば、ページがレンダリング用に準備されるときに特定のアイテムの値を確実にNULLにしておく必要がある場合に、この方法を使用します。

次の例では、標準f?p構文を使用してアイテムのキャッシュをクリアします。この例では、アプリケーション100のページ5がコールされます。f?p構文のClearCache位置にMY_ITEMを指定すると、MY_ITEMの値がNULLにリセットされます。

f?p=100:5:&APP_SESSION.::NO:MY_ITEM

次の例では、アイテムTHE_EMPNOおよびTHE_DEPTNOの値がリセットされます。

f?p=100:5:&APP_SESSION.::NO:THE_EMPNO,THE_DEPTNO

ページごとのキャッシュのクリア

アプリケーション・アイテムをキャッシュすると、セッション・ステートを効率的に保持できます。ただし、ページ上のすべてのアイテムのキャッシュをクリアする必要がある場合もあります。たとえば、ユーザーが新しい注文を作成するリンクをクリックすると、ページ上のすべてのフィールドがクリアされるようにする必要があると想定します。ページ全体のキャッシュをクリアすることで、ページ上のすべてのアイテムの値をNULLに設定できます。

2つのページのセッション・キャッシュのクリアおよびページ区切りのリセット

この例では、2つのページのセッション・キャッシュがクリアされ、ページ区切りがリセットされます。

f?p=6000:6003:&APP_SESSION.::NO:RP,6004,6014 

この例では、次のようになります。

  • アプリケーション6000のページ6003が実行され、現行のセッションIDが使用されます。

  • デバッグ情報を表示しないように指示されます(NO)。

  • カレント・セッションのキャッシュに保持されたページ6004および6014のアイテムのすべての値がクリアされます。

  • ページ6003(リクエストされたページ)のリージョンのページ区切り(RP)がリセットされます。

ページのセッション・キャッシュのクリアおよびアイテム値の引渡し

この例では、更新フォームの実装方法を示します。既存の情報をクリアし、アイテムの値(通常、主キー)を設定します。

f?p=6000:6003:&APP_SESSION.::NO:6003:MY_ITEM:1234 

この例では、次のようになります。

  • アプリケーション6000のページ6003が実行され、現行のセッションIDが使用されます。

  • デバッグ情報を表示しないように指示されます(NO)。

  • カレント・セッションのキャッシュに保持されたページ6003のアイテムのすべての値がクリアされます。

  • MY_ITEMというアイテムのセッション・ステートの値を1234に設定します。

ページのセッション・キャッシュのクリアおよび複数のアイテムに対する値の引渡し

この例は、値が複数のアイテムに渡されること以外は、前述の例に類似しています。

f?p=6000:6004:&APP_SESSION.::NO:6003:MY_ITEM1,MY_ITEM2,MY_ITEM3:1234,,5678 

この例では、次のようになります。

  • アプリケーション6000のページ6004が実行され、現行のセッションIDが使用されます。

  • ページ6003のアイテムのカレント・セッションのキャッシュがクリアされます。

  • デバッグ情報を表示しないように指示されます(NO)。

  • MY_ITEM1の値が1234、MY_ITEM2の値がNULL(プレースホルダとして使用されたカンマによって示される)およびMY_ITEM3の値が5678に設定されます。

アプリケーション全体のキャッシュのクリア

アプリケーション・キャッシュは、f?p構文を使用し、キーワードAPPを使用してClear Cache引数を作成することでクリアできます。次に例を示します。

f?p=App:Page:Session::NO:APP

注意:

アプリケーション全体のキャッシュをリセットしても、アプリケーションは完全なリセット状態にはリストアされません。たとえば、アプリケーションに新しいインスタンス開始時の計算やプロセスが含まれている場合、Application Expressエンジンは、該当するアプリケーション・セッションが作成されたときに、これらの計算やプロセスを実行します。その後、キャッシュのクリア・リクエストを処理し、リクエストされたページを表示します。

(セッションIDの追跡にCookieが使用されていない場合に)セッションIDを指定せずにアプリケーションを完全にリセットするには、セッションIDを指定せずにURLを使用するか、または別のアプリケーションからAPEX_UTIL.CLEAR_APP_CACHEをコールして、そのアプリケーションをリクエストする必要があります。セッションIDがCookieを使用して追跡される場合、そのステートをリセットするためにログアウトする必要があります。


カレント・ユーザー・セッションのキャッシュのクリア

アプリケーション・キャッシュをクリアするもう1つの方法は、キーワードSESSIONを使用してClear Cache引数を作成することです。次に例を示します。

f?p=6000:6004:12507785108488427528::NO:SESSION

バインド変数構文について

バインド変数構文は、指定したアイテムのセッション・ステートを参照するためにOracle Application ExpressでSQLまたはPL/SQLを使用する場合はいつでも使用できます。次に例を示します。

SELECT * FROM employees WHERE last_name like '%' || :SEARCH_STRING || '%'

この例では、検索文字列がページ・アイテムです。リージョン・タイプがSQL問合せとして定義されている場合、標準SQLバインド変数構文を使用して値を参照できます。バインド変数を使用すると、解析済のSQL問合せがデータベースによって再利用されるため、サーバーによるメモリーの使用が最適化されます。

バインド変数構文を使用する場合は、次の規則に注意してください。

  • バインド変数名は、アイテム名に対応している必要があります。

  • バインド変数名は、大/小文字が区別されません。

  • バインド変数名は、30文字以下である必要があります(有効なOracle識別子である必要があります)。

    ページ・アイテム名とアプリケーション・アイテム名は255文字以下に設定できますが、アプリケーション・アイテムをバインド変数構文を使用したSQL内で使用する場合、そのアイテム名は30文字以下で指定する必要があります。

SQL問合せまたはLOVに基づいたリージョンでのバインド変数の使用

リージョン・タイプがSQL問合せ、SQL問合せ(SQL問合せを戻すPL/SQLファンクション本体)、またはLOVとして定義されている場合は、次の構文を使用してセッション・ステートを参照できます。

:MY_ITEM

これを行うための一般的な方法の1つは、セッション・ステート変数をWHERE句に組み込むことです。次の例では、アイテムTHE_DEPTNOの値を、SQL問合せから定義されるリージョンにバインドする方法を示します。

SELECT last_name, job_id, salary
FROM employees
WHERE department_id = :THE_DEPTNO

関連項目:

リージョンを作成する方法については、「リージョンの理解」を参照してください。

PL/SQLプロシージャでのバインド変数の使用

PL/SQLプロシージャとして定義されたタイプのリージョンは、PL/SQL無名ブロック構文を使用して構築されます。つまり、開始キーワードおよび終了キーワードがPL/SQLブロックを囲むために自動的に追加されます。次に例を示します。

IF :P1_JOB IS NOT NULL THEN
  INSERT INTO employees (employee_id, first_name, job_id) 
  VALUES (:P1_EMP_ID, :P1_NAME, :P1_JOB)
end if;

この例では、employee_idfirst_nameおよびjob_idの値には、P1_EMP_IDP1_NAMEおよびP1_JOBの値が移入されます。