Oracle HTML DBアプリケーションには、データベースに格納されているファイルをアップロードおよびダウンロードする機能を含めることができます。 このチュートリアルでは、ファイルのアップロードおよびダウンロード用のリンクを持つフォームおよびレポートの作成方法、ドキュメントに関する追加属性を格納する表の作成および移入方法、カスタム表にドキュメントをダウンロードするメカニズムの作成方法について説明します。
この章の内容は次のとおりです。
最初に、ページ2にアップロード・フォームを含めると想定して、「アプリケーションを作成」ウィザードを使用して新しいアプリケーションを作成します。
「アプリケーションを作成」ウィザードでアプリケーションを作成するには、次の手順を実行します。
「作業領域」ホームページにナビゲートします。
「アプリケーションを作成」をクリックします。
「作成方法を選択」で、「最初から」を選択して「次へ」をクリックします。
「名前」に、Download App
と入力して「次へ」をクリックします。
「タブ」で、「タブなし」を選択して「次へ」をクリックします。
「ページ名」で、デフォルトを受け入れて「次へ」をクリックします。
「テーマ」で、「テーマ2」を選択して「次へ」をクリックします。
「アプリケーションを作成」をクリックします。
アプリケーションを作成した後、次の手順では、ドキュメントをアップロードするフォームを作成します。 次の演習では、HTMLリージョンに、ファイルのアップロード・アイテムとボタンが含まれるフォームを作成します。 ボタンによって、ページが送信され、ユーザーが同じページに戻されます。
このセクションの内容は次のとおりです。
HTMLリージョンを作成するには、次の手順を実行します。
ページ2のページ定義にナビゲートします。
「リージョン」で、「作成」アイコンをクリックします。
「リージョン・タイプを指定」で、「HTML」を選択して「次へ」をクリックします。
「リージョン・タイプ」で、「HTML」を選択して「次へ」をクリックします。
「リージョン・タイトル」で、「ファイルを送信」と入力して「次へ」をクリックします。
残りのデフォルトを受け入れて「リージョンを作成」をクリックします。
ファイルのアップロード・アイテムを作成するには、次の手順を実行します。
ページ2のページ定義にナビゲートします。
「アイテム」で、「作成」アイコンをクリックします。
「アイテム・タイプを選択」で、「ファイル参照」を選択して「次へ」をクリックします。
「アイテム名」に、P2_FILE_NAME
と入力して「次へ」をクリックします。
残りのデフォルトを受け入れて「アイテムを作成」をクリックします。
ボタンを作成するには、次の手順を実行します。
「ボタン」で、「作成」アイコンをクリックします。
「リージョン」で、「ファイルの送信1.10」を選択して「次へ」をクリックします。
「タスク」で、「リージョン位置にボタンを作成」を選択して「次へ」をクリックします。
「ボタン名およびラベルを指定」で、次の手順を実行します。
「ボタン名」に、Submit
と入力します。
残りのデフォルトを受け入れます。
「次へ」をクリックします。
「ボタン・テンプレート」で、デフォルトを受け入れて「次へ」をクリックします。
「表示プロパティ」で、デフォルトを受け入れて「次へ」をクリックします。
「ブランチ」で、次の手順を実行します。
「ページにブランチ」で、ページ2を選択します。
「ボタンを作成」をクリックします。
「ページを実行」アイコンをクリックして、ページを実行します。
ユーザー名とパスワードを要求されたら、次の手順を実行します。
「ユーザー名」で、作業領域の名前を入力します。
「パスワード」で、作業領域のパスワードを入力します。
「ログイン」をクリックします。
ページを実行すると、図8-1のように表示されます。
ドキュメントをアップロードするフォームを作成した後、次の手順では、ドキュメントをダウンロードするリンクを含むドキュメント表のレポートを作成します。 ファイル・アップロードのアイテム・タイプを使用すると、アップロードするファイルはwwv_flow_file_objects$
と呼ばれる表に格納されます。 すべての作業領域は、HTMLDB_APPLICATION_FILES
と呼ばれるビューを介した、この表へのアクセス権を所有しています。
このセクションの内容は次のとおりです。
HTMLDB_APPLICATION_FILES
のレポートを作成するには、次の手順を実行します。
ページ2のページ定義にナビゲートします。
「リージョン」で、「作成」アイコンをクリックします。
「リージョン・タイプを指定」で、「レポート」を選択して「次へ」をクリックします。
「レポート実装」で、「SQLレポート」を選択して「次へ」をクリックします。
「リージョン・タイトル」で、「アップロードされたファイル」
と入力して「次へ」をクリックします。
「ページ・リージョン・ソース」で、次のSQL問合せを入力します。
SELECT id,name FROM HTMLDB_APPLICATION_FILES
「リージョンを作成」をクリックします。
ページを実行します。
図8-2に示すように、アップロード済のすべてのドキュメントが作成したレポートに表示されます。 次に、ドキュメントをダウンロードするリンクを設定します。
ドキュメントをダウンロードするリンクをレポートに設定するには、次の手順を実行します。
ページ2のページ定義にナビゲートします。
「リージョン」で、アップロード済ファイルの横にある「Q」をクリックします。
「レポート列属性」で、ID
列の横にある「編集」アイコンをクリックします。
「列リンク」までスクロールします。 「列リンク」で、次の手順を実行します。
「リンク・テキスト」フィールドに、次のように入力します。
ダウンロード
「ターゲット」で、「URL」を選択します。
「URL」フィールドに、次のように入力します。
p?n=#ID#
「変更を適用」をクリックします。
ページを実行すると、図8-3のように表示されます。
次に、アップロードするドキュメントに関する追加情報を格納する別の表を作成します。 この例では、次の手順を実行します。
情報を取得するためのアイテムをアップロード・フォームに追加します。
ファイル名とともに、この情報を挿入するプロセスを追加します。
アップロード済ファイルのSQLレポートを変更して、追加情報を含む表に結合します。
このセクションの内容は次のとおりです。
アップロード済ファイルに関する追加情報を格納する表を作成するには、次の手順を実行します。
「作業領域」ホームページにナビゲートします。
「SQL Workshop」をクリックします。
「SQLコマンド・プロセッサ」をクリックします。
「SQL文」フィールドに、次のように入力します。
CREATE TABLE file_subjects(name VARCHAR2(4000), subject VARCHAR2(4000) );
「SQLを実行」をクリックします。
ドキュメントの件名を取得するアイテムを作成するには、次の手順を実行します。
ページ2のページ定義にナビゲートします。
「アイテム」で、「作成」アイコンをクリックします。
「アイテム・タイプを選択」で、「テキスト」を選択して「次へ」をクリックします。
「テキスト制御を選択」で、「テキスト・フィールド」を選択して「次へ」をクリックします。
「アイテム名および表示位置を指定」で、次の手順を実行します。
「アイテム名」に、P2_SUBJECT
と入力します。
「リージョン」リストから、「アップロードされたファイル」を選択します。
残りのデフォルトを受け入れて「次へ」をクリックします。
「アイテム属性を指定」で、次の手順を実行します。
「ラベル」フィールドに、Subject
と入力します。
残りのデフォルトを受け入れます。
「次へ」をクリックします。
「アイテムを作成」をクリックします。
件名情報を新しい表に挿入するプロセスを作成するには、次の手順を実行します。
ページ2のページ定義にナビゲートします。
「ページ・プロセス」の「プロセス」で、「作成」アイコンをクリックします。
「プロセス・タイプを選択」で、「PL/SQL」をクリックします。
「プロセス属性を指定」で、次の手順を実行します。
「名前」に、Insert
と入力します。
「ポイント」で、「送信時 - 計算および検証の後」を選択します。
「タイプ」で、「PL/SQL無名ブロック」を選択します。
「次へ」をクリックします。
「ページ・プロセスを指定」で、次のPL/SQLプロセスを入力します。
INSERT INTO file_subjects(name, subject) VALUES(:P2_FILE_NAME,:P2_SUBJECT);
「メッセージを指定」で、次の手順を実行します。
「成功メッセージ」フィールドに、次のように入力します。
Subject inserted
「失敗メッセージ」フィールドに、次のように入力します。
Error inserting subject
「次へ」をクリックします。
「対象ボタン」で、「送信」を選択します。
「プロセスを作成」をクリックします。
SQLレポート・リージョンを変更して、追加属性表に結合するには、次の手順を実行します。
「リージョン」で、「アップロードされたファイル」を選択します。
リージョン・ソースを次と置き換えます。
SELECT w.id,w.name,s.subject FROM HTMLDB_APPLICATION_FILES w,file_subjects s WHERE w.name = s.name
「変更を適用」をクリックします。
ページを実行します。 図8-4に示すように、アップロード済ファイルのレポートには、件名列が表示されるようになります。
アップロード済ドキュメントを自分のスキーマが所有する表に格納する場合があります。 たとえば、アップロード済ドキュメントにOracle Text索引を作成する場合、ドキュメントはカスタム表に格納する必要があります。
カスタム表にドキュメントを格納するには、次の手順を実行します。
ドキュメントを格納するBLOB
型の列を追加します。
プロセスを変更して、カスタム表にドキュメントを挿入します。
BLOB列をfile_subjects
表に追加するには、次の手順を実行します。
「作業領域」ホームページにナビゲートします。
「SQL Workshop」をクリックします。
「SQLコマンド・プロセッサ」をクリックします。
次のSQL文を入力します。
ALTER TABLE file_subjects ADD(id number,blob_content BLOB,mime_type varchar2(4000) );
「SQLを実行」をクリックします。
プロセスを変更して、file_subjects
表にドキュメントを挿入するには、次の手順を実行します。
ページ2のページ定義にナビゲートします。
「ページ・プロセス」で、「挿入」を選択します。
「ソース」で、プロセスを次と置き換えます。
IF ( :P2_FILE_NAME is not null ) THEN INSERT INTO file_subjects(id,NAME, SUBJECT, BLOB_CONTENT, MIME_TYPE) SELECT ID,:P2_FILE_NAME,:P2_SUBJECT,blob_content,mime_type FROM HTMLDB_APPLICATION_FILES WHERE name = :P2_FILE_NAME; DELETE from HTMLDB_APPLICATION_FILES WHERE name = :P2_FILE_NAME; END IF;
「変更を適用」をクリックします。
ドキュメントがカスタム表に格納されるようになると、ドキュメントをダウンロードする方法を指定する必要があります。 これを行うには、プロシージャを作成して、そのプロシージャに対する実行権限を擬似ユーザーHTMLDB_PUBLIC_USER
に付与します。
これを実行するには、次の内容を変更する必要があります。
SQLレポート・リージョン(HTMLDB_APPLICATION_FILES
ビューに結合しないようにするため)
SQLレポートのID列に指定されたURL(pプロシージャを実行するかわりに、新しいプロシージャを実行するため)
プロシージャを作成して、file_subjects
表からドキュメントをダウンロードし、実行権限をpublicに付与するには、次の手順を実行します。
「SQL Workshop」にナビゲートします。
「SQLコマンド・プロセッサ」をクリックします。
「SQL文」フィールドに、次のように入力します。
CREATE OR REPLACE PROCEDURE download_my_file(p_file in number) AS v_mime VARCHAR2(48); v_length NUMBER; v_file_name VARCHAR2(2000); Lob_loc BLOB; BEGIN SELECT MIME_TYPE, BLOB_CONTENT, name,DBMS_LOB.GETLENGTH(blob_content) INTO v_mime,lob_loc,v_file_name,v_length FROM file_subjects WHERE id = p_file; -- -- set up HTTP header -- -- use an NVL around the mime type and -- if it is a null set it to application/octect -- application/octect may launch a download window from windows owa_util.mime_header( nvl(v_mime,'application/octet'), FALSE ); -- set the size so the browser knows how much to download htp.p('Content-length: ' || v_length); -- the filename will be used by the browser if the users does a save as htp.p('Content-Disposition: attachment; filename="'||substr(v_file_name,instr(v_file_name,'/')+1)|| '"'); -- close the headers owa_util.http_header_close; -- download the BLOB wpg_docload.download_file( Lob_loc ); end download_my_file; /
「SQLを実行」をクリックします。
「SQL文」フィールドに、次のように入力します。
GRANT EXECUTE ON download_my_file TO PUBLIC/
「SQLを実行」をクリックします。
SQLレポート・リージョンを変更して、HTMLDB_APPLICATION_FILES
ビューと結合しないようにするには、次の手順を実行します。
ページ2のページ定義にナビゲートします。
「リージョン」で、「アップロードされたファイル」を選択します。
リージョン・ソースを次と置き換えます。
SELECT s.id,s.name,s.subject FROM file_subjects s
「変更を適用」をクリックします。
ダウンロード・リンクを変更して、新しいダウンロード・プロシージャを使用するには、次の手順を実行します。
ページ2のページ定義にナビゲートします。
「リージョン」で、アップロード済ファイルの横にある「Q」をクリックします。
ID例の横にある「編集」アイコンをクリックします。
「列リンク」リージョンまでスクロールします。
既存のURLを次と置き換えます。
#OWNER#.download_my_file?p_file=#ID#
「変更を適用」をクリックします。