プライマリ・コンテンツに移動
Oracle® Fusion Middleware Forms Servicesデプロイメント・ガイド
12c (12.2.1.2)
E82766-02
目次へ移動
目次

前
前へ
次
次へ

7 Javaサポートの拡張

Oracle Formsには、標準のユーザー・インタフェース・コンポーネント(ボタン、テキスト領域、ラジオ・ボタンのグループ、リスト項目など)の外観と動作を定義するJavaクラスが用意されています。FormsのプラガブルなJavaコンポーネント(PJC)は、デフォルトのFormsクライアント・コンポーネントの拡張機能とみなすことができます。PJCを作成するときは、用意されているデフォルト・クラスの機能を拡張するように、独自のJavaコードを記述します。

この章の構成は、次のとおりです。

Forms Developerからのイベントのディスパッチ

標準のFormsユーザー・インタフェース・コンポーネントの機能を拡張できるだけでなく、Java Swingユーザー・インタフェース・コンポーネントがフォームに含まれるPJCを作成することもできます。プラガブルなJavaコンポーネントにより、Formsで用意されているクラス(oracle.forms.ui.VBean)を拡張し、Formsキャンバスで表示されるようにBean領域で活用します。Bean領域には独自のユーザー・インタフェースはありませんが、コンテナになります。実装クラスを関連付けてユーザー・インタフェース・コンポーネントをいくつか追加するまでは、レイアウト・エディタやキャンバスで、空の矩形のみ表示されます。

以前のリリースのOracle Formsでは、Formsユーザー・インタフェース・コンポーネントには、IViewインタフェースが実装されていました。しかし、プラガブルなJavaコンポーネントやビューからCustomListenerの追加や削除を行う特別な方法はありませんでした。Oracle Forms 12cでは、IViewインタフェースでCustomListenerの追加や削除ができます。

Forms Servicesからのイベントのディスパッチ

Oracle Forms 12cでは、パラメータとペイロード付きのCustomEventが簡単にディスパッチされます。パブリック・メソッドdispatchCustomEventを公開することでJavaBeanクラスでこれが行われるので、PJCで同じメソッドを追加する必要があります。dispatchCustomEventメソッドをPJCからコールして、CustomEventをディスパッチします。

CustomEventは一般的にパラメータと関連付けられているので、Formsでは追加する方法が用意されています。JavaBeanでは、getHandler().setProperty()メソッドを使用して、パラメータを設定できます。ユーザーは、PJCで同じことができる必要があります。詳細は、「実行時のカスタム項目イベント・トリガーについて」を参照してください。

カスタム項目イベント・トリガーについて

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文字列です。

例: プッシュ・ボタンのJavaクラス

この例では、File Openオプションを使用してクライアント・ファイルを選択できるようにし、そのパスをサーバーに返すプッシュ・ボタンのJavaクラスを作成します。

  1. 次のような単純な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();
        }
    }
  2. 該当の環境でCLASSPATH変数を定義し、$ORACLE_HOME/forms/java/frmall.jarを追加します。

  3. このJavaクラスをコンパイルします。後でJARを容易に作成できるように、javac (Javaコンパイラ)の-d <output-directory>オプションを使用することで、独立したディレクトリに出力クラス・ファイルを置きます。

  4. 出力ディレクトリに移動し、次のコマンドを使用して、生成したクラス・ファイルを収めたJARファイル(MyButtonPJC.jarなど)を作成します。

    jar cvf <jar-file-path> *

  5. MyButtonPJC.jarは、Formsアプレットにデプロイする前に信頼できる証明書を使用して署名する必要があります。Java JARファイルの署名方法の詳細は、Javaドキュメント(https://docs.oracle.com/javase/tutorial/deployment/jar/signindex.html)を参照してください

  6. MyButtonPJC.jarを$ORACLE_HOME/forms/javaディレクトリにコピーします。

  7. FORMS_BUILDER_CLASSPATHにMyButtonPJC.jarのパスを追加します。これにより、このJARに収めたクラス・ファイルをForms Builderで利用できるようになります。

  8. Formsアプリケーションのレイアウトにプッシュ・ボタンを追加します。

  9. プッシュ・ボタンの「プロパティ・パレット」で、MyButtonPJCを実装クラスとして設定します。

  10. WHEN-CUSTOM-ITEM-EVENTトリガーをプッシュ・ボタンに追加します。

  11. プッシュ・ボタンの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;
    
  12. Forms構成ファイル(formsweb.cfg)のarchiveパラメータで、JARのカンマ区切りリストにMyButtonPJC.jarを追加します(フル・パスではなく、JARファイル名のみを記述します)。これにより、クライアント側でFormsアプレットにこのJARファイルがロードされるようになります。