リリース 10g webutil...

26
Oracle Forms リリース 10g Webutil 導入ガイド Creation Date: Jan 30, 2003 Last Update: Sep 13, 2005 Version 1.2

Upload: doquynh

Post on 15-Mar-2018

485 views

Category:

Documents


27 download

TRANSCRIPT

Oracle Forms

リリース 10g

Webutil 導入ガイド

Creation Date: Jan 30, 2003

Last Update: Sep 13, 2005

Version 1.2

目次

目次 ......................................................................................................................................1

はじめに ...............................................................................................................................2 前提条件............................................................................................................................2 確認した環境.....................................................................................................................2 注意事項............................................................................................................................3

WebUtil 導入編....................................................................................................................4 準備 ...................................................................................................................................4 開発環境に対する設定 ......................................................................................................6 実行環境に対する設定 ......................................................................................................6

WebUtil適用のための基本ステップ .....................................................................................8

WebUtil 実装編.................................................................................................................. 11 C/S→Web用の機能 ......................................................................................................... 11 WebUtil で新しく提供される機能 ..................................................................................16 「C/S→Web」ケース・スタディ ...................................................................................18 その他のWebUtilのファンクション.................................................................................20 制限事項..........................................................................................................................21

導入に関するトラブル・シューティング ...........................................................................23

後に .................................................................................................................................24

Oracle Forms - Webutil 導入ガイド - 1

はじめに

Oracle Forms は、その前身である Developer/2000 Forms のころから、開発生産性の高い C/S

アプリケーション開発ツールとして利用されてきました。Forms は、昨今の IT 環境の Web

への移行に追従して、ほかには類を見ない、旧来のアプリケーション・ファイルをそのま

ま Web へ移行できる仕組み “Forms Server” を提供し、追加の開発コストとユーザーの教育

コストを 小限にして Web での実行を可能にしてきました。

しかし、この「C/S→Web」の変化による、環境やテクノロジーの違いのトレード・オフ

として、旧来、C/S 環境の Forms アプリケーションで使用してきた機能のうちのいくつかに

制限がかかってしまいました。それは、クライアント・マシンへのアクセスなどの機能で

す。C/S と Web のアーキテクチャの違いにより、C/S 環境のアプリケーションでのクライア

ント・マシンへのアクセスは、Web 環境では、アプリケーション・サーバー・マシンへの

アクセスとして機能します。また、C/S 時代の多くのクライアント・マシンが Windows で

あるのに対し、Web 環境では、アプリケーション・サーバー・マシンは必ずしも Windows

ではありません。こういった理由から、C/S 環境でのクライアント・マシンへのアクセス機

能がそのまま Web 環境で期待通りに動く保証はありません。

この制限を打開する解決策として、新しく WebUtil という機能が提供されました。この資

料では、この WebUtil によってもたらされる機能とその導入方法について説明します。

前提条件

この資料は、Forms の基本知識(設計時および実行時のアーキテクチャなど)を

理解されている読者を対象として記述しています。

Oracle Forms の基本情報については、下記のサイトを参照ください。 OTN(http://otn.oracle.co.jp/)のOracle Formsの製品ページ

http://otn.oracle.co.jp/products/forms/

また、WebUtil の概要については『WebUtil 概要』資料を参照ください。

確認した環境

本資料の作成にあたって、使用した動作確認環境は以下のとおりです。

- Oracle Developer Suite 10g(9.0.4) for MS Windows

- Oracle Developer Suite 10g(10.1.2) for MS Windows

- Oracle Application Server 10g(10.1.2) Forms/Reports Standalone Server for Solaris

※Oracle Forms 10g(10.1.2)は 2005 年 9 月 27 日現在、日本ではまだリリースされ

ておりません。日本では 2005 年 11 月以降リリースされる予定です。

Oracle Forms - Webutil 導入ガイド - 2

注意事項

本資料におけるディレクトリ名、実行ファイル名は Forms 10.1.2 の環境に準じ

た記述にしてあります。Forms 9.0.4 の場合は、以下に置き換えて読む必要があり

ます。

Forms 10.1.2 Forms 9.0.4

<Oracle_Home>¥forms → <Oracle_Home>¥forms90

frmcmp.sh → f90cmp.sh

frmcmp.exe → if90cmp.exe

forms.conf → forms90.conf

Oracle Forms - Webutil 導入ガイド - 3

WebUtil 導入編

ここでは、WebUtil の環境設定に関する情報を説明します。 準備

開発環境に対する設定

実行環境に対する設定

準備

以下の準備作業は、開発環境・実行環境に関係なく共通で必要な作業です。

必要なファイルのダウンロードと解凍 WebUtil 機能の導入にあたって、次のファイルが必要になります WebUtil 本体

OTN-J よりダウンロード可能です(2005 年 8 月現在、 新バージョンは 1.0.6

です)。

http://otn.oracle.co.jp/software/products/forms/index.html

ダウンロードした zip ファイルを <Oracle_Home>¥forms 以下に解凍します。

OLE連携用ファイル

http://sourceforge.net/projects/jacob-project/

からファイルをダウンロードします。ただし、バージョン 1.8 のものをダウ

ンロードしてください。1.9 以降のバージョンでは問題があることが報告さ

れています。ダウンロードしたzipファイルから

jacob.jar を <Oracle_Home>¥forms¥java に、

jacob.dll を <Oracle_Home>¥forms¥webutil に解凍します。

セキュリティ設定 <Oracle_Home>¥forms¥java¥frmwebutil.jar 内には

oracle.forms.webutil.common.TustedDomains.txt というファイルが格納されています。

このファイルのエントリによって、WebUtil 機能を利用可能なクライアント・マシ

ンを限定できます。デフォルトでは * が記述されていますが、ここを

*.yourDomain.com とすると、これにマッチするクライアント・ホスト以外では

WebUtil 機能を利用できなくなります(WUC-27 エラーが発生します)。

補足:この機能は、WebUtil のファイル・アップロード機能などの不正利用を防ぐ

ために追加されました。

Oracle Forms - Webutil 導入ガイド - 4

Jar に対するデジタル署名 <Oracle_Home>¥forms¥webutil¥sign_webutil.bat(または UNIX の場合は、

sign_webutil.sh)をテキスト・エディタで開きます。このファイル内のエントリを

適切に書き換えます。

次に、コマンドラインで現行ディレクトリを<Oracle_Home>¥forms¥webutil に移

動し、次のコマンドを実行します。 > sign_webutil.bat ..¥java¥jacob.jar > sign_webutil.bat ..¥java¥frmwebutil.jar

この一連のコマンドで、jar ファイルに署名が行われます(署名される前の状態

のファイルは、***.old という名前でバックアップされます)。

注意 1: jar ファイルのデジタル署名の有効期限は 360 日として設定されています。

この値を変更したい場合は、sign_webutil.bat/sh 内の VALIDDAYS パラメー

タの数値を書き換えます。

注意 2: カスタムのプラッガブル Java コンポーネント(PJC)を作成・利用してい

る場合は、その PJC を含む jar ファイルにも同じデジタル署名を行う必要が

あります。

データベースの準備 WebUtil によって提供される新しい機能「DB へのファイル転送」の際に使用さ

れる PL/SQL パッケージを作成します。このパッケージは、「DB へのファイル転送」

機能を使用しない場合は使用されないものですが、以後の作業で行う pll ファイル

のリコンパイルの際に、パッケージの有無のチェックが行われますので、使用し

ない場合でも作成しておく必要があります。

SQL*Plus を起動し、適切な DB ユーザーで接続します。以下のコマンドを入力

します。 @<Oracle_Home>¥forms¥create_webutil_db.sql

このコマンドにより、DBユーザーの所有物として、WEBUTIL_DBというPL/SQL

パッケージが作成されます。

webutil.pll のリコンパイル

UNIX 環境では次のようにします。

cd $ORACLE_HOME/forms $ORACLE_HOME/bin/frmcmp.sh webutil.pll userid=<username/pass@tns> Module_Type=LIBRARY Compile_All=YES ※ 実際に実行する際には、2 行目と 3 行目は続けて(一行のコマンドとして)実行してください ※ UNIX 環境では、事前に次の環境変数を正しく設定しておく必要があります

ORACLE_HOME、NLS_LANG、DISPLAY

Oracle Forms - Webutil 導入ガイド - 5

Windows 環境では次のようにします。 cd %ORACLE_HOME%¥forms frmcmp.exe webutil.pll userid=<username/pass@tns> Module_Type=LIBRARY Compile_All=YES ※ 実際に実行する際には、2 行目と 3 行目は続けて(一行のコマンドとして)実行してください

重要: pll のリコンパイル作業は必ず実施してください。pll が正しくリコンパイ

ルされていないことに起因するトラブルが数多く報告されています。

開発環境に対する設定

Oracle Developer Suite がインストールされたマシンで、開発時に WebUtil を利用

できるように設定を行います。

※ この作業は、Oracle Developer Suite 10g(10.1.2)では必要ありません。

環境変数の変更

Windows 環境の場合、レジストリ・エディタを使って、以下のキーの値を

変更します:

HKEY_LOCAL_MACHINE¥Software¥Oracle¥Home<n>¥

▢ FORMS90_BUILDER_CLASSPATH

値:<Oracle_Home>¥forms90¥java¥f90all.jar;<Oracle_Home>¥forms90

¥java¥frmwebutil.jar;<Oracle_Home>¥forms90¥java¥jacob.jar;<元の値>

UNIX 環境の場合は、上記環境変数値を<Oracle_Home>/bin/f90desm.sh で設

定しておくと便利です。

加えて、テスト用の OC4J サーバーで WebUtil を利用可能にするために、次の「実

行環境に対する設定」の作業も行ってください。

実行環境に対する設定

※この作業は、Oracle Application Server 10g(10.1.2)でも必要です。

アプリケーション・サーバー上に仮想ディレクトリを追加

アプリケーションに対してブラウザからアクセスする場合に

/forms/webutil のディレクトリが利用可能である必要があります。

A) Oracle Application Server に対して設定する場合

<Oracle_Home>/forms/server/forms.conf に以下を追加します。

Oracle Forms - Webutil 導入ガイド - 6

AliasMatch ^/forms/webutil/(..*) <Oracle_Home>/forms/webutil/$1" B) Oracle Developer Suite のテスト用 OC4J サーバーに対して設定する場合

<Oracle_Home>¥j2ee¥DevSuite¥application-deployments¥forms90¥formsweb

¥orion-web.xml に以下を追加します。 <virtual-directory virtual-path="/webutil" real-path="<Oracle_Home>¥forms90¥webutil" />

<Oracle_Home>/forms/server/formsweb.cfg

以下のエントリを追加します。 webUtilArchive=/forms/java/frmwebutil.jar,/forms/java/jacob.jar

また、次のエントリを変更します。 baseHTMLjinitiator=webutiljini.htm baseHTMLjpi=webutiljpi.htm baseHTML=webutilbase.htm

注意: 後の 3 つのエントリを変更することによって、このアプリケーション・

サーバーから実行されるすべてのFormsアプリケーションは、以後、WebUtilのライブラリを(使う、使わないに関係なく)要求するようになります。 この動作を制御したい(WebUtil 使用の Forms アプリケーションのみが

WebUtil のライブラリを要求するようにしたい)場合は、formsweb.cfg 内に WebUtil 用のセクションを用意し、Forms アプリケーション実行時にそれを

(envid ランタイム・パラメータを使用して)指定します。

<Oracle_Home>/forms/server/default.env

以下のエントリを追加します。 WEBUTIL_CONFIG=<Oracle_Home>/forms/server/webutil.cfg

また、次のエントリを変更します。 CLASSPATH=<Oracle_Home>/forms/java/frmwebutil.jar:<元の値>

注意:上記例は、UNIX 上のアプリケーション・サーバーに対する設定例です。

Windows 環境の場合は、CLASSPATH のエントリ区切り文字は “:” では

なく “;” を使用してください。

Oracle Forms - Webutil 導入ガイド - 7

WebUtil 適用のための基本ステップ

WebUtil を使用したフォームを構成するには、次のステップを取ります。

1. Forms Builder を起動し、既存フォーム(fmb)を開きます。

2. Forms Builder で webutil.olb を開きます。Forms Builder オブジェクト・ナビゲータの

「オブジェクト・ライブラリ」に「WEBUTIL」が追加されます。

3. webutil.olb 内のオブジェクト・クラスの適用

Forms Builder オブジェクト・ナビゲータの「オブジェクト・ライブラリ」以下の

「WEBUTIL」を選択した状態で、右クリック・メニューから「オブジェクト・ライ

ブラリ」を選びます。オブジェクト・ライブラリ・ウィンドウが開きます。オブジ

ェクト・ライブラリ・ウィンドウに表示されているオブジェクト・クラス「WEBUTIL」

をフォーム内の「オブジェクト・グループ」ツリー上にドラッグ&ドロップします。

ヒント:オブジェクトを追加する際に、サブクラスにするか、コピーを行うかの確

認ダイアログが表示されます。

WebUtil の機能としてはどちらを選択してもかまいません。

Oracle Forms - Webutil 導入ガイド - 8

WebUtil のために必要なオブジェクト群がフォームに追加されます。

s

4. 連結ライブラリとして webutil.pll を追加する

Forms Builder オブジェクト・ナビゲータの該当フォーム以下のツリーにある「連結

ライブラリ」を選択した状態で、メニューから「編集→作成」を選びます。連結ラ

イブラリ・ダイアログが開きます。

ここで webutil.pll を選択し、「連結」を押します。

Oracle Forms - Webutil 導入ガイド - 9

ヒント:連結の際に、連結ライブラリのファイル位置に対するパスを削除するかど

うかの確認ダイアログが表示されます。 通常、ここでは「はい」を選択します。これにより、フォームの実行時に、

FORMS_PATHなどの環境変数で指定された場所から pll ファイルが検索さ

れます。逆に、ここで「いいえ」を選択すると、連結ライブラリの情報と

してパスが含まれ、フォームに実行時にも、まったく同じ絶対パス上の pllのみを参照することになります。開発環境と実行環境の OS が異なるよう

なケースでは、ここは「はい」を選択する必要があります。

5. コードの変更・追加

必要に応じて、WebUtil で提供される機能を使用するように、トリガー・コードまた

はプログラム・ユニットのコードを変更します。

WebUtil で提供される機能とその利用方法については「WebUtil 実装編」を参照くだ

さい。

6. コンパイル

Forms Builder 上でコンパイルとテスト実行を行い、期待通りに動作するかどうか確

認します。

また、実行するアプリケーション・サーバーのプラットフォームが開発環境と異な

る OS である場合には、fmb ファイルをアプリケーション・サーバーに配置した後、

その OS 上でリコンパイルする必要があります。

WebUtil を有効にした Forms アプリケーションをブラウザから実行すると、 初に署名付

きアプレットに対するセキュリティ警告ダイアログが立ち上がります。この警告で許可

を選択した後、WebUtil 機能を利用した Forms アプリケーションが動作します。

Oracle Forms - Webutil 導入ガイド - 10

WebUtil 実装編

WebUtil では、大別して以下の機能が提供されます。

C/S 環境での Forms で使用されていた、クライアント・マシンへのアクセス機能の

Web 環境版

(Host、Text_IO、Get_File_Name、OLE2、TOOL_ENV、D2KWUTIL、Ora_ffi など)

Web アプリケーションとして要望の多い機能の新規提供

(ファイルのアップロード/ダウンロード、アプレット情報の取得など)

C/S→Web 用の機能

C/S→Web の機能は、更に 2 つのタイプに分類されます。

置換機能

既存ビルトインと完全に対となる機能が用意されています。ファンクショ

ン/プロシージャ名を変更するだけで、C/S 環境と同じ機能が Web 環境でも

同様に利用できるようになります。

代替 / 拡張機能

既存ビルトインのうち、OS 依存なコードだったものや、関連性が高いのに

いくつかのパッケージに分散されていた機能は再構成され、より洗練され

た形で WebUtil に用意されています。さらにいくつかの付加機能が追加され

ているものもあります。

ここでは、これらの機能の説明と、それぞれがどの既存ビルトインと対応する

ものか、について解説します。

なお、後のセクション(「C/S→Web」ケース・スタディ)では、「置換機能」、「代

替機能」のそれぞれについて、C/S→Web の移行における PL/SQL コードの書き換

えの例を紹介しています。

Oracle Forms - Webutil 導入ガイド - 11

置換機能 この分類に該当する WebUtil の機能は、その名前が ”Client_” で始まる形で用意

されています。これらの機能は、既存の Forms ビルトイン機能の Web 対応版とし

て、移行しやすい形で提供されているものです。既存の Forms ビルトイン機能と、

WebUtil の機能は次のように対応しています。

Forms ビルトイン関数 対応する WebUtil 関数 STANDARD 拡張機能 HOST → Client_HOST GET_FILE_NAME → Client_GET_FILE_NAME READ_IMAGE_FILE → Client_Image.READ_IMAGE_FILE WRITE_IMAGE_FILE → Client_Image.WRITE_IMAGE_FILE OLE2 すべての機能 → Client_OLE2.xxxx TEXT_IO すべての機能 → Client_TEXT_IO.xxxx TOOL_ENV すべての機能 → Client_TOOL_ENV.xxxx D2KWUTIL WIN_API_ENVIRONMENT → Client_WIN_API_ENVIRONMENT

注意事項

1. Client_HOST でコールするコマンドは OS で正しく認識できる必要がありま

す。ここで Windows の DOS コマンドなどをコールする場合は注意してくだ

さい。「DEL」や「COPY」などのコマンドは単独の OS コマンドではありま

せん。これらを Client_HOST で実行させるためには、 「CMD /c DEL “ファイル名”」 (またはWindows 9x/MEであれば「COMMAND /c DEL “ファイル名”」)

のようにコールする必要があります。

参照:『WebUtil User's Guide』の「4.1.2 Running HOST commands」

2. Client_Image.READ_IMAGE_FILE / WRITE_IMAGE_FILE では、クライアン

ト・マシン上のイメージ・ファイルをアプリケーション・サーバー・マシ

ン上にアップロードする必要があるため、これらの機能を有効にするため

に、WebUtil のファイル転送機能に関する設定がされている必要があります

(ファイル転送については「ファイル転送(upload/download)」を参照)。

3. Client_OLE2 では、Office97 インターフェースでの OLE2 連携のみがサポー

トされます(「Client_OLE2 に関する注意」参照)。

Oracle Forms - Webutil 導入ガイド - 12

4. Client_TOOL_ENV は、クライアント・マシンが Windows の場合、環境変数

ではなくレジストリ変数の値を参照するように実装されています

(「Client_TOOL_ENV に関する注意」参照)。

5. WebUtil には、他にも Client_WIN_API***という名前のパッケージが含まれ

ていますが、これらは Client_WIN_API_ENVIRONMENT からの内部使用の

ために用意されています。

C/S 環境で、D2KWUTIL の WIN_API.PRELOAD を使用していた場合、これ

に対応する Client_WIN_API.PRELOAD のコールは使用せず、単にコメント

アウトするようにしてください。Rre-Load 作業は Web 環境では不要になり

ました(逆に Pre-Load のコードがあると、エラーになる場合があります)。

Oracle Forms - Webutil 導入ガイド - 13

代替 / 拡張機能 この分類には、以下の機能が該当します。 Webutil_C_API

Webutil_File

Webutil_Host

Webutil_ClientInfo

Webutil_C_API 既存ビルトイン関数である ORA_FFI の代替機能を提供します。つまり、アプ

リケーション・サーバー上で動作する Forms アプリケーションから、クライア

ント・マシン上の C 関数ファイルとの連携処理を行うことが可能になります。 Webutil_C_API でコールする C 関数ファイル(Windows で言えば、DLL や EXE)

はアプリケーション・サーバーに配置し、クライアント・マシンにダウンロー

ドして実行される仕組みになります。 ダウンロード対象となる C 関数ファイルは、webtuil.cfg ファイルに次の書式で

登録しておく必要があります。

Install.syslib.<osNumber>.<packageName>.<n>= <fileName>|<fileSize>|<versionNum>|<ダウンロード・ダイアログの表示>

たとえば、次のようになります。

install.syslib.0.user.1=d2kwut60.dll|192512|1.0|true ここに登録する C 関数ファイルは、 アプリケーション・サーバー側では、クライアントにダウンロードでき

るように、次の場所に配置します。 <Oracle_Home>¥forms¥webutil これにより、登録されたファイル名とファイル・サイズの情報に一致す

るファイルが自動的にダウンロードされるようになります。

クライアント側では、ダウンロードされた後、Forms Java クライアント

が実行される JREの binディレクトリ(Jinitiatorを使用している場合は、

JInitiator の bin ディレクトリ)に配置されます。このため、Forms Javaクライアントが実行される JRE の bin ディレクトリは、クライアント・

マシンの PATH 環境変数内に含まれている必要があります。

参照:『WebUtil User's Guide』の「3.2.2 Installation Options」

参考情報: http://www.oracle.com/technology/products/forms/htdocs/webutil/howto_ffi.html (英語)

Oracle Forms - Webutil 導入ガイド - 14

Webutil_File Webutil_File は、WebUtil によって提供されるファイル処理関連機能をまとめ

たパッケージです。これに含まれるいくつかの機能は、これまで D2KWUTIL 内

のいくつかのパッケージに分散して提供されていたファイル操作機能をマル

チ・プラットフォーム対応に対応にして洗練させたものです。

D2KWUTIL 内の機能 代替となりうる Webutil_File の機能 WIN_API_UTILITY.COPY_FILE COPY_FILE WIN_API_UTILITY.DELETE_FILE DELETE_FILE WIN_API_UTILITY.MOVE_FILE RENAME_FILE WIN_API_UTILITY.CREATE_DIRECTORY CREATE_DIRECTORY WIN_API_UTILITY.DELETE_DIRECTORY DELETE_FILE WIN_API_FILE.FILE_SIZE FILE_SIZE WIN_API_DIALOG.OPEN_FILE FILE_OPEN_DIALOG WIN_API_DIALOG.SAVE_FILE FILE_SAVE_DIALOG WIN_API_DIALOG.OPEN_FILE / SAVE_FILE FILE_SELECTION_DIALOG WIN_API_DIALOG.OPEN_FILEEX FILE_MULTI_SELECTION_DIALOG WIN_API_DIRECTROY_LIST FIRSTFILE NEXTFILE CLOSESEARCH

DIRECTORY_LIST DIRECTORY_ROOT_LIST DIRECTORY_FILTERED_LIST および、それらの戻り値である FILE_LIST オブジェクト・タイプ

Webutil_File には、これら以外にも、ファイル操作に関するいくつかの機能が

用意されています。

参照:『WebUtil User's Guide』の「4.3.3 WebUtil_File」

Webutil_Host Webutil_Host は、既存の HOST 関数の拡張機能を提供するパッケージです。

D2KWUTIL.WIN_API_SHELL の ShellExecute や WinExec を使って実行していた

処理は、WebUtil の Client_Host や Webutil_Host で置き換えてください。

Webutil_ClientInfo Webutil_ClientInfo は、クライアント・マシンの情報を取得する機能を提供しま

す。これは、これまで、D2KWUTIL.WIN_API_ENVIRONMENT や TOOL_ENVなどで実現していた機能を、マルチ・プラットフォーム対応にして洗練させた

ものです。今後、クライアント・マシン情報を取得したい場合は、このパッケ

ージの機能を利用することをお勧めします。

Oracle Forms - Webutil 導入ガイド - 15

WebUtil で新しく提供される機能

ファイル転送(upload/download) Webutil_File_Transfer パッケージには、ファイル転送用の機能が用意されていま

す。このファイル転送機能を利用可能な状態にするには、webutil.cfg に以下のエ

ントリを追加する必要があります。 # ファイル転送機能の使用の有無 transfer.database.enabled=TRUE transfer.appsrv.enabled=TRUE # Appサーバー上へのファイルの書き込みの許可 transfer.appsrv.accessControl=TRUE # Appサーバー上の作業ディレクトリ transfer.appsrv.workAreaRoot=<適当な位置を指定します> # 読み書きを許可するAppサーバー上の物理ディレクトリ位置 transfer.appsrv.read.1=<適当な位置を指定します> transfer.appsrv.write.1=<適当な位置を指定します>

Webutil_File_Transfer には、ファイル転送元/先、および進捗ダイアログの有無の

選択に応じたファイル転送機能が用意されています。

クライアントからの転送(upload)

転送先 通常版 進捗ダイアログ付き アプリケーション・ サーバー・マシン上へ

Client_To_AS Client_To_AS_With_Progress

データベースのデータ (BLOB)として

Client_To_DB Client_To_DB_With_Progress

クライアントへの転送(download)

転送先 通常版 進捗ダイアログ付き アプリケーション・ サーバー・マシン上から

AS_To_Client AS_To_Client_With_Progress

データベースのデータ (BLOB)から

DB_To_Client DB_To_Client_With_Progress

指定された URL から URL_To_Client URL_To_Client_With_Progress

補足:DB との間のファイル転送のために、webutil.pll 内の Webutil_DB_Local お

よび、「

データベースの準備」で作成した DB 上のパッケージ WEBUTIL_DB が使用され

ます。

Oracle Forms - Webutil 導入ガイド - 16

実行例(サンプル・コード) トリガー・コードでは次のように記述します(下記は Client_To_AS の例です):

DECLARE result BOOLEAN;

BEGIN result:= Webutil_File_Transfer.

Client_To_AS( :filename, -- 転送元ファイルパス :as_location -- 転送先ファイルパス ); END;

また、Client_To_AS_With_Progress の場合は次のように記述します:

DECLARE result BOOLEAN;

BEGIN result:= Webutil_File_Transfer. Client_To_AS_With_Progress(

:filename, -- 転送元ファイルパス :as_location -- 転送先ファイルパス 'アップロード', -- 進捗ダイアログのタイトル 'ファイル転送中', -- 進捗ダイアログ上のメッセージ FALSE, -- 非同期処理を行うかどうか NULL –- 非同期モード(上記パラメータがTRUE)の場合に –- 処理の終わり時にコールするトリガー名 ); END;

“<転送元>_To_<転送先>_With_Progress”ファンクションを使用すると、次の

ような進捗ダイアログで転送状況を知らせてくれます。

この他、ファイル転送に関する情報を取得するためのファンクションがいく

つか用意されています。

参照:『WebUtil User's Guide』の「4.3.4 The File transfer package」

タイムアウト処理 Webutil_Session パッケージの機能を使用すると、タイムアウト時にリダイレクト

する URL を設定できるようになります。

参照:『WebUtil User's Guide』の「4.3.6 WebUtil_Session」

Oracle Forms - Webutil 導入ガイド - 17

Forms Java クライアント連携

Webutil_Browser デフォルト、もしくは SeparateFrame=false のランタイム・パラメータを使

用して Forms アプリケーションを実行すると、Java Applet はブラウザ内部で実

行されます。この場合に有効なユーティリティ・ファンクションが含まれてい

ます。

Webutil_SeparateFrame SeparateFrame=true のランタイム・パラメータを使用して Forms アプリケー

ションを実行すると、Java Applet はブラウザ外部のウィンドウ上で実行されます。

この場合に有効なユーティリティ・ファンクションが含まれています。

「C/S→Web」ケース・スタディ

ここでは実際のコードを例に挙げて、C/S 環境の Forms アプリケーションで使用

されていたトリガー・コードをどのように Web 環境用に変換するのか、見ていき

ます。

置換機能の移行例 「置換機能」で紹介したビルトインは、基本的にパッケージやプロシージャの

名前を Web 用(Client_xxx)に置き換える作業だけです。

TEXT_IO、TOOL_ENV による例

C/S 環境でのコード DECLARE MYFILE TEXT_IO.FILE_TYPE; CUR_REC NUMBER; DIRNAME VARCHAR2(200); BEGIN GO_BLOCK('DEPT'); CUR_REC := :SYSTEM.CURSOR_RECORD; IF :SYSTEM.BLOCK_STATUS != 'NEW' THEN FIRST_RECORD; -- ファイルのオープン TOOL_ENV.GETVAR('TEMP', DIRNAME); MYFILE :=TEXT_IO.FOPEN( DIRNAME || ‘¥’ || :CTRL.FILENAME, 'W'); -- ファイルへの書き込み TEXT_IO.PUTF(MYFILE,'DEPTNO,DNAME,LOC'); TEXT_IO.NEW_LINE(MYFILE); LOOP TEXT_IO.PUTF(MYFILE, TO_CHAR(:DEPT.DEPTNO)||',');

Oracle Forms - Webutil 導入ガイド - 18

TEXT_IO.PUTF(MYFILE, :DEPT.DNAME||','); TEXT_IO.PUTF(MYFILE, :DEPT.LOC||','); TEXT_IO.NEW_LINE(MYFILE); EXIT WHEN :SYSTEM.LAST_RECORD = 'TRUE'; NEXT_RECORD; END LOOP; -- ファイルのクローズ TEXT_IO.FCLOSE(MYFILE); END IF; GO_RECORD(CUR_REC); END;

これを WebUtil を利用して移行すると次のようになります。 DECLARE MYFILE CLIENT_TEXT_IO.FILE_TYPE; CUR_REC NUMBER; DIRNAME VARCHAR2(200); BEGIN GO_BLOCK('DEPT'); CUR_REC := :SYSTEM.CURSOR_RECORD; IF :SYSTEM.BLOCK_STATUS != 'NEW' THEN FIRST_RECORD; -- ファイルのオープン CLIENT_TOOL_ENV.GETVAR('TEMP', DIRNAME); MYFILE := CLIENT_TEXT_IO.FOPEN( DIRNAME || ‘¥’ || :CTRL.FILENAME, 'W'); -- ファイルへの書き込み CLIENT_TEXT_IO.PUTF(MYFILE,'DEPTNO,DNAME,LOC'); CLIENT_TEXT_IO.NEW_LINE(MYFILE); LOOP CLIENT_TEXT_IO.PUTF(MYFILE, TO_CHAR(:DEPT.DEPTNO)||','); CLIENT_TEXT_IO.PUTF(MYFILE, :DEPT.DNAME||','); CLIENT_TEXT_IO.PUTF(MYFILE, :DEPT.LOC||','); CLIENT_TEXT_IO.NEW_LINE(MYFILE); EXIT WHEN :SYSTEM.LAST_RECORD = 'TRUE'; NEXT_RECORD; END LOOP; -- ファイルのクローズ CLIENT_TEXT_IO.FCLOSE(MYFILE); END IF; GO_RECORD(CUR_REC); END;

ただし、上記例では、「TOOL_ENV→Client_TOOL_ENV」の仕様変更に伴い、

Client_TOOL_ENV で取得したい変数を環境変数ではなく、Windows レジストリ変

数として設定しておく必要があります(「Client_TOOL_ENV に関する注意」参照)。

Oracle Forms - Webutil 導入ガイド - 19

代替機能の移行例

WIN_API_DIALOG.SAVE_FILE の例

C/S 環境でのコード BEGIN :SFD_RESULT := WIN_API_DIALOG.SAVE_FILE( SampleName => NULL, Title => ‘ファイルの保存’, StartDirectory => ‘C:¥’, FileFilter => ‘すべてのファイル(*.*)|*.*|’, Modal => TRUE, RaiseExceptions => TRUE); END;

これを WebUtil を利用して移行すると次のようになります。 BEGIN :SFD_RESULT := Webutil_File.File_Save_Dialog( ‘C:¥’, NULL, ‘すべてのファイル(*.*)|*.*|’, ‘ファイルの保存’); END;

引数の順番や数が異なることに注意してください。

Webutil_File では、エラーは必ず Exception を発生するようになっています。

その他の WebUtil のファンクション

WebUtil の PL/SQL ライブラリである webutil.pll には、ここまでに紹介したもの

以外にも、いくつかのパッケージが用意されています。ここではそれらについて

解説します。

エラー情報の取得 Webutil_Core パッケージは、WebUtil の中核的なパッケージです。そのほとんど

は、ユーザーが直接使用することが許可されていませんが、以下の機能だけは使

用可能です。

• IsError

• ErrorCode

• ErrorText

ユーザーは、これらを利用して WebUtil 機能利用時のエラー情報を取得できます。

Oracle Forms - Webutil 導入ガイド - 20

ユーティリティ・パッケージ 以下は、他の機能をサポートするために用意されたユーティリティ機能です。 機能名 概説 Show_Webutil_Information WebUtil のバージョン情報などの表示 Webutil_Util ブール値を Yes/No に変換するファンクション Delimstr 区切り文字列としてのデータの入出力

## 主に内部目的で使用されています。

内部使用用途のパッケージ 以下のパッケージは内部使用のためのものです。ユーザーが直接これらのパッ

ケージを使用しないようにしてください。

• java_appserv_reader

• java_appserv_writer

• java_exception

• java_file

• java_system

制限事項

WebUtil 機能の使用可能範囲

WebUtil によるクライアント・マシンへのアクセスのためには、Forms Java クラ

イアント上で WebUtil の JavaBeans がインスタンス化されている必要があります。

逆にいうと、インスタンス化される前や破棄された後は WebUtil 機能を利用できま

せん。たとえば、

PRE-FORM、WHEN-NEW-FORM-INSTANCE

初のブロックの WEHN-NEW-BLOCK-INSTANCE

POST-FORM

などでは、WebUtil 機能は利用できません。

ヒント:ただし、Form 起動時の利用については、 初のトリガーで Timer を設定し、

Timer の Expire トリガー(WHEN-TIMER-EXPIRE)を利用するなどすれば

対応は可能です。

参照:『WebUtil User's Guide』の「5.3 Adding WEBUTIL code」

Client_OLE2 に関する注意 Client_OLE2 は Office97 インターフェースでテストされています。また、Office95

インターフェースの OLE2 連携コードではうまく機能しない例が報告されていま

す。

参照:『WebUtil User's Guide』の「5.4 Using OLE Commands」

Oracle Forms - Webutil 導入ガイド - 21

Client_TOOL_ENV に関する注意 C/S 環境での TOOL_ENV は、クライアント・マシンで設定されている環境変数

の値を取得していました。WebUtil の Client_TOOL_ENV では、クライアントが

Windows である場合には、環境変数ではなく、以下のキーに定義されたレジスト

リ変数の値を取得するように仕様が変更されています。

HKEY_LOCAL_MACHINE¥Software¥Oracle

Windows Handle(hWnd)を引数とする C へのコール 現在、hWnd を引数とする C ファンクションへのコールは、WebUtil ではサポー

トされていません。このような引数を使った連携のためには、クライアント JVM

が J2SDK 1.4 以上である必要がありますが、WebUtil では J2SDK 1.3 以上をサポー

トするため、この機能は実装されていません。

同じ理由により、D2KWUTIL.WIN_API_SHELL.SendKeys は WebUtil に実装され

ていません。

WebUtil による置き換え対象ではない Forms C/S 機能

DDE 連携 DDE 連携機能は、WebUtil では対応の予定がありません。OLE2 連携のコード

に置き換えた後、Client_OLE2 を使って Web 対応する必要があります。

VBX、OCX 連携 C/S 環境で、VBX および OCX コントロールをフォーム上に配置して実行する

機能は Web 環境では利用できません。これは Java Applet としての仕様です。同

等機能を実現する手段として、VBX および OCX コントロールに相当するコンポ

ーネントを JavaBeans として用意し、それを「Beans 領域」タイプの項目として

フォーム上に作成して利用する必要があります。

その他 WebUtil 付属の Readme.html にもいくつかの既知の問題が記載されています。そ

ちらにも必ず目を通しておく必要があります(アプリケーション・サーバーが

Linux の場合や、J2SDK のリビジョンに関する情報が記載されています)。

また、US-OTN の WebUtil FAQ にも有用な情報が記載されています

http://www.oracle.com/technology/products/forms/htdocs/webutil/WebUtilFAQ.htm

Oracle Forms - Webutil 導入ガイド - 22

導入に関するトラブル・シューティング

実行時に FRM-40735/ORA-6508 が発生する webutil.pll がパスに入っていない、または、webutil.pll が正しくリコンパイルさ

れていないことが原因である可能性があります。

"Forms セッション<n>異常終了: ランタイム・プロセスとの通信ができませんで

した。" または ConnectionException.createConnectionException エラー webutil.pll が正しくリコンパイルされていないことが原因である可能性がありま

す。特に、Windows 環境においてテスト用 OC4J 上で実行する場合は注意してくだ

さい。Forms Builder上でwebutil.pllのコンパイルをしても、保存されていなければ、

テスト用サーバーは保存前の状態の webutil.pll を参照してフォームの実行を行い

ます。その結果として、pll の不整合によって上記のようなエラーが発生します。

また、フォーム自体の完全なリコンパイルが必要な場合もあります。

この問題に直面した場合には、次の作業を行うことをお勧めします。 webutil.pll をリコンパイルする

コマンドで実行する場合は、Compile_All=Yes のオプションでコンパイル

します(「準備」の「webutil.pll のリコンパイル」参照)。または、Forms Builder

上でリコンパイルする場合は、メニューから「プログラム→PL/SQL のコン

パイル→すべて」を選択して実施し、保存します。

対象のフォームをリコンパイルする

Forms Builder 上で対象フォームを実行する際に実施されるコンパイルだけ

では、エラー解決にならない場合があります。明示的に、メニューから「プ

ログラム→選択のコンパイル」を選択してフォーム全体のリコンパイルを

実施します。

FRM-40039 エラーが出る これは、FORMS_PATH 上に webutil という名前のディレクトリと、webutil.pll

の両方が存在していて、pll 検索時に、先に webutil ディレクトリが検知されてし

まう場合に発生します。

webutil.pll をきちんとコンパイルして webutil.plx を作成すれば、この問題は発

生しません。

Oracle Forms - Webutil 導入ガイド - 23

後に

WebUtil は Oracle Forms の拡張機能の効果的な利用方法を実現したひとつの形です。これ

に代表されるように、Oracle Forms には、多くの拡張性が用意されており、それによって既

存のアプリケーション資産を無駄にすることなく、新しいシステム要件のためのさまざま

な要望に対応できます。今後も、Java テクノロジーを活用した拡張性やサーバー上の連携

機能が強化されていく予定です。

Oracle Forms - Webutil 導入ガイド - 24

日本オラクル株式会社

Copyright © 2005 Oracle Corporation Japan. All Rights Reserved.

無断転載を禁ず

この文書はあくまでも参考資料であり、掲載されている情報は予告なしに変更されるこ

とがあります。日本オラクル社は本書の内容に関していかなる保証もいたしません。また、

本書の内容に関連したいかなる損害についても責任を負いかねます。

Oracle は、オラクル社の登録商標です。Oracle8、Oracle8i、Oracle9i、Net8 は、オラクル

社の商標または登録商標です。

他のすべての企業名と製品名は、識別のためにのみ掲載されており、それぞれの所有者

の商標の場合があります。

Oracle Forms - Webutil 導入ガイド - 25