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 内の機能 WIN_API_UTILITY.COPY_FILE WIN_API_UTILITY.DELETE_FILE WIN_API_UTILITY.MOVE_FILE WIN_API_UTILITY.CREATE_DIRECTORY WIN_API_UTILITY.DELETE_DIRECTORY WIN_API_FILE.FILE_SIZE WIN_API_DIALOG.OPEN_FILE WIN_API_DIALOG.SAVE_FILE WIN_API_DIALOG.OPEN_FILE / SAVE_FILE WIN_API_DIALOG.OPEN_FILEEX WIN_API_DIRECTROY_LIST FIRSTFILE NEXTFILE CLOSESEARCH 代替となりうる Webutil_File の機能 COPY_FILE DELETE_FILE RENAME_FILE CREATE_DIRECTORY DELETE_FILE FILE_SIZE FILE_OPEN_DIALOG FILE_SAVE_DIALOG FILE_SELECTION_DIALOG FILE_MULTI_SELECTION_DIALOG 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 サーバー マシン上から データベースのデータ DB_To_Client DB_To_Client_With_Progress (BLOB) から 指定された 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_file java_appserv_writer java_system java_exception 制限事項 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