| Dr. Gudrun Pabst | Trivadis GmbH | Forms und JavaBeans Enhanced JavaBean Support in Forms 9i Forms und JavaBeans – Inhalt Inhalt: Einführung Einfaches Beispiel Setzen und Abfragen von Properties Indexed Properties Aufruf von JavaBean-Methoden JavaBean-Events Eigene Datentyp-Encoder © Copyright Trivadis GmbH 2 Dr. Gudrun Pabst: Struktur der JavaBeans: siehe JavaBean-Spezifikation, Kapitel 8.3/8.4/8.5: Design Patterns for Properties/for Events/for Methods 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 JavaBeanMethoden Beans von Drittanbietern können genutzt werden © Copyright Trivadis GmbH 3 Einführung Eine JavaBean umfasst: Properties d.h. get<Property>-, set<Property>-Methoden Indexed Properties d.h. get<Property>-, set<Property>-Methoden für die gesamte Property und für einen einzelnen Index Methoden Events Der Enhanced JavaBean-Support kann diese Elemente ansprechen. © Copyright Trivadis GmbH 4 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 © Copyright Trivadis GmbH 5 Dr. Gudrun Pabst: Datei SimpleBean1.java 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!"); } } © Copyright Trivadis GmbH 6 Dr. Gudrun Pabst: Modul simple_bean1.fmb 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' ); © Copyright Trivadis GmbH 7 Dr. Gudrun Pabst: Datei SimpleBean2.java Setzen und Abfragen von Properties JavaBean: public void setFortschritt (int Fortschritt) { progBar.setValue(Fortschritt); } public int getFortschritt () { return progBar.getValue(); } Aus Forms-Sicht: Property Fortschritt © Copyright Trivadis GmbH 8 Dr. Gudrun Pabst: Modul simple_bean2.fmb 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' ); © Copyright Trivadis GmbH 9 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 © Copyright Trivadis GmbH 10 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 ); © Copyright Trivadis GmbH 11 Dr. Gudrun Pabst: Datei SimpleBean4.java Aufruf von JavaBean-Methoden JavaBean: public double potenzieren( double pBasis , double pExp ) { double vErgebnis; vErgebnis = StrictMath.pow( pBasis ,pExp ); return vErgebnis; } Die Methode potenziert den Wert pBasis mit dem Exponenten pExponent und gibt den ermittelten Wert zurück. © Copyright Trivadis GmbH 12 Dr. Gudrun Pabst: Modul simple_bean4.fmb 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 ); © Copyright Trivadis GmbH 13 Argument-Übergabe als String Regeln: Der String beginnt und endet mit ' (einfaches Anführungszeichen). 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. © Copyright Trivadis GmbH 14 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; © Copyright Trivadis GmbH 15 Dr. Gudrun Pabst: simple_bean5.fmb JavaBean-Events Beim Mausklick werden die Event-Parameter abgefragt und angezeigt. 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" © Copyright Trivadis GmbH 16 Dr. Gudrun Pabst: simple_bean6.fmb und SimpleBean6 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 © Copyright Trivadis GmbH 17 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() ); } } © Copyright Trivadis GmbH 18 Eigene Datentyp-Encoder JavaBean: public Bruch bruchMult(Bruch pBruch1, Bruch pBruch2) 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"' ); © Copyright Trivadis GmbH 19 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 © Copyright Trivadis GmbH 20 Dokumentation JavaBeans: Spezifikation, Tutorials: http://java.sun.com/products/javabeans/docs/ Forms: Online-Hilfe: "Accessing JavaBeans from a Forms Application" Technet: "Oracle9i Forms Demos" http://otn.oracle.com/sample_code/products/forms/ content.html © Copyright Trivadis GmbH 21