ヘッダーをスキップ
Oracle Application Expressアプリケーション・ビルダー・ユーザーズ・ガイド
リリース 3.1.2
B51321-01
  目次
目次
索引
索引

前へ
前へ
 
次へ
次へ
 

15 高度なプログラミング手法

このセクションでは、自動的なデータ操作言語を使用した作業、データベース・リンクの確立、コレクションの使用、バックグラウンドSQLの実行、Webサービスの使用、ユーザー・プリファレンスの管理など、高度なプログラミング手法について説明します。

このセクションの内容は次のとおりです。


参照:

Oracle Application Express APIリファレンスおよび「アプリケーションのデプロイ」

DMLロックについて

自動的なデータ操作言語(DML)が表内の行を更新または削除するためにOracle Application Expressで使用される場合、トランザクションが開始されるとまず行をロックし、ページに表示されてから変更されたかどうかを確認して、最後に行に対するUPDATEまたはDELETE文を発行します。

行のロックが頻繁に発生する一部の環境では、DML操作を制御してDML操作が次の状態かどうかを判別する場合があります。

APEX_DML_LOCK_WAIT_TIMEについて

アプリケーション置換文字列、アプリケーション・アイテムまたはページ・アイテムの値をAPEX_DML_LOCK_WAIT_TIMEに設定すると、DML操作を制御できます。次の値がサポートされています。

アプリケーションで設定する場合、APEX_DML_LOCK_WAIT_TIMEの値はアプリケーション全体の自動DMLを使用するすべてのUPDATEおよびDELETE DML操作に適用されます。特定の自動DMLプロセスを制御するには、自動DMLプロセスの前にAPEX_DML_LOCK_WAIT_TIMEの値を更新して、自動DMLプロセスの後にリセットします。これは、表形式フォームを使用した更新および削除には影響しないことに注意してください。

FSP_DML_LOCK_ROWについて

アプリケーション置換文字列、アプリケーション・アイテムまたはページ・アイテムの値をFSP_DML_LOCK_ROWに設定して、DML操作を制御することもできます。次の値がサポートされています。

データベース・リンクを使用したデータへのアクセス

作業領域のホームページはOracle Database上で実行されるため、ユーザーは、Oracleのすべての分散データベース機能を使用できます。通常、分散データベース操作は、データベース・リンクを使用して実行します。

データベース・リンクは1つのデータベースのスキーマ・オブジェクトであり、これを使用すると、別のデータベース上のオブジェクトにアクセスできます。データベース・リンクを作成すると、表名またはビュー名に@dblinkを追加することによって、リモート・オブジェクトにアクセスできます。この場合のdblinkは、データベース・オブジェクトの作成ウィザードで指定するデータベース・リンク名です。


注意:

デフォルトでは、CREATE DATABASE LINKシステム権限は、割り当てられた作業領域またはデータベース・ユーザーに付与されません。この機能を使用するには、DBAまたは管理者が、この特定の権限をユーザーの作業領域のデータベース・ユーザーに付与する必要があります。Oracle Database管理者ガイドの「データベース・リンクの作成」を参照してください。

データベース・リンクを作成するには、次のステップを実行します。

  1. 作業領域ホームページで、「SQLワークショップ」をクリックして、「オブジェクト・ブラウザ」をクリックします。

    オブジェクト・ブラウザが表示されます。

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

  3. 「データベース・リンク」を選択して、「次へ」をクリックします。

  4. 画面に表示されるステップに従います。

    データベース・リンク名は、Oracleのネーミング規則に従う必要があり、空白を含めたり、数字やアンダースコアから開始することはできません。

既存のデータベース・リンクを表示するには、次のステップを実行します。

  1. 作業領域ホームページで、「SQLワークショップ」をクリックして、「オブジェクト・ブラウザ」をクリックします。

    オブジェクト・ブラウザが表示されます。

  2. ページ上部のオブジェクト・タイプ「データベース・リンク」を選択します。


参照:

Oracle Application Express SQLワークショップおよびユーティリティ・ガイドの「オブジェクト・ブラウザを使用したデータベース・オブジェクトの管理」およびOracle Database管理者ガイドの「データベース・リンク」

アプリケーションからの電子メール送信

このセクションでは、Oracle Application Expressアプリケーションから電子メールを送信する方法を説明します。

このセクションの構成は次のとおりです。


参照:

Oracle Application Express管理ガイドの「メールの管理」


ヒント:

Oracle Database 11g リリース1(11.1)でOracle Application Expressを実行している場合は、外部に電子メールを送信するにはネットワーク・サービスを有効化する必要があります。「Oracle Database 11gのネットワーク・サービスの有効化」を参照してください。

電子メールを送信するためのOracle Application Expressの構成について

アプリケーション・ビルダー・アプリケーションから電子メールを送信する前に、次のステップを実行する必要があります。

  1. Oracle Application Express管理サービスにログインし、インスタンスの設定ページで電子メール設定を構成します。Oracle Application Express管理ガイドを参照してください。

  2. さらに、Oracle Database 11g リリース1(11.1)でOracle Application Expressを実行している場合、外部へのメールを有効化する必要があります。Oracle Database 11g リリース1(11.1)では、ネットワーク・サービスと通信する機能はデフォルトで無効になっています。「Oracle Database 11gのネットワーク・サービスの有効化」を参照してください。


ヒント:

新しい作業領域リクエストが承認されたときにユーザーにログイン資格証明が電子メールで自動的に送信されるように、Oracle Application Expressを構成できます。詳細は、Oracle Application Express管理ガイドの「割当てモードの指定」を参照してください。

アプリケーションからの電子メールの送信

APEX_MAILというPL/SQLパッケージをコールすることによって、アプリケーション・ビルダー・アプリケーションから電子メールを送信できます。このパッケージは、Oracleで提供されるUTL_SMTPパッケージをベースとして構築されています。このような依存性があるため、APEX_MAILを使用するには、UTL_SMTPパッケージがインストール済で機能している必要があります。


参照:

UTL_SMTPパッケージの詳細は、Oracle Database PL/SQLパッケージ・プロシージャおよびタイプ・リファレンスを、「APEX_MAIL」の詳細は、Oracle Application Express APIリファレンスを参照してください。

APEX_MAILには、電子メールを送信するための次の3つのプロシージャが含まれています。

  • アプリケーションから外部へ電子メール・メッセージを手動で送信するには、APEX_MAIL.SENDを使用します。

  • 添付ファイルとしてアプリケーションから外部へ電子メール・メッセージを送信するには、APEX_MAIL.ADD_ATTACHMENTを使用します。

  • APEX_MAIL_QUEUEに格納されたメール・メッセージを配信するには、 APEX_MAIL.PUSH_QUEUEを使用します。

Oracle Application Expressでは、表の指定したAPEX_MAIL_QUEUEに、未送信の電子メール・メッセージが格納されます。APEX_MAIL.PUSH_QUEUEプロシージャをコールすると、このキューに格納されたメール・メッセージを指定したSMTPゲートウェイに配信できます。

Oracle Application Expressによって、正常に送信されたメッセージのログが、サーバーのローカル時間でのタイムスタンプとともにAPEX_MAIL_LOG表に作成されます。

次に、シェル・スクリプトを使用したAPEX_MAIL.PUSH_QUEUEプロシージャのUNIXまたはLinux使用例を示します。

SQLPLUS / <<EOF
APEX_MAIL.PUSH_QUEUE;
DISCONNECT
EXIT
EOF

参照:

Oracle Application Express APIリファレンスの「APEX_MAIL」およびOracle Application Express管理ガイドの「メールの管理」

コレクションの使用

コレクションを使用すると、1つ以上の非スカラー値を一時的に取得できます。コレクションを使用して、現在セッション・ステートにある行および列を格納します。これによって、あるユーザーの特定のセッション中にそれらの行および列に対してアクセス、操作または処理を行うことができます。コレクションは、バケツのようなものと考えることができます。その中に情報の行を一時的に格納し、その情報を指定できます。

次に、コレクションを使用する場合の例を示します。

このセクションの構成は次のとおりです。

APEX_COLLECTION APIについて

各コレクションには、データ要素(メンバー)の名前付きリストが含まれます。このリストには、最大50個の文字属性(VARCHAR2(4000))および1個の大文字属性(CLOB)を含めることができます。PL/SQL API APEX_COLLECTIONを使用して、コレクション情報を挿入、更新および削除します。

コレクションの名前の指定について

新しいコレクションを作成する場合、255文字以下の名前を付ける必要があります。コレクション名の大/小文字は区別されず、すべて大文字に変換されます。

コレクションに名前を付けた後、コレクション内の値にアクセスするには、APEX_COLLECTIONSビューに対してSQL問合せを実行します。

コレクションの作成

各コレクションには、データ要素(メンバー)の名前付きリストが含まれます。このリストには、最大50個の文字属性(VARCHAR2(4000))および1個の大文字属性(CLOB)を含めることができます。次のメソッドを使用してコレクションを作成します。

  • CREATE_COLLECTION

  • CREATE_OR_TRUNCATE_COLLECTION

  • CREATE_COLLECTION_FROM_QUERY

  • APEX_COLLECTION.CREATE_COLLECTION_FROM_QUERY_B

CREATE_COLLECTIONメソッドでは、指定したコレクションがすでに存在する場合は例外が発生します。次に例を示します。

APEX_COLLECTION.CREATE_COLLECTION(
    p_collection_name => collection name );

CREATE_OR_TRUNCATE_COLLECTIONメソッドでは、指定したコレクションが存在しない場合に、新しいコレクションが作成されます。指定したコレクションが存在する場合は、そのコレクションが切り捨てられます。切り捨てられたコレクションは空になりますが、コレクション自体はそのまま残ります。次に例を示します。

APEX_COLLECTION.CREATE_OR_TRUNCATE_COLLECTION(
    p_collection_name => collection name,
    p_generate_md5    => YES or NO );

CREATE_COLLECTION_FROM_QUERYメソッドでは、コレクションが作成され、指定した問合せの結果がそのコレクションに移入されます。次に例を示します。

APEX_COLLECTION.CREATE_COLLECTION_FROM_QUERY(
    p_collection_name => collection name,
    p_query           => your query ,
    p_generate_md5    => YES or NO );

また、CREATE_COLLECTION_FROM_QUERY_Bメソッドでは、コレクションが作成され、指定した問合せの結果がそのコレクションに移入されます。次に例を示します。

APEX_COLLECTION.CREATE_COLLECTION_FROM_QUERY_B(
    p_collection_name => collection name,
    p_query           => your query );
   

CREATE_COLLECTION_FROM_QUERY_Bメソッドでは、バルクSQL操作を実行することにより、CREATE_COLLECTION_FROM_QUERYメソッドよりも非常に速いパフォーマンスが提供されますが、次の制限があります。

  • 問合せの選択リスト内の列値は、2,000バイトを超えることはできません。列値が2,000バイトを超える行がある場合は、実行中にエラーが発生します。

  • コレクション内のいずれのメンバーに対してもMD5チェックサムは計算されません。

パラメータp_generate_md5について

p_generate_md5フラグを使用して、コレクション・メンバーのデータのメッセージ・ダイジェストを計算する必要があるかどうかを指定します。デフォルトでは、このフラグはNOに設定されています。このパラメータを使用して、コレクション・メンバーのMD5をチェックします(つまり、MD5を他のメンバーと比較して、メンバーが変更されたかどうかを確認します)。


参照:

GET_MEMBER_MD5ファンクションの使用方法については、「コレクション・ステータスの判別」を参照してください。

コレクションの切捨て

コレクションを切り捨てる場合、指定したコレクションからすべてのメンバーを削除しますが、指定したコレクションはそのまま残ります。次に例を示します。

APEX_COLLECTION.TRUNCATE_COLLECTION(
    p_collection_name => collection name );

コレクションへのアクセス

データベース・ビューAPEX_COLLECTIONSを問い合せると、コレクションのメンバーにアクセスできます。APEX_COLLECTIONSビューには、次の定義が含まれます。

COLLECTION_NAME   NOT NULL VARCHAR2(255)
SEQ_ID            NOT NULL NUMBER 
C001                       VARCHAR2(4000)
C002                       VARCHAR2(4000)
C003                       VARCHAR2(4000)   
C004                       VARCHAR2(4000)   
C005                       VARCHAR2(4000)  
...
C050                       VARCHAR2(4000)
CLOB001                    CLOB   
MD5_ORIGINAL               VARCHAR2(4000)  

APEX_COLLECTIONSビューは、アプリケーションで、アプリケーション内の他の表またはビューと同様に使用します。次に例を示します。

SELECT c001, c002, c003
   FROM APEX_collections
 WHERE collection_name = 'FIREARMS'

コレクションの削除

コレクションを削除する場合は、コレクションおよびそのすべてのメンバーを削除します。次に例を示します。

APEX_COLLECTION.DELETE_COLLECTION (
    p_collection_name => collection name );

コレクションを削除しない場合は、セッションがパージされると最終的にコレクションが削除されることに注意してください。次に例を示します。

現在のアプリケーションに関するすべてのコレクションの削除

現在のアプリケーションに定義されたすべてのコレクションを削除するには、DELETE_ALL_COLLECTIONSメソッドを使用します。次に例を示します。

APEX_COLLECTION.DELETE_ALL_COLLECTIONS;

現在のセッションにおけるすべてのコレクションの削除

現在のセッションに定義されたすべてのコレクションを削除するには、DELETE_ALL_COLLECTIONS_SESSIONメソッドを使用します。次に例を示します。

APEX_COLLECTION.DELETE_ALL_COLLECTIONS_SESSION;

コレクションへのメンバーの追加

コレクションに追加したデータ要素(メンバー)には、一意の順序番号が割り当てられます。メンバーをコレクションに追加すると、最も新しいメンバーが一番大きい番号を持つように、前のメンバーより1大きい番号が新しいメンバーに割り当てられます。

コレクションに新しいメンバーを追加するには、ADD_MEMBERファンクションを使用します。このファンクションをコールすると、新しく追加したメンバーの順序番号が戻されます。次の例では、ADD_MEMBERファンクションを使用する方法を示します。

APEX_COLLECTION.ADD_MEMBER(
    p_collection_name => collection name,
    p_c001          => [member attribute 1],
    p_c002          => [member attribute 2],
    p_c003          => [member attribute 3],
    p_c004          => [member attribute 4],
    p_c005          => [member attribute 5],
    p_c006          => [member attribute 6],
    p_c007          => [member attribute 7],
  ...
    p_c050          => [member attribute 50]);
    p_clob001       => [CLOB member attribute 1],
    p_generate_md5  => YES or NO);    

ADD_MEMBERSメソッドを使用して、新しいメンバー(メンバーの配列)をコレクションに追加することもできます。次に例を示します。

APEX_COLLECTION.ADD_MEMBERS(
    p_collection_name => collection name,
    p_c001          => member attribute array 1,
    p_c002          => member attribute array 2,
    p_c003          => member attribute array 3,
    p_c004          => member attribute array 4,
    p_c005          => member attribute array 5,
    p_c006          => member attribute array 6,
    p_c007          => member attribute array 7,
    ...
    p_c050          => member attribute array 50);
    p_generate_md5  => YES or NO);

指定したコレクションが、現在のユーザーの指定した名前で同じセッションに存在しない場合、このメソッドによりエラーが発生します。また、4,000文字を超える属性はすべて4,000文字に切り捨てられます。追加されるメンバー数は、1番目の配列の要素数に基づきます。

パラメータp_generate_md5およびp_clob001について

p_generate_md5フラグを使用して、コレクション・メンバーのデータのメッセージ・ダイジェストを計算する必要があるかどうかを指定します。デフォルトでは、このフラグはNOに設定されています。このパラメータを使用して、コレクション・メンバーのMD5をチェックします(つまり、MD5を他のメンバーと比較して、メンバーが変更されたかどうかを確認します)。

4,000文字を超えるコレクション・メンバー属性には、p_clob001を使用します。


参照:

ファンクションGET_MEMBER_MD5の使用方法については、「コレクション・ステータスの判別」を参照してください。

コレクション・メンバーの更新

コレクション・メンバーを更新するには、UPDATE_MEMBERプロシージャをコールして、更新するコレクション・メンバーを順序番号を使用して参照します。次に例を示します。

APEX_COLLECTION.UPDATE_MEMBER (
    p_collection_name => collection name,
    p_seq             => member sequence number,
    p_c001            => member attribute 1,
    p_c002            => member attribute 2,
    p_c003            => member attribute 3,
    p_c004            => member attribute 4,
    p_c005            => member attribute 5,
    p_c006            => member attribute 6,
    p_c007            => member attribute 7,
    ...
    p_c050            => member attribute 50);
    p_clob001         => [CLOB member attribute 1],  

UPDATE_MEMBERプロシージャを使用すると、個々のメンバー属性ではなく、コレクション・メンバー全体を置き換えます。指定したコレクションが存在しない場合、このプロシージャによりエラーが発生します。次に例を示します。

4,000文字を超えるコレクション・メンバー属性には、p_clob001パラメータを使用します。

コレクション・メンバーの単一の属性を更新する場合には、UPDATE_MEMBER_ATTRIBUTEプロシージャを使用します。次に例を示します。

APEX_COLLECTION.UPDATE_MEMBER_ATTRIBUTE(
    p_collection_name       => collection_name,
    p_seq                   => member sequence number,
    p_attr_number           => member attribute number,
    p_attr_value            => member attribute value )
APEX_COLLECTION.UPDATE_MEMBER_ATTRIBUTE(
    p_collection_name        => collection_name,
    p_seq                    => member sequence number,
    p_clob_number            => CLOB member attribute number,
    p_clob_value             => CLOB member attribute value );

指定したコレクションが存在しない場合、UPDATE_MEMBER_ATTRIBUTEプロシージャをコールすると、エラーが発生します。

p_clob_numberパラメータの有効値は1のみであることに注意してください。

コレクション・メンバーの削除

コレクション・メンバーを削除するには、DELETE_MEMBERプロシージャをコールして、削除するコレクション・メンバーを順序番号を使用して参照します。次に例を示します。

APEX_COLLECTION.DELETE_MEMBER(
    p_collection_name => collection name,
    p_seq             => member sequence number);

このプロシージャを使用すると、指定したコレクション内の順序番号が欠落することに注意してください。また、指定したコレクションが存在しない場合、このプロシージャをコールするとエラーが発生します。

属性が特定の値に一致するまで、コレクションからすべてのメンバーを削除することもできます。次に例を示します。

APEX_COLLECTION.DELETE_MEMBERS(
    p_collection_name => collection name,
    p_attr_number     => number of attribute used to match for the specified
                         attribute value for deletion, 
    p_attr_value      => attribute value of the member attribute used to 
                         match for deletion);

また、DELETE_MEMBERプロシージャを使用すると、指定したコレクション内の順序番号が欠落することに注意してください。次の場合に、このプロシージャによりエラーが発生します。

  • 指定したコレクションが存在しない場合。

  • 指定した属性番号が1から50の範囲外であるか、無効である場合。

指定した属性値がNULLの場合、指定したコレクションのすべてのメンバーが削除されます。

コレクション・ステータスの判別

p_generate_md5パラメータは、コレクションの各メンバーに対してMD5メッセージ・ダイジェストを計算するかどうかを判別します。コレクションの作成直後、コレクション・ステータス・フラグはFALSEに設定されます。コレクションに対して操作(追加、更新、切捨てなど)が行われると、このフラグはTRUEに設定されます。

このフラグは、RESET_COLLECTION_CHANGEDをコールすることで、手動でリセットできます。次に例を示します。

APEX_COLLECTION.RESET_COLLECTION_CHANGED (
    p_collection_name => collection name)

このフラグをリセットした後にコレクションが変更されたかどうかを判別するには、COLLECTION_HAS_CHANGEDをコールします。次に例を示します。

l_changed := APEX_COLLECTION.COLLECTION_HAS_CHANGED(
  p_collection_name => collection_name);

p_generated_md5パラメータがYESに設定されている場合、コレクションに新しいメンバーを追加すると、50個のすべての属性とCLOB属性に対してMD5メッセージ・ダイジェストが計算されます。この値にはAPEX_CCOLLECTIONビューのMD5_ORIGINAL列からアクセスできます。GET_MEMBER_MD5ファンクションを使用して、指定したコレクション・メンバーの現在の値に対するMD5メッセージ・ダイジェストにアクセスできます。次に例を示します。

APEX_COLLECTION.GET_MEMBER_MD5 (
    p_collection_name => collection name,
    p_seq             => member sequence number );
    RETURN VARCHAR2;

コレクションのマージ

コレクションのメンバーを、配列の集合として渡した値とマージできます。p_init_query引数を使用することで、指定した問合せからコレクションを作成できます。次に例を示します。

APEX_COLLECTION.MERGE_MEMBERS
p_collection_name => collection_name

コレクションが存在する場合、次のことが発生することに注意してください。

  • コレクション内に存在し、配列内に存在しない行が削除されます。

  • コレクションおよび配列内の行が更新されます。

  • 配列内に存在し、コレクション内に存在しない行が挿入されます。

4,000文字を超える属性は、4,000文字に切り捨てられます。表15-1に、コレクションのマージに使用可能な引数を示します。

表15-1 コレクションのマージに使用可能な引数

引数 説明

p_c001

マージされる1番目の属性値の配列です。最大長は4,000文字です。最大長より大きい値は4,000文字に切り捨てられます。

P_C001 PL/SQL表内の要素数は、すべてのPL/SQL表内のアイテムの合計数として使用されます。たとえば、P_C001.count = 2およびP_C002.count = 10の場合、2つのメンバーのみがマージされます。P_C001がNULLの場合は、アプリケーション・エラーが発生することに注意してください。

p_c0xx

マージされるXX番目の属性値の属性です。最大長は4,000文字です。最大長より大きい値は4,000文字に切り捨てられます。

p_collection_name

コレクションの名前です。

参照: 「コレクションの名前の指定について」

p_null_index

マージ・ファンクションで無視する行を識別するために使用します。この引数は、行をNULLとして識別します。NULL行は、コレクションから自動的に削除されます。

p_null_value

p_null_indexと組み合せて使用します。この引数は、NULL値を識別します。この値をNULLにすることはできません。この引数の通常の値は0(ゼロ)です。

p_init_query

コレクションが存在しない場合に、この引数によって定義した問合せを使用してコレクションを作成できます。


コレクションの管理

コレクションの管理には、次のユーティリティを使用できます。

このセクションの構成は次のとおりです。

メンバー数の取得

コレクション内のすべてのメンバーの合計数を戻すには、COLLECTION_MEMBER_COUNTを使用します。この数は、コレクション内の順序番号の最大値ではないことに注意してください。次に例を示します。

l_count := APEX_COLLECTION.COLLECTION_MEMBER_COUNT (
  p_collection_name => collection name );

コレクションの再順序付け

要素の順序を保持したままで、コレクションを再順序付けして順序番号の欠落を排除するには、RESEQUENCE_COLLECTIONを使用します。次に例を示します。

APEX_COLLECTION.RESEQUENCE_COLLECTION (
   p_collection_name => collection name )
   

コレクションの存在の確認

コレクションが存在するかどうかを確認するには、COLLECTION_EXISTSを使用します。次に例を示します。

l_exists := APEX_COLLECTION.COLLECTION_EXISTS  (
  p_collection_name => collection name );

メンバーの順序番号の調整

順序番号を上下に移動することで、コレクション内の特定のメンバーの順序番号を調整できます。順序番号を調整すると、指定した番号が別の番号と入れ替えられます。たとえば、番号2を1つ上に移動すると、2が3になり、3が2になります。

メンバーの順序番号を1つ上に移動するには、MOVE_MEMBER_UPを使用します。メンバーの順序番号を1つ下に移動するには、MOVE_MEMBER_DOWNを使用します。次に例を示します。

APEX_COLLECTION.MOVE_MEMBER_DOWN(
    p_collection_name => collection name,
    p_seq             => member sequence number);

これらのいずれかのメソッドの使用中は、次の場合にアプリケーション・エラーが表示されることに注意してください。

  • 指定したコレクションが、カレント・ユーザーのカレント・セッションに存在しない場合

  • p_seq順序番号によって指定されたメンバーが存在しない場合

ただし、指定したメンバーにコレクション内で最も大きい番号または最も小さい番号(MOVE_MEMBER_UPまたはMOVE_MEMBER_DOWNのどちらをコールするかによる)が割り当てられている場合、アプリケーション・エラーは戻されません。

コレクション・メンバーのソート

コレクションのメンバーを列番号で並べ替えるには、SORT_MEMBERSメソッドを使用します。このメソッドは、特定の列番号でコレクションをソートし、各メンバーの順序番号の欠落を排除するように順序番号の再割当ても行います。次に例を示します。

APEX_COLLECTION.SORT_MEMBERS(
    p_collection_name       => collection name,
    p_sort_on_column_number => column number to sort by);

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

コレクションのセッション・ステートをクリアすると、コレクションのメンバーを削除できます。ショッピング・カートは、コレクションのセッション・ステートをクリアする必要がある場合のよい例です。ユーザーがショッピング・カートを空にして再度開始するよう要求した場合に、コレクションのセッション・ステートをクリアする必要があります。CREATE_OR_TRUNCATE_COLLECTIONメソッドをコールするか、f?p構文を使用して、コレクションのセッション・ステートを削除できます。

CREATE_OR_TRUNCATE_COLLECTIONメソッドをコールすると、既存のコレクションが削除され、そのコレクションが再作成されます。次に例を示します。

APEX_COLLECTION.CREATE_OR_TRUNCATE_COLLECTION(
    p_collection_name       => collection name,

f?p構文の6つ目の引数を使用してセッション・ステートをクリアすることもできます。次に例を示します。

f?p=App:Page:Session::NO:1,2,3,collection name

APEX_ACTIVITY_LOGを使用したカスタム・アクティビティ・レポートの作成

APEX_ACTIVITY_LOGビューには、開発者アクティビティ、アプリケーション実行時アクティビティなど、作業領域のすべてのアクティビティが記録されます。APEX_ACTIVITY_LOG使用して、現在の作業領域に関するすべてのアクティビティの問合せを表示できます。たとえば、このビューを使用して、リアルタイムのパフォーマンス分析を提供する特定のアプリケーション内の監視レポートを開発できます。

表15-2に、APEX_ACTIVITY_LOGビューの列を示します。

表15-2 APEX_ACTIVITY_LOGの列

タイプ 説明

time_stamp

DATE

アクティビティがページ・ビューの末尾に記録された日時

component_type

VARCHAR2(255)

今後の使用のための予約

component_type

VARCHAR2(255)

今後の使用のための予約

component_attribute

VARCHAR2(4000)

ページのタイトル

information

VARCHAR2(4000)

今後の使用のための予約

elap

NUMBER

ページ・ビューの経過時間(秒)。

num_rows

NUMBER

ページ上で処理された行数

userid

VARCHAR2(255)

ページ・ビューを実行しているユーザーのID

ip_address

VARCHAR2(4000)

クライアントのIPアドレス

user_agent

VARCHAR2(4000)

クライアントのWebブラウザ・ユーザー・エージェント

flow_id

NUMBER

アプリケーションID

step_id

NUMBER

ページ番号。

session_id

NUMBER

Oracle Application Expressセッション識別子。

sqlerrm

VARCHAR2(4000)

SQLエラー・メッセージ

sqlerrm_component_type

VARCHAR2(255)

今後の使用のための予約

sqlerrm_component_name

VARCHAR2(255)

今後の使用のための予約


アクティビティ・ログの領域を節約するため、一意のセッションそれぞれの最初のログ・エントリにのみIPアドレスとWebブラウザ・ユーザー・エージェントが含まれます。

次に、アプリケーション9529に関する過去24時間のページ・ビュー合計数および平均ページ・ビュー時間がユーザーID別に表示されるレポートを作成する方法の例を示します。

SELECT COUNT(*), AVG(elap), userid
    FROM APEX_ACTIVITY_LOG
 WHERE time_stamp > (SYSDATE-1)
   AND flow_id = 9529
GROUP BY userid

Oracle Application Expressインスタンスでのアクティビティのロギングは2つの異なるログ表を順番に使用することに注意してください。このため、ロギング情報はログのうち古い方の使用可能なエントリのみとなります。アプリケーションの特定のログ情報を常に保持する場合は、所有するアプリケーション表に両方のログ情報をコピーするか、アプリケーションに直接ロギングを実装する必要があります。


参照:

定義の編集ページで、有効なロギングの情報に関する「名前」を参照してください。

バックグラウンドPL/SQLの実行

APEX_PLSQL_JOBパッケージを使用すると、アプリケーションのバックグラウンドでPL/SQLコードを実行できます。操作が完了していない状態でもユーザーがアプリケーションで作業を継続できるため、長時間実行操作の管理に有効な方法です。

このセクションの構成は次のとおりです。

APEX_PLSQL_JOBパッケージの理解

APEX_PLSQL_JOBは、Oracle Databaseで提供されるDBMS_JOB機能をラップしたラッパー・パッケージです。APEX_PLSQL_JOBパッケージでは、PL/SQLをバックグラウンドで実行するために必要な機能のみが公開されることに注意してください。APEX_PLSQL_JOB パッケージの記述を次に示します。

SQL> DESC APEX_PLSQL_JOB
FUNCTION JOBS_ARE_ENABLED RETURNS BOOLEAN
PROCEDURE PURGE_PROCESS
 Argument Name                  Type                    In/Out Default?
 ------------------------------ ----------------------- ------ --------
 P_JOB                          NUMBER                  IN
FUNCTION SUBMIT_PROCESS RETURNS NUMBER
 Argument Name                  Type                    In/Out Default?
 ------------------------------ ----------------------- ------ --------
 P_SQL                          VARCHAR2                IN
 P_WHEN                         VARCHAR2                IN     DEFAULT
 P_STATUS                       VARCHAR2                IN     DEFAULT
FUNCTION TIME_ELAPSED RETURNS NUMBER
 Argument Name                  Type                    In/Out Default?
 ------------------------------ ----------------------- ------ --------
 P_JOB                          NUMBER                  IN
PROCEDURE UPDATE_JOB_STATUS
 Argument Name                  Type                    In/Out Default?
 ------------------------------ ----------------------- ------ --------
 P_JOB                          NUMBER                  IN
 P_STATUS                       VARCHAR2                IN
 P_DESC                         

表15-3に、APEX_PLSQL_JOBパッケージで使用可能なファンクションを示します。

表15-3 APEX_PLSQL_JOBパッケージ: 使用可能なファンクション

ファンクションまたはプロシージャ 説明

SUBMIT_PROCESS

このプロシージャを使用すると、バックグラウンドPL/SQLを送信できます。このプロシージャは、一意のジョブ番号を戻します。このジョブ番号は、このパッケージ内の他のプロシージャおよびファンクションの参照点として使用できるため、自分のスキーマ内に格納しておくと役に立ちます。

UPDATE_JOB_STATUS

このプロシージャをコールすると、現在実行しているジョブのステータスを更新できます。このプロシージャは、送信されたPL/SQLからコールされたときに最も有効です。

TIME_ELAPSED

このファンクションを使用すると、ジョブが送信されてから経過した時間を確認できます。

JOBS_ARE_ENABLED

このファンクションをコールすると、そのデータベースが現在、APEX_PLSQL_JOBパッケージへのジョブの送信をサポートするモードであるかどうかを確認できます。

PURGE_PROCESS

このプロシージャをコールすると、送信されたジョブをクリーンアップできます。送信されたジョブは、Oracle Application Expressによってそれらのレコードがクリーンアップされるか、またはPURGE_PROCESSのコールによって手動で削除するまで、APEX_PLSQL_JOBSビューに保持されます。


APEX_PLSQL_JOBパッケージに送信したすべてのジョブは、APEX_PLSQL_JOBSビューで表示できます。APEX_PLSQL_JOBSビューの記述を次に示します。

SQL> DESCRIBE APEX_PLSQL_JOBS
 Name                              Null?    Type
 --------------------------------- -------- ----------------------------
 ID                                         NUMBER
 JOB                                        NUMBER
 FLOW_ID                                    NUMBER
 OWNER                                      VARCHAR2(30)
 ENDUSER                                    VARCHAR2(30)
 CREATED                                    DATE
 MODIFIED                                   DATE
 STATUS                                     VARCHAR2(100)
 SYSTEM_STATUS                              VARCHAR2(4000)
 SYSTEM_MODIFIED                            DATE
 SECURITY_GROUP_ID                          NUMBER

表15-4に、APEX_PLSQL_JOBSビューで使用可能な列を示します。

表15-4 APEX_PLSQL_JOBSビュー列

名前 説明

ID

列ごとに一意の識別子です。

JOB

送信された各PL/SQLジョブに割り当てられたジョブ番号です。この値を戻すには、APEX_PLSQL_JOB.SUBMIT_PROCESSファンクションを使用します。これは、APEX_PLSQL_JOBパッケージ内の他のプロシージャおよびファンクションに渡す値でもあります。

FLOW_ID

このジョブの送信元のアプリケーションです。

OWNER

アプリケーションを所有するデータベース・スキーマです。この値は、DBMS_JOBがこのコードを実行する際に、コードを解析するスキーマを識別します。

ENDUSER

このプロセスを送信させたエンド・ユーザー(アプリケーションにログインしたユーザー)です。

CREATED

ジョブが送信された日付です。

MODIFIED

ステータスが変更された日付です。

STATUS

このジョブに対してユーザーが定義したステータスです。この列を更新するには、APEX_PLSQL_JOB.UPDATE_JOB_STATUSをコールします。

SYSTEM_STATUS

このジョブに対してシステムが定義したステータスです。

SYSTEM_MODIFIED

システム・ステータスが変更された日付です。

SECURITY_GROUP_ID

作業領域に割り当てられた一意のIDです。開発者は、自分の作業領域から送信されたジョブのみを参照できます。


システム・ステータスの更新について

送信されたジョブには、次のいずれかのシステム・ステータス設定が含まれています。

  • SUBMITTED: ジョブが送信済であるが、開始されていないことを示します。DBMS_JOBでは、ジョブの即時開始は保証されていません。

  • IN PROGRESS: DBMS_JOBがプロセスを開始したことを示します。

  • COMPLETED: ジョブが完了したことを示します。

  • BROKEN (sqlcode) sqlerrm: ジョブに問題があり、エラーが発生したことを示します。エラーが発生したことを示すSQLコードおよびSQLエラー・メッセージがシステム・ステータスに表示されます。この情報を参照して、エラーの原因を判別してください。

プロセスを使用したバックグラウンドPL/SQLの実装

テストおよび説明用に、PL/SQLジョブをバックグラウンドで実行する例を次に示します。

001  BEGIN
002    FOR i IN 1 .. 100 LOOP
003      INSERT INTO emp(a,b) VALUES (:APP_JOB,i);
004      IF MOD(i,10) = 0 THEN
005        APEX_PLSQL_JOB.UPDATE_JOB_STATUS(
006          P_JOB     => :APP_JOB,
007          P_STATUS  => i || 'rows inserted');
008      END IF;
009      APEX_UTIL.PAUSE(2);
010    END LOOP;
011  END;

この例の説明を次に示します。

  • 002から010行では、100個のレコードをemp表に挿入するループを実行します。

  • APP_JOBは、INSERTのVALUE句内でバインド変数として参照され、UPDATE_JOB_STATUSへのコール内でP_JOBパラメータの値として指定されます。

  • APP_JOBは、APEX_PLSQL_JOBに送信される際に、このプロセスに割り当てられるジョブ番号を表します。プロセス・コード内にこの予約アイテムを指定すると、実行時に実際のジョブ番号に置換されます。

  • この例では、コード・ブロック内で、10個のレコードごとにUPDATE_JOB_STATUSがコールされることに注意してください。通常、Oracleトランザクション規則では、コード・ブロック内で実行された更新は、トランザクション全体がコミットされるまで表示されません。一方、APEX_PLSQL_JOB.UPDATE_JOB_STATUSプロシージャは、ジョブが成功したか失敗したかにかかわらず更新を実行するように実装されています。このことは、次の2つの理由から重要です。

    1. 「100行が挿入されました」というステータスが表示される場合でも、操作全体が成功したわけではありません。コード・ブロックでコミットが試行されたときにエラーが発生した場合、ステータスの更新は個別にコミットされるため、APEX_PLSQL_JOBSuser_status列は影響を受けません。

    2. 更新は自律的に実行されます。ジョブが完了する前にジョブ・ステータスを表示できます。これによって、バックグラウンドで実行中の各操作についてステータス・テキストを表示できます。

Webサービスの実装

Webサービスを使用すると、アプリケーション同士がWeb上でプラットフォームおよび言語に依存しない環境で相互に通信できます。通常のWebサービス・シナリオでは、ビジネス・アプリケーションが、HTTPプロトコルを使用して、特定のURLにあるサービスに対してリクエストを送信します。サービスは、リクエストを受信すると、これを処理し、レスポンスを返します。外部Webサービスへのコールをアプリケーション・ビルダーで開発されたアプリケーションに組み込むことができます。

Webサービスは、Simple Object Access Protocol(SOAP)に基づいています。SOAPは、World Wide Web Consortium(W3C)が策定した、インターネットを介したリクエストとレスポンスの送受信用の標準プロトコルです。SOAPメッセージは、サービス・プロバイダとサービス・ユーザー間でSOAPエンベロープに入れて送受信できます。

SOAPには、主に2つのメリットがあります。


ヒント:

Oracle Application ExpressをOracle Database 11g リリース1(11.1)以上と同時に実行している場合は、Webサービスを使用するためにネットワーク・サービスを有効にする必要があります。「Oracle Database 11gのネットワーク・サービスの有効化」を参照してください。

このセクションの構成は次のとおりです。


注意:

SOAP 1.1仕様はW3C覚書です。(SOAPより優先される標準を作成するために、W3C XML Protocol Working Groupが結成されています。)

Simple Object Access Protocol(SOAP)1.1については、次のWebサイトを参照してください。

http://www.w3.org/TR/SOAP/

Webサービス参照の理解

Oracle Application ExpressでWebサービスを使用するには、ウィザードを使用してWebサービス参照を作成します。Webサービス参照は、Web Services Description Language(WSDL)ドキュメントに基づくか、サービスに関する情報を参照して手動で作成することができます。

WSDLに基づいてWebサービス参照を作成する場合、ウィザードはWSDLを分析し、すべての必要な情報を収集して、次を含んだ有効なSOAPメッセージを作成します。

  • HTTP(S)を介したSOAPリクエストのポストに使用するURL

  • SOAP HTTPリクエストを識別するUniversal Resource Identifier(URI)

  • Webサービスの操作

  • 各操作の入力パラメータ

  • 各操作の出力パラメータ

手動でWebサービス参照を作成する場合、必要な情報を指定して、次を含んだ有効なSOAPリクエストを作成します。

  • HTTP(S)を介したSOAPリクエストのポストに使用するURL

  • SOAP HTTPリクエストを識別するUniversal Resource Identifier(URI)

  • アイテムの置換を含んだリクエストのSOAPエンベロープ

  • オプションで、Webサービスからのレスポンスを格納するコレクション名

Webサービス参照ページへのアクセス

Webサービス参照は、Webサービス参照ページで管理します。

Webサービス参照ページにアクセスするには、次のステップを実行します。

  1. 「作業領域」ホームページで、「アプリケーション・ビルダー」アイコンをクリックします。

  2. アプリケーションを選択します。

    アプリケーション・ビルダーが表示されます。

  3. 「共有コンポーネント」をクリックします。

    共有コンポーネント・ページが表示されます。

  4. 「ロジック」で、「Webサービス参照」をクリックします。

    Webサービス参照ページが表示されます。

アプリケーション・プロキシ・サーバー・アドレスの指定

インターネットのアクセスにプロキシ・サーバーが必要な環境の場合は、Webサービス参照を作成する前にアプリケーション属性ページでプロキシ・サーバー・アドレスを指定する必要があります。

アプリケーションにプロキシ・アドレスを指定するには、次のステップを実行します。

  1. 「作業領域」ホームページで、「アプリケーション・ビルダー」アイコンをクリックします。

  2. アプリケーションを選択します。

    アプリケーションのホームページが表示されます。

  3. 「共有コンポーネント」をクリックします。

  4. 「アプリケーション」で、「定義」をクリックします。

  5. 「名前」で、「プロキシ・サーバー」フィールドにプロキシ・サーバーを入力します。

  6. 「変更の適用」をクリックします。

SSL有効Webサービスでの作業

Secure Sockets Layer(SSL)は、RSA公開鍵による暗号化と対称鍵による暗号化を組み合せて、認証、暗号化およびデータの整合性を実現する業界標準プロトコルです。

通信する必要のあるWebサービスがSSL対応の場合(Webサービスに対するURLにhttpsと表示される)、ウォレットを作成する必要があります。ウォレットは、SSLに必要な認証および署名された資格証明(秘密鍵、証明書および信頼できる証明書)の格納に使用されるパスワード保護されたコンテナです。


参照:

Oracle Application Express管理ガイドの「ウォレット情報の構成」

WSDLに基づいたWebサービス参照の作成

WSDLに基づいたWebサービス参照を作成する場合、WSDLの位置の特定方法を決定する必要があります。WSDLの位置の特定には、次の2つの方法があります。

  • Universal Description, Discovery and Integration(UDDI)レジストリを検索する

  • WSDLドキュメントのURLを入力する

UDDIレジストリは企業がWebサービスを登録するディレクトリです。

このセクションの構成は次のとおりです。

UDDIレジストリの検索によるWebサービス参照の作成

UDDIレジストリを検索して、新しいWebサービスを作成するには、次のステップを実行します。

  1. Webサービス参照ページにナビゲートします。「Webサービス参照ページへのアクセス」を参照してください。

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

  3. WSDLを検出するためにUDDIレジストリを検索することを確認するプロンプトが表示されたら、「はい」をクリックします。

  4. 「UDDIの位置」では、次のいずれかを実行できます。

    • UDDIレジストリへのURLエンドポイントを入力する。

    • 「リスト」 アイコンをクリックして、UDDIレジストリを選択する。

  5. 「検索」で、次を指定します。

    1. 検索タイプ: ビジネス名またはサービス名のどちらを検索するかを指定します。両方を検索することはできません。

    2. 名前: 検索に使用するビジネス名またはサービス名を入力します。ワイルドカードにはパーセント(%)を使用します。

    3. オプションで、完全一致検索または大文字/小文字を区別する検索を指定できます。

    4. 「検索」をクリックします。

    5. 検索結果が表示されたら、選択した後で「次へ」をクリックします。

    選択したWebサービスについて説明するサマリー・ページが表示されます。

  6. 選択内容を確認し、「次へ」をクリックして続行します。

    WSDLドキュメントへのURLが「WSDLの位置」フィールドに表示されます。

  7. 「終了」をクリックします。

Webサービス参照がWebサービス参照リポジトリに追加されます。

WSDLドキュメントの指定によるWebサービス参照の作成

特定のWSDLドキュメントへのURLを指定して、新しいWebサービスを作成するには、次のステップを実行します。

  1. Webサービス参照ページにナビゲートします。「Webサービス参照ページへのアクセス」を参照してください。

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

  3. WSDLを検出するためにUDDIレジストリを検索することを確認するプロンプトが表示されたら、「いいえ」をクリックします。

  4. 「WSDLの位置」に、WSDLドキュメントへのURLを入力します。

  5. 「終了」をクリックします。

Webサービス参照がWebサービス参照リポジトリに追加されます。

Webサービス参照の手動作成

新規のWebサービス参照を手動作成するには、次のステップを実行します。

  1. Webサービス参照ページにナビゲートします。「Webサービス参照ページへのアクセス」を参照してください。

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

  3. WSDLを検出するためにUDDIレジストリを検索することを確認するプロンプトが表示されたら、「いいえ」をクリックします。

  4. 「タスク」リストで、「Webサービス参照の手動作成」をクリックします。

    Webサービスの作成/編集ページが表示されます。

  5. 「名前」で、参照を識別する名前を入力します。

  6. 「サービスの説明」には、次の項目があります。

    1. URL: WebサービスのURLエンドポイントを入力します。

    2. アクション: Webサービスのアクションを入力します(オプション)。

    3. プロキシ: このサービスのアプリケーション・プロキシを上書きする場合、プロキシを入力します。

    4. Basic認証: Webサービスが認証を必要とするかどうかを選択します。「はい」または「いいえ」を選択します。

  7. 「SOAPエンベロープ」で、このリクエストのSOAPエンベロープを入力します。

  8. 「コレクションにレスポンスを格納」で、レスポンスを格納するコレクション名を入力します(オプション)。

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

Webサービス参照がWebサービス参照リポジトリに追加されます。

Webサービス参照リポジトリの使用

Webサービス参照がWebサービス参照リポジトリに格納されます。

Webサービス参照リポジトリにアクセスするには、次のステップを実行します。

  1. 「作業領域」ホームページで、「アプリケーション・ビルダー」アイコンをクリックします。

  2. アプリケーションを選択します。

    アプリケーション・ビルダーが表示されます。

  3. 「共有コンポーネント」をクリックします。

    共有コンポーネント・ページが表示されます。

  4. 「ロジック」で、「Webサービス参照」をクリックします。

    Webサービス参照ページが表示されます。

    ページ上部の「ナビゲーション」バーを使用して、Webサービス参照の検索またはページ表示の変更を行います。使用可能なオプションは次のとおりです。

    • Webサービス参照: 参照名に大/小文字を区別しない問合せを入力して、「実行」をクリックします。すべてのWebサービス参照を表示するには、フィールドを空白のままにして「実行」をクリックします。

    • ビュー: 表示モードを選択して「実行」をクリックします。使用可能なオプションは次のとおりです。

      • アイコン(デフォルト): 各Webサービス参照を大きいアイコンとして表示します。Webサービス参照を編集するには、該当するアイコンをクリックします。

      • 詳細 : 各Webサービス参照をレポートで1行に表示します。

  5. 「ビュー」リストから「詳細」を選択して、「実行」をクリックします。

  6. 「詳細」ビューでは、次の操作を実行できます。

    • 参照名をクリックして参照を編集します。

    • 「実行」アイコンをクリックして参照をテストします。

    • 「ビュー」アイコンをクリックして参照に関する詳細を表示します。このオプションは、手動作成されたWebサービス参照には使用できないことに注意してください。

WSDLから作成されたWebサービス参照のテスト

Webサービス参照を作成した後、Webサービス参照のテスト・ページでテストできます。

Webサービス参照をテストするには、次のステップを実行します。

  1. Webサービス参照ページにナビゲートします。「Webサービス参照ページへのアクセス」を参照してください。

  2. 「ビュー」から、「詳細」を選択します。

  3. Webサービス参照名の横にある「 実行 」アイコンをクリックします。

    Webサービス参照のテスト・ページが表示されます。ページの上部に、Webサービス名とURLエンドポイントが表示されます。

  4. 「操作」から、実行する操作を選択します。

  5. 「入力パラメータ」で、適切な値を入力します。

  6. 「テスト」をクリックします。

    ページの下部に、メッセージ・リクエストとレスポンスが表示されます。

手動作成されたWebサービス参照のテスト

Webサービス参照を作成した後、Webサービス参照のテスト・ページでテストできます。

Webサービス参照をテストするには、次のステップを実行します。

  1. Webサービス参照ページにナビゲートします。「Webサービス参照ページへのアクセス」を参照してください。

  2. 「ビュー」から、「詳細」を選択します。

  3. Webサービス参照名の横にある「 実行 」アイコンをクリックします。

    Webサービス参照のテスト・ページが表示されます。ページの上部に、Webサービス名とURLエンドポイントが表示されます。

  4. 必要に応じて、「Basic認証」でユーザー名およびパスワードを入力します。

  5. 「SOAPエンベロープ」テキスト領域では、オプションで、SOAPリクエスト・エンベロープを編集します。

  6. 「テスト」をクリックします。

    ページの下部に、メッセージ・リクエストとレスポンスが表示されます。

Webサービスでの入力フォームとレポートの作成

Webサービスのフォームとレポートの作成ウィザードでは、入力フォーム、送信ボタンおよび結果を表示するレポートが作成されます。WSDLからWebサービス参照を作成した直後、または新しいページを追加して、このウィザードを実行できます。

このウィザードは、Webサービスの結果が非スカラーであることが予想される場合に使用します。Amazon社のWebサービスがよい例です。このWebサービスでは、入力フォームに入力された検索基準に基づいて多くの結果が戻されます。

参照を作成した後のフォームとレポートの作成

Webサービス参照を作成した後に、フォームとレポートを作成するには、次のステップを実行します。

  1. Webサービス参照を作成します。「WSDLに基づいたWebサービス参照の作成」を参照してください。

  2. Webサービス参照が追加された後で、「Webサービスのフォームとレポートの作成」を選択します。

  3. 「サービスと操作の選択」で、次の操作を実行します。

    1. Webサービス参照: Webサービス参照を選択します。

    2. 操作: 実行方法を選択します。

  4. 「ページおよびリージョン属性」で、表示された属性を確認します。指定したページが存在しない場合は、ウィザードによってページが作成されます。

  5. 「入力アイテム」で、次の操作を実行します。

    1. フォームに追加するアイテムを指定します。アイテムを含めるには、「作成」列で「はい」を選択します。アイテムを含めない場合は、「いいえ」を選択します。

    2. 必要に応じて、アイテム・ラベルを編集します。

  6. 該当する場合、Basic認証に「アイテム名」および「アイテム・ラベル」を指定します。このステップは、Basic認証が作成時にこのWebサービス参照に対して指定された場合にのみ表示されることに注意してください。

  7. ウィンドウ・サービスの結果で、次の操作を実行します。

    1. 一時結果セット名: Webサービスの結果を格納するコレクションの名前を入力します。

    2. レポート対象の結果ツリー: 作成されるXML文書(レポートに含める情報を含む)の一部を選択します。

  8. 「表示する結果パラメータ」で、レポートに含めるパラメータを選択します。

  9. 「終了」をクリックします。

新しいページの追加によるフォームとレポートの作成

既存のWebサービス参照がある場合は、新しいページを追加して、入力フォームとレポートを作成できます。

新しいページを追加して、フォームとレポートを作成するには、次のステップを実行します。

  1. Webサービス参照を作成します。「WSDLに基づいたWebサービス参照の作成」を参照してください。

  2. 新しいページを作成します。「アプリケーション内のページの管理」を参照してください。

    「ページの作成」ウィザードで、次のステップを実行します。

    1. フォーム」を選択します。

    2. 「Webサービスのフォームとレポート」を選択します。

  3. 「サービスと操作の選択」で、次の操作を実行します。

    1. Webサービス参照: Webサービス参照を選択します。

    2. 操作: 実行方法を選択します。

  4. 「ページおよびリージョン属性」で、ページとリージョン属性を確認します。指定したページが存在しない場合は、ウィザードによってページが作成されます。

  5. 「入力アイテム」で、次の操作を実行します。

    1. フォームに追加するアイテムを指定します。アイテムを含めるには、「作成」列で「はい」を選択します。アイテムを含めない場合は、「いいえ」を選択します。

    2. 必要に応じて、アイテム・ラベルを編集します。

  6. 該当する場合、Basic認証に「アイテム名」および「アイテム・ラベル」を指定します。このステップは、Basic認証が作成時にこのWebサービス参照に対して指定された場合にのみ表示されることに注意してください。

  7. 画面に表示されるステップに従います。

  8. 「終了」をクリックします。

Webサービスでのフォームの作成

Webサービスのフォームの作成ウィザードでは、フォームと送信ボタンが作成されます。WSDLのWebサービス参照を作成した後に、またはページ定義から、このウィザードを実行できます。

このウィザードは、Webサービスの結果がスカラーであることが予想される場合に使用します。株価を調べるWebサービスがよい例です。入力は銘柄記号で、出力はスカラーの適正価格であるためです。

参照を作成した後のフォームの作成

Webサービス参照を作成した後に、フォームを作成するには、次のステップを実行します。

  1. Webサービス参照を作成します。「WSDLに基づいたWebサービス参照の作成」を参照してください。

  2. Webサービス参照が追加された後で、「Webサービスのフォームの作成」を選択します。

  3. 「サービスと操作の選択」で、次の操作を実行します。

    1. Webサービス参照: Webサービス参照を選択します。

    2. 操作: 実行方法を選択します。

  4. 「ページおよびリージョン属性の指定」で、ページとリージョン属性を確認します。指定したページが存在しない場合は、ウィザードによってページが作成されます。

  5. 「入力パラメータのアイテム」で、次の操作を実行します。

    1. 追加するアイテムを指定します。アイテムを含めるには、「作成」列で「はい」を選択します。アイテムを含めない場合は、「いいえ」を選択します。

    2. 必要に応じて、アイテム・ラベルを編集します。

  6. 「出力パラメータのアイテム」で、次の操作を実行します。

    1. 追加する必要があるアイテムを指定します。アイテムを含めるには、「作成」列で「はい」を選択します。アイテムを含めない場合は、「いいえ」を選択します。

    2. 必要に応じて、アイテム・ラベルを編集します。

  7. 該当する場合、Basic認証に「アイテム名」および「アイテム・ラベル」を指定します。

    このステップは、Webサービス参照を作成したときに、Basic認証がこのWebサービス参照に対して指定された場合にのみ表示されることに注意してください。

  8. 「終了」をクリックします。

新しいページの追加によるフォームの作成

WSDLから作成された既存のWebサービス参照がある場合は、新しいページを追加して、フォームを作成できます。

新しいページを追加して、フォームを作成するには、次のステップを実行します。

  1. Webサービス参照を作成します。「WSDLに基づいたWebサービス参照の作成」を参照してください。

  2. 新しいページを作成します。「アプリケーション内のページの管理」を参照してください。

    「ページの作成」ウィザードで、次のステップを実行します。

    1. フォーム」を選択します。

    2. 「Webサービスのフォーム」を選択します。

  3. 「Webサービス参照と操作」で、Webサービス参照および実行する操作を選択します。

  4. 「ページおよびリージョン属性の指定」で、ページとリージョン属性を確認します。指定したページが存在しない場合は、ウィザードによってページが作成されます。

  5. 「入力パラメータのアイテム」で、次の操作を実行します。

    1. 追加する必要があるアイテムを指定します。アイテムを含めるには、「作成」列で「はい」を選択します。アイテムを含めない場合は、「いいえ」を選択します。

    2. 該当する場合、Basic認証に「アイテム名」および「アイテム・ラベル」を指定します。

      このステップは、Webサービス参照を作成したときに、Basic認証がこのWebサービス参照に対して指定された場合にのみ表示されることに注意してください。

  6. 「出力パラメータのアイテム」で、次の操作を実行します。

    1. 追加する必要があるアイテムを指定します。アイテムを含めるには、「作成」列で「はい」を選択します。アイテムを含めない場合は、「いいえ」を選択します。

    2. 必要に応じて、アイテム・ラベルを編集します。

  7. 「終了」をクリックします。

プロセスとしてのWebサービスの起動

ページ上で、Webサービスをプロセスとして実装することもできます。このプロセスを実行すると、リクエストがサービス・プロバイダに送信されます。その後で、レポートにリクエスト結果を表示できます。

Webサービスをプロセスとして起動するには、次のステップを実行します。

  1. 新しいページを作成します。「アプリケーション内のページの管理」を参照してください。

    「ページの作成」ウィザードで、次のステップを実行します。

    1. 空白ページ」を選択します。

    2. タブの使用を確認するプロンプトが表示されたら、「いいえ」を選択します。

  2. 「ページ定義」にナビゲートします。「ページ定義へのアクセス」を参照してください。

  3. 「ページ・レンダリング」の「プロセス」で、「作成」アイコンをクリックします。

    「ページ・プロセスの作成」ウィザードが表示されます。

  4. プロセスのカテゴリから、「Webサービス」を選択します。

  5. プロセス名、順序およびプロセス・ポイントを指定します。

  6. Webサービス参照を選択します。

    Web参照がWSDLから作成された場合、次の追加のステップを実行します。

  7. Webサービス参照および実行する操作を選択します。

  8. プロセスを定義します。「Webサービスの出力パラメータ」でオプションを選択すると、結果をコレクションまたはページ上のアイテムに格納できます。

    1. コレクションに結果を格納するには、次のステップを実行します。

      • 「結果の格納場所」で、「コレクション」を選択します。

      • 「値」フィールドにコレクションの名前を入力します。

    2. ページ上のアイテムに結果を格納するには、次のステップを実行します。

      • 「結果の格納場所」で、「アイテム」を選択します。

      • 表示されるフィールドに該当するアイテムの値を入力します。

  9. 「プロセスの作成」をクリックします。

レポートでのWebサービス結果の表示

Webサービスのリクエスト結果を表示するレポートを作成するには、次のステップを実行します。

  1. 「ページ定義」にナビゲートします。「ページ定義へのアクセス」を参照してください。

  2. 「リージョン」で、「作成」アイコンをクリックします。

    「リージョンの作成」ウィザードが表示されます。

  3. 「リージョン・タイプ」で、「レポート」を選択します。

  4. 「レポート実装」で、「Webサービスの結果を含むコレクションのレポート」を選択します。「リージョン属性を指定」で、リージョン・タイトルを入力し、オプションでリージョン属性を編集します。

  5. Web参照が手動で作成されたか、またはWSDLから作成されたかを選択します。

  6. Webサービス参照がWSDLから作成された場合、次のステップを実行します。

    1. 「Webサービス参照と操作」で、Webサービス参照および実行する操作を選択します。

    2. 「レポート対象の結果ツリー」で、作成されるXML文書(レポートに含める情報を含む)の一部を選択します。

    3. 「結果パラメータ」で、次の操作を実行します。

      • 「一時結果セット名」に、Webサービスの結果を格納するコレクションの名前を入力します。

      • 該当するパラメータを選択した後、選択解除します。

  7. Webサービス参照が手動で作成された場合、次のステップを実行します。

    1. Webサービス参照を選択します。

    2. SOAPスタイルを選択します。

    3. メッセージの書式を選択します。

    4. レポートの対象となるノードへのXPath式を入力します。

    5. SOAPレスポンス・エンベロープのネームスペースを入力して、「次へ」をクリックします。

    6. レスポンス・メッセージが格納されているコレクション名を入力します。

    7. レポートに含めるパラメータ名を入力します。

  8. 「SQLレポートの作成」をクリックします。

Webサービス・プロセスの編集

WSDLから作成されたWebサービス参照のWebサービス・タイプのプロセスを作成した後で、Webサービス・プロセスを編集すると、入力パラメータを静的な値にマップできます(たとえば、キーを渡すなど)。

Webサービス・プロセスを編集するには、次のステップを実行します。

  1. Webサービス・プロセスを作成します。詳細は、「プロセスとしてのWebサービスの起動」を参照してください。

  2. Webサービス・プロセスが含まれているページ定義にナビゲートします。

  3. プロセス名を選択します。

    ページ・プロセスの編集ページが表示されます。

  4. 入力パラメータを静的な値にマップするには、次のステップを実行します。

    1. 「Webサービスの入力パラメータ」までスクロールします。

    2. 該当するパラメータ名の横にある「値」フィールドに値を入力します。

  5. 「変更の適用」をクリックします。

Webサービス参照履歴の表示

「Webサービス履歴」では、カレント・アプリケーションのWebサービス参照の変更が、アプリケーションID、Webサービス参照名、開発者および日付ごとに表示されます。

Webサービス参照の変更履歴を表示するには、次のステップを実行します。

  1. 「作業領域」ホームページで、「アプリケーション・ビルダー」アイコンをクリックします。

  2. アプリケーションを選択します。

    アプリケーション・ビルダーが表示されます。

  3. 「共有コンポーネント」をクリックします。

    共有コンポーネント・ページが表示されます。

  4. 「ロジック」で、「Webサービス参照」をクリックします。

  5. 「履歴」をクリックします。


注意:

Webサービス参照ページに「履歴」ボタンが表示されるのは、Webサービス参照を作成した後のみです。

フォームおよびレポートでのBLOBサポートについて

Oracle Application Expressでは、リリース3.1から宣言的なBLOBサポートが提供されているため、開発者はフォームでのファイルのアップロード、およびレポートでのファイルのダウンロードや表示を行うことができます。BLOBの表示とダウンロードは、 PL/SQLを使用して手続き的に作成することもできます。このセクションでは、ファイルのアップロード、ダウンロードおよび表示を行う方法と、BLOB列に格納されているファイルを正しく管理するために重要となる追加のファイル属性(MIMEタイプやファイル名など)の管理方法について説明します。この機能を使用すると、簡単にOracle Application Expressアプリケーションを拡張して、イメージ、ドキュメント、ビデオなどのファイルを管理できます。

このセクションの構成は次のとおりです。

フォームでのBLOBについて

フォームを作成(アプリケーションの作成ウィザードを使用して、フォーム・タイプまたはレポートとフォーム・タイプのページを作成するか、あるいはフォーム・タイプのリージョンを作成)した場合や、既存のフォームにアイテムを追加した場合、ソースがBLOBタイプのデータベース列であるアイテムはすべてファイル参照タイプのアイテムになります。INSERTに対してフォームがコールされると、ユーザーの選択したファイルがBLOB列にロードされます。更新に対してフォームがコールされると、「参照」ボタンの右にダウンロード・リンクが表示されます。これにより、ユーザーがファイルをダウンロードできるようになります。

BLOBの移入とダウンロードの提供

デフォルトのBLOBサポートでは、一般的なアプリケーションでBLOBを効果的に管理するために必要とされるすべての情報が提供されているわけではありません。 列がBLOBであるという情報に加えて、ファイルの詳細情報も提供されると、エンド・ユーザーの使いやすさが向上します。この追加情報の管理を簡単に行うために、(DB_COLUMNに加えて)追加コンポーネントを使用できるようにアイテムのソース属性が拡張されています。

位置 属性 必須 説明
1 BLOBを含む列 はい BLOBタイプの列の名前(大/小文字が区別されます)。
2 MIMEタイプ列 いいえ MIMEタイプを格納するために使用する列名(大/小文字が区別されます)。
3 ファイル名列 いいえ BLOBのファイル名を格納するために使用する列名(大/小文字が区別されます)。ユーザーがファイルをダウンロードするときにNULLの場合は、この列名がデフォルトで使用されます。
4 最終更新列 いいえ BLOBの最終更新日付を格納するために使用する列名(大/小文字が区別されます)。これを指定すると、ファイルをダウンロードする際のHTTPヘッダーに最終変更日が示され、BLOBをブラウザにキャッシュできるようになります。指定しない場合は、ファイルをブラウザにキャッシュできない場合があります。
5 キャラクタ・セット列 いいえ BLOBのキャラクタ・セットを格納するために使用する列名(大/小文字が区別されます)。キャラクタ・セットのエンコーディングを維持する必要がある場合など、アジア言語で最も使用されます。
6 コンテンツ配置 いいえ inlineまたはattachmentを指定します。その他の値はすべて無視されます。attachmentがデフォルト値です。inlineMIMEタイプが指定されている場合のみ指定できます。
7 ダウンロード・テキスト いいえ ダウンロード・リンクに使用する文字列。何も指定されていない場合は、Downloadが使用されます。これは置換をサポートしています(翻訳されたアプリケーションに有効です)。

次に例を示します。

RESUME:RESUME_MIMETYPE:RESUME_FILENAME:RESUME_LAST_UPDATE::attachment:Resume

ファイル参照タイプのアイテムを使用しており、そのソースが1つ以上のコロンを含むデータベース列(RESUME:など)である場合、 「ソース」の下にリンク「BLOBダウンロードの書式マスク」が表示されます。このポップアップは、BLOB書式に必要なすべてのパラメータを入力するために役立ちます。

最低でも、1つ以上の末尾のコロンを使用してデータベースのBLOB列を指定する必要があります(RESUME:など)。これにより、Oracle Application Expressリリース3.0.1との互換性が維持されます。


ヒント:

実際の例を確認するには、サンプル・アプリケーションのページ6(「Add/Modify Products」)に移動し、アイテムP6_PRODUCT_IMAGEを確認します。「デモンストレーション・アプリケーションの実行」を参照してください。

この追加情報を提供するには、MIMEタイプ属性とファイル名属性を格納して追跡するための列を実表に追加することをお薦めします。この追加は表を拡張するだけで簡単に行うことができます。次に例を示します。

ALTER TABLE emp ADD 
   (ATTACH_MIMETYPE     VARCHAR2(255),
    ATTACH_FILENAME     VARCHAR2(255),
    ATTACH_LAST_UPDATE  DATE);

フォームを手動で作成している場合も、この機能を利用できます。 DML_PROCESS_ROWタイプのDMLプロセスを使用して、ファイル・タイプ(ファイル参照)のアイテム内に記述されている書式をページ上で使用します。この処理により、表名と主キーの列が決定されます。

BLOBの表示

作業中のBLOBがイメージである場合は、そのイメージをフォームでも表示できます。「手続き的なBLOBの使用」を参照してください。

イメージ参照の削除

ファイル参照の使用時はNULLへの設定が存在しないため、イメージ参照を削除するメカニズムを提供する必要がある場合は、イメージを削除する特別なボタン(必要な列を無効化する機能を持つボタン)を含める必要があります。次の例を参照してください。

UPDATE demo_product_info
   SET product_image = NULL,
       MIMETYPE = NULL,
       FILENAME = NULL,
       IMAGE_LAST_UPDATE = NULL,
       CHARSET = NULL
 WHERE product_id = :P6_PRODUCT_ID;

ヒント:

実際の例を確認するには、サンプル・アプリケーションのページ6(「Add/Modify Products」)→「Delete Image」プロセスに移動します。「デモンストレーション・アプリケーションの実行」を参照してください。

レポートでのBLOBサポートについて

Oracle Application Expressでは、従来のレポートと対話モード・レポートの両方に対するBLOBサポートが提供されています。ウィザードを使用してレポートを作成し、BLOBタイプの列を含める場合は、基本的なサポートが含まれます。ダウンロード機能を使いやすくするために、生成後に詳細情報を追加する必要があります。

ダウンロード・リンクの提供

レポートにダウンロード・リンクを容易に含めることができるように、レポートにはBLOBの長さ(dbms_lob.getlength(RESUME)など)を選択します。長さが0の場合、BLOBNULLとなり、ダウンロード・リンクは表示されません。同様に、ダウンロード・リンクの書式を設定できる、日付または数に対する書式マスクを指定します。DOWNLOAD書式は、次の例のように3つ以上のパラメータを指定する必要があるという点で他の書式マスクより複雑です。

DOWNLOAD:EMP:RESUME:EMPNO

次の表に、DOWNLOAD書式のパラメータの説明を示します。

位置 属性 必須 説明
1 DOWNLOAD はい DOWNLOADレポート書式マスクを示します。
2 表名 はい BLOBタイプのターゲット列を含む表の名前(大/小文字が区別されます)。
3 BLOBを含む列 はい BLOBタイプの列の名前(大/小文字が区別されます)。
4 主キー列1 はい 主キー列1の名前(大/小文字が区別されます)。
5 主キー列2 いいえ 主キー列2の名前(大/小文字が区別されます)。
6 MIMEタイプ列 いいえ MIMEタイプを格納するために使用する列名(大/小文字が区別されます)。
7 ファイル名列 いいえ BLOBのファイル名を格納するために使用する列名(大/小文字が区別されます)。ユーザーがファイルをダウンロードするときにNULLの場合は、この列名がデフォルトで使用されます。
8 最終更新列 いいえ BLOBの最終更新日付を格納するために使用する列名(大/小文字が区別されます)。これを指定すると、ファイルをダウンロードする際のHTTPヘッダーに最終変更日が示され、BLOBをWebブラウザにキャッシュできるようになります。指定しない場合は、ファイルをブラウザにキャッシュできない場合があります。
9 キャラクタ・セット列 いいえ BLOBのキャラクタ・セットを格納するために使用する列名(大/小文字が区別されます)。キャラクタ・セットのエンコーディングを維持する必要がある場合など、アジア言語で最も使用されます。
10 コンテンツ配置 いいえ inlineまたはattachmentを指定します。その他の値はすべて無視されます。MIMEタイプが提供され、ファイルが表示可能なタイプである場合は、ファイルが表示されます。MIMEタイプが提供されていない場合、またはファイルをインラインで表示できない場合、ユーザーはダウンロードを行うように求められます。
11 ダウンロード・テキスト いいえ ダウンロード・リンクに使用する文字列。何も指定されていない場合は、Downloadが使用されます。これは置換をサポートしています(翻訳されたアプリケーションに有効です)。

次に例を示します。

DOWNLOAD:EMP:RESUME:EMPNO::RESUME_MIMETYPE:RESUME_FILENAME:RESUME_LAST_UPDATE::attachment:Resume

DOWNLOAD:で始まる書式マスクを使用するレポート列がある場合、書式の下にリンク「BLOBダウンロードの書式マスク」が表示されます。このポップアップは、DOWNLOAD書式に必要なすべてのパラメータを入力するために役立ちます。


ヒント:

実際の例を確認するには、サンプル・アプリケーションのページ29(「Master Detail」)→「Items for Order #&P29_ORDER_ID. 」リージョン→「Product Image」列に移動します。「デモンストレーション・アプリケーションの実行」を参照してください。

BLOBの表示

作業中のBLOBがイメージである場合は、レポートでも表示できます。そのためには、新しいレポート書式マスク「IMAGE」を使用します。 MIMEタイプに関係なく、レポートでは常にBLOBの表示が試行されます。BLOBのレンダリングを行うことができない場合は、壊れたイメージが表示されます。

次の表に、IMAGE書式マスクのパラメータの説明を示します。

位置 属性 必須 説明
1 IMAGE はい IMAGEレポート書式マスクを示します。
2 表名 はい BLOBタイプのターゲット列を含む表の名前(大/小文字が区別されます)。
3 BLOBを含む列 はい BLOBタイプの列の名前(大/小文字が区別されます)。
4 主キー列1 はい 主キー列1の名前(大/小文字が区別されます)。
5 主キー列2 いいえ 主キー列2の名前(大/小文字が区別されます)。
6 MIMEタイプ列 いいえ MIMEタイプを格納するために使用する列名(大/小文字が区別されます)。
7 ファイル名列 いいえ IMAGE書式には使用されませんが、 書式をIMAGEとDOWNLOAD間で簡単に変更できるように残されています。
8 最終更新列 いいえ BLOBの最終更新日付を格納するために使用する列名(大/小文字が区別されます)。これを指定すると、ファイルをダウンロードする際のHTTPヘッダーに最終変更日が示され、BLOBをWebブラウザにキャッシュできるようになります。指定しない場合は、ファイルをブラウザにキャッシュできない場合があります。
9 キャラクタ・セット列 いいえ IMAGE書式には使用されませんが、 書式をIMAGEとDOWNLOAD間で簡単に変更できるように残されています。
10 コンテンツ配置 いいえ IMAGE書式には使用されませんが、 書式をIMAGEとDOWNLOAD間で簡単に変更できるように残されています。
11 代替テキスト いいえ イメージに関連付けられたaltタグに使用する文字列。

次に例を示します。

IMAGE:EMP:RESUME:EMPNO::RESUME_MIMETYPE:RESUME_FILENAME:RESUME_LAST_UPDATE::attachment:Resume

「IMAGE:」で始まる書式マスクを使用するレポート列がある場合、書式の下にリンク「BLOBダウンロードの書式マスク」が表示されます。このポップアップは、IMAGE書式に必要なすべてのパラメータを入力するために役立ちます。

BLOBの手続き的な操作

埋込み方法を使用してダウンロード・リンクを提供するかわりに、APEX_UTIL.GET_BLOB_FILE_SRCファンクションを使用することもできます。この方法の利点は、イメージ表示の体裁を(heightとwidthタグで)より具体的に指定できることです。この方法は、有効なOracle Application Expressセッションからコールされた場合にのみ有効です。また、BLOBを記述するパラメータを、アプリケーション内の有効なアイテムの書式としてリストする必要もあります。これにより、ファンクションからそのアイテムが参照されます。


参照:

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