Forms und JavaBeans Enhanced JavaBean Support in Forms 9i | Dr. Gudrun Pabst | Trivadis GmbH |
2 © Copyright Trivadis GmbH Inhalt: Einführung Einfaches Beispiel Setzen und Abfragen von Properties Indexed Properties Aufruf von JavaBean-Methoden JavaBean-Events Eigene Datentyp-Encoder Forms und JavaBeans – Inhalt
3 © Copyright Trivadis GmbH Einführung Wofür JavaBeans? ab Forms9i: Forms nur noch im Web Problem: Aufruf von Client-Programmen funktioniert mit Forms-Mitteln nicht mehr JavaBeans: Standardisierte Java-Komponenten Enhanced JavaBean-Support von Forms unterstützt die JavaBean- Methoden Beans von Drittanbietern können genutzt werden Dr. Gudrun Pabst: Struktur der JavaBeans: siehe JavaBean-Spezifikation, Kapitel 8.3/8.4/8.5: Design Patterns for Properties/for Events/for Methods Dr. Gudrun Pabst: Struktur der JavaBeans: siehe JavaBean-Spezifikation, Kapitel 8.3/8.4/8.5: Design Patterns for Properties/for Events/for Methods
4 © Copyright Trivadis GmbH Einführung Eine JavaBean umfasst: Properties d.h. get -, set -Methoden Indexed Properties d.h. get -, set -Methoden für die gesamte Property und für einen einzelnen Index Methoden Events Der Enhanced JavaBean-Support kann diese Elemente ansprechen.
5 © Copyright Trivadis GmbH Einführung Erweiterter Java-Support in Forms 9i: Bisher: statische Zuordnung der JavaBean zur BeanArea set_custom_property Jetzt: JavaBean wird zur Laufzeit zugeordnet direktes Ansprechen von Properties und Methoden eigene Datentyp- und Listener-Encoder
6 © Copyright Trivadis GmbH Grundlage: einfache JavaBean JavaBean: import oracle.forms.ui.VBean; public class SimpleBean1 extends VBean { public SimpleBean1() { super(); try { jbInit(); } catch(Exception e) { e.printStackTrace(); } private void jbInit() throws Exception { System.out.println ("Hallo!"); } Dr. Gudrun Pabst: Datei SimpleBean1.java Dr. Gudrun Pabst: Datei SimpleBean1.java
7 © Copyright Trivadis GmbH Grundlage: zugehöriges Forms-Modul Forms-Modul: BeanArea TEST_BEAN Button BT_REGISTER WHEN-BUTTON-PRESSED -Trigger: FBean.Register_Bean ( 'CTL.TEST_BEAN', 1, 'SimpleBean1' ); Dr. Gudrun Pabst: Modul simple_bean1.fmb Dr. Gudrun Pabst: Modul simple_bean1.fmb
8 © Copyright Trivadis GmbH Setzen und Abfragen von Properties JavaBean: Aus Forms-Sicht: Property Fortschritt public void setFortschritt (int Fortschritt) { progBar.setValue(Fortschritt); } public int getFortschritt () { return progBar.getValue(); } Dr. Gudrun Pabst: Datei SimpleBean2.java Dr. Gudrun Pabst: Datei SimpleBean2.java
9 © Copyright Trivadis GmbH Setzen und Abfragen von Properties Forms-Modul: Button zum Setzen des Fortschritts, Code: FBean.set_property ( 'CTL.TEST_BEAN', 1, 'Fortschritt', :ctl.ti_wert ); Button zum Abfragen des Fortschritts, Code: :ctl.ti_wert := FBean.get_property ( 'CTL.TEST_BEAN', 1, 'Fortschritt' ); Dr. Gudrun Pabst: Modul simple_bean2.fmb Dr. Gudrun Pabst: Modul simple_bean2.fmb
10 © Copyright Trivadis GmbH Indexed Properties JavaBean: 2 set-Methoden: public void setListe (String[] pTest) public void setListe (int pIndex, String pTest) 2 get-Methoden: public String[] getListe () public String getListe (int pIndex) ACHTUNG: Index startet mit 0! Aus Forms-Sicht: Indexed Property Liste
11 © Copyright Trivadis GmbH Indexed Properties Forms-Modul: Setzen aller Werte der Indexed Property: FBean.set_indexed_property ( 'CTL.TEST_BEAN', 1, 'Liste', fbean.all_rows, :ctl.ti_item1 || ',' || :ctl.ti_item2 || ',' || :ctl.ti_item3 || ',' || :ctl.ti_item4 ); Setzen eines bestimmten Werts der Indexed Property: FBean.set_indexed_property ( 'CTL.TEST_BEAN', 1, 'Liste', :ctl.ti_index, :ctl.ti_wert );
12 © Copyright Trivadis GmbH Aufruf von JavaBean-Methoden JavaBean: Die Methode potenziert den Wert pBasis mit dem Exponenten pExponent und gibt den ermittelten Wert zurück. public double potenzieren( double pBasis, double pExp ) { double vErgebnis; vErgebnis = StrictMath.pow( pBasis,pExp ); return vErgebnis; } Dr. Gudrun Pabst: Datei SimpleBean4.java Dr. Gudrun Pabst: Datei SimpleBean4.java
13 © Copyright Trivadis GmbH Aufruf von JavaBean-Methoden Forms-Modul: Übergabe der Argumente als String: :ctl.ti_ergebnis := FBean.invoke_num ( 'CTL.TEST_BEAN', 1, 'potenzieren', :ctl.ti_basis || ',' || :ctl.ti_exponent ); Dr. Gudrun Pabst: Modul simple_bean4.fmb Dr. Gudrun Pabst: Modul simple_bean4.fmb
14 © Copyright Trivadis GmbH Argument-Übergabe als String Regeln: Der String beginnt und endet mit ' (einfaches Anführungs- zeichen). Die Argumente sind durch Kommas getrennt. Strings im String müssen in " (doppelte Anführungszeichen) eingeschlossen werden. " in Strings werden als \" übergeben, \ als \\. Werte vom Typ Boolean werden als true oder false übergeben. Zahlen werden als Zahlen übergeben.
15 © Copyright Trivadis GmbH Argument-Übergabe als Argumentliste Forms-Modul: Übergabe der Argumente als Argumentliste: declare v_arglist fbean.arglist; begin v_arglist := fbean.create_arglist; -- fbean.add_arg ( v_arglist, :ctl.ti_basis ); fbean.add_arg ( v_arglist, :ctl.ti_exponent ); -- :ctl.ti_ergebnis := FBean.invoke_num ( 'CTL.TEST_BEAN', 1, 'potenzieren', v_arglist ); -- end;
16 © Copyright Trivadis GmbH JavaBean-Events Forms-Modul: Registrieren des Events: fbean.enable_event Anlegen eines WHEN-CUSTOM-ITEM-EVENT -Triggers SYSTEM.CUSTOM_ITEM_EVENT : Name des Events SYSTEM.CUSTOM_ITEM_EVENT_PARAMETERS : Parameterliste des Events Event-Parameter: siehe "Working with Data Type and Event Encoders" Dr. Gudrun Pabst: simple_bean5.fmb Beim Mausklick werden die Event-Parameter abgefragt und angezeigt. Dr. Gudrun Pabst: simple_bean5.fmb Beim Mausklick werden die Event-Parameter abgefragt und angezeigt.
17 © Copyright Trivadis GmbH Eigene Datentyp-Encoder zur Übergabe von Daten an komplexe Java-Objekttypen extends oracle.forms.beans.FormsEncoder zwei Methoden: fromString : konvertiert den übergebenen String in das Objekt toString : erzeugt aus den Objekt-Daten einen String muss mittels BeanManager.registerEncoder beim Initialisieren der Bean registriert werden Dr. Gudrun Pabst: simple_bean6.fmb und SimpleBean6 Dr. Gudrun Pabst: simple_bean6.fmb und SimpleBean6
18 © Copyright Trivadis GmbH Eigene Datentyp-Encoder JavaBean: import oracle.forms.ui.BeanManager; public class BruchEncoder extends FormsEncoder { public BruchEncoder() { super(Bruch.class); } public Object fromString ( String pBruchText ) {... return new Bruch ( vZaehlerNeu, vNennerNeu ); } public String toString ( Object pBruch ) { return new String ( pBruch.toString() ); }
19 © Copyright Trivadis GmbH Eigene Datentyp-Encoder JavaBean: Methode bruchMult: nimmt zwei Objekte vom Typ Bruch entgegen und gibt das Multiplikationsergebnis als Objekt vom Typ Bruch zurück Forms-Modul: :ctl.ti_ergebnis := fbean.invoke_char ( 'CTL.TEST_BEAN', 1, 'bruchMult', '"3/4","4/5"' ); public Bruch bruchMult(Bruch pBruch1, Bruch pBruch2)
20 © Copyright Trivadis GmbH Eigene Event-Encoder zur Übergabe von selbstdefinierten Events in der JavaBean an Forms extends oracle.forms.beans.EventEncoder Methoden: toString : erzeugt aus den Event-Daten einen String getParameters : erzeugt Liste, die ausgewertet werden kann über :system.custom_item_event_parameters muss mittels BeanManager.registerEncoder beim Initialisieren der Bean registriert werden
21 © Copyright Trivadis GmbH Dokumentation JavaBeans: Spezifikation, Tutorials: Forms: Online-Hilfe: "Accessing JavaBeans from a Forms Application" Technet: "Oracle9i Forms Demos" content.html