この章には、次の項が含まれています。
Oracle Formsには、標準のユーザー・インタフェース・コンポーネント(ボタン、テキスト領域、ラジオ・ボタンのグループ、リスト項目など)の外観と動作を定義するJavaクラスが用意されています。FormsのプラガブルなJavaコンポーネント(PJC)は、デフォルトのFormsクライアント・コンポーネントの拡張機能とみなすことができます。PJCを作成するときは、用意されているデフォルト・クラスの機能を拡張するように、独自のJavaコードを記述します。
標準のFormsユーザー・インタフェース・コンポーネントの機能を拡張できるだけでなく、Java Swingユーザー・インタフェース・コンポーネントがフォームに含まれるPJCを作成することもできます。プラガブルなJavaコンポーネントにより、Formsで用意されているクラス(oracle.forms.ui.VBean
)を拡張し、Formsキャンバスで表示されるようにBean領域で活用します。Bean領域には独自のユーザー・インタフェースはありませんが、コンテナになります。実装クラスを関連付けてユーザー・インタフェース・コンポーネントをいくつか追加するまでは、レイアウト・エディタやキャンバスで、空の矩形のみ表示されます。
以前のリリースのOracle Formsでは、Formsユーザー・インタフェース・コンポーネントには、IViewインタフェースが実装されていました。しかし、プラガブルなJavaコンポーネントやビューからCustomListenerの追加や削除を行う特別な方法はありませんでした。Oracle Forms 12cでは、IViewインタフェースでCustomListenerの追加や削除ができます。
Oracle Forms 12cでは、パラメータとペイロード付きのCustomEventが簡単にディスパッチされます。パブリック・メソッドdispatchCustomEvent
を公開することでJavaBeanクラスでこれが行われるので、PJCで同じメソッドを追加する必要があります。dispatchCustomEvent
メソッドをPJCからコールして、CustomEventをディスパッチします。
CustomEventは一般的にパラメータと関連付けられているので、Formsでは追加する方法が用意されています。JavaBeanでは、getHandler().setProperty()
メソッドを使用して、パラメータを設定できます。ユーザーは、PJCで同じことができる必要があります。詳細は、第7.2.2項「実行時のカスタム項目イベント・トリガーについて」を参照してください。
Oracle Forms 12cでは、設計時にWHEN-CUSTOM-ITEM-EVENT
トリガーを項目に追加でき、実行時にトリガーを起動させるようにプラガブルなJavaコンポーネントをコーディングできます。フォームのJavaBeanカスタム・コンポーネントによってイベントが発生すると、このトリガーが起動します。WHEN-CUSTOM-ITEM-EVENT
トリガーを使用して、カスタム・コンポーネントの値の選択や変更に応答できます。システム変数SYSTEM.CUSTOM_ITEM_EVENT_PARAMETERS
には、カスタム・コントロールによって起動するイベントの補足的引数を収めたパラメータの名前が格納されます。コントロールのイベント名では大文字と小文字が区別されます。
トリガーを項目に追加する最も一般的な方法は、「トリガー」ノードにフォーカスがあるときに、Oracle Forms Developerにあるオブジェクト・ナビゲータ用ツールバーで「作成」ボタンをクリックするか、対応するショートカット・キーを押すことです。Forms Developerでは、使用可能なトリガーの一覧が、そのレベルかその項目に対して表示されます。
一般的に使用されるトリガーをいくつか追加する別の方法は、オブジェクト・ナビゲータで項目のトリガー・ノードを右クリックすることです。そして、「スマート・トリガー」メニューの一覧で、トリガーのいずれかを選択します。
トリガーでの作業方法の詳細は、Oracle Forms Developerのオンライン・ヘルプを参照してください。
Oracle Forms 11gでは、プラガブルなJavaコンポーネントで、WHEN-CUSTOM-ITEM-EVENT
トリガーを起動できます。この機能強化版トリガーでは、クライアントとサーバーとの間における通信の内容をより綿密に制御できます。
Formsクライアントでは、プラガブルなJavaコンポーネントを介して、CustomEvent
がディスパッチされます。これによって、WHEN-CUSTOM-ITEM-EVENT
トリガーがForms Serviceで起動されます。WHEN-CUSTOM-ITEM-EVENT
トリガーには、CustomEventを介してクライアントのプラガブルなJavaコンポーネントから渡されたイベント名とパラメータ値を取得する簡単な方法が用意されています。イベント名は、SYSTEM.CUSTOM_ITEM_EVENT
に格納されます。パラメータ(名前と値)は、SYSTEM.CUSTOM_ITEM_EVENT_PARAMETERS
に格納されます。
Formsビルトインのget_parameter_attr
は、SYSTEM.CUSTOM_ITEM_EVENT_PARAMETERS
から異なるパラメータと値を取得するために使用します。get_parameter_attrから返される値やペイロードでサポートされているデータ型は、VARCHAR2
文字列です。
この例では、File Openオプションを使用してクライアント・ファイルを選択できるようにし、そのパスをサーバーに返すプッシュ・ボタンのJavaクラスを作成します。
次のような単純なPJCコードにより、プッシュ・ボタンのJavaクラスを作成します。
// MyButtonPJC.java import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JFileChooser; import oracle.forms.ui.CustomEvent; import oracle.forms.ui.VButton; import oracle.forms.properties.ID; public class MyButtonPJC extends VButton implements ActionListener { private static final ID CLIENT_SELECTED_FILE = ID.registerProperty("CLIENT_SELECTED_FILE"); public MyButtonPJC() { addActionListener(this); } public void actionPerformed(ActionEvent event) { JFileChooser fc = new JFileChooser(); if(fc.showOpenDialog(getHandler().getApplet()) == JFileChooser.APPROVE_OPTION) { CustomEvent ce = new CustomEvent(getHandler(), "MyButtonPJC_Event"); ce.setProperty(CLIENT_SELECTED_FILE, fc.getSelectedFile().getAbsolutePath()); this.dispatchCustomEvent(ce); } } public void destroy() { removeActionListener(this); super.destroy(); } }
該当の環境でCLASSPATH変数を定義し、$ORACLE_HOME/forms/java/frmall.jar
を追加します。
このJavaクラスをコンパイルします。後でJARを容易に作成できるように、javac (Javaコンパイラ)の-d <output-directory>
オプションを使用することで、独立したディレクトリに出力クラス・ファイルを置きます。
出力ディレクトリに移動し、次のコマンドを使用して、生成したクラス・ファイルを収めたJARファイル(MyButtonPJC.jarなど)を作成します。
jar cvf <jar-file-path> *
MyButtonPJC.jarは、Formsアプレットにデプロイする前に信頼できる証明書を使用して署名する必要があります。Java JARファイルの署名方法の詳細は、Javaドキュメント(https://docs.oracle.com/javase/tutorial/deployment/jar/signindex.html
)を参照してください
MyButtonPJC.jarを$ORACLE_HOME/forms/java
ディレクトリにコピーします。
FORMS_BUILDER_CLASSPATHにMyButtonPJC.jarのパスを追加します。これにより、このJARに収めたクラス・ファイルをForms Builderで利用できるようになります。
Formsアプリケーションのレイアウトにプッシュ・ボタンを追加します。
プッシュ・ボタンの「プロパティ・パレット」で、MyButtonPJCを実装クラスとして設定します。
WHEN-CUSTOM-ITEM-EVENT
トリガーをプッシュ・ボタンに追加します。
プッシュ・ボタンのWHEN-CUSTOM-ITEM-EVENT
トリガーに、次のPL/SQLコードを追加します。このコードはPJCによってディスパッチされたCustomEventを処理し、イベントのパラメータを抽出します。
declare filePath VARCHAR2(1024); dataType PLS_INTEGER; begin Message('Custom Event Name='||:SYSTEM.CUSTOM_ITEM_EVENT); get_parameter_attr(:SYSTEM.CUSTOM_ITEM_EVENT_PARAMETERS,'CLIENT_SELECTED_FILE',dataType, filePath); Message('The selected client file path is '|| filePath); end;
Forms構成ファイル(formsweb.cfg
)のarchive
パラメータで、JARのカンマ区切りリストにMyButtonPJC.jarを追加します(フル・パスではなく、JARファイル名のみを記述します)。これにより、クライアント側でFormsアプレットにこのJARファイルがロードされるようになります。