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 2
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 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. 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 5
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!"); 6
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' ); 7
Setzen und Abfragen von Properties JavaBean: public void setfortschritt (int Fortschritt) progbar.setvalue(fortschritt); Aus Forms-Sicht: Property Fortschritt public int getfortschritt () return progbar.getvalue(); 8
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' ); 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 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 ); 11
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. 12
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 ); 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. 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; 15
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" 16
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 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() ); 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"' ); 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 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 21