Archive for the ‘Web DynPro’ Category

Serveral links on how to integrate 3rd Party Libraries into Web DynPro Projects (e.g. Hibernate) and how to use a Java Bean Model:

Hibernate
complex Java Beans
Changing a Java Bean Model
Jar of a Java Bean Model
Including Rhino as Example of an external library
Exernal Jars in Web DynPro

Werbung

Den Web Service habe ich heute fertig modelliert und ihn soweit gebracht, dass er mal ein paar Testdaten ausspuckt.

In der Web DynPro Anwendung wurde das Model über die WSDL-Definition importiert und die Mappings und Bindings über die GUI zusammengeklickt. Eine Zeile Code musste ich dort programmieren um folgendes Formular zu haben, welches seine Daten über den Web Service bezieht.

Schon erstaunlich wie „einfach“ das geht.

Morgen werde ich dann mal das bisher gelernte dokumentieren.

Zunächst braucht man eine gültige WSDL mit ordentlichen in XSD definierten Typen. Hieraus lässt man sich über den Create Model Assistenten ein Model erstellen. Dadurch wird ein sogenannter Service Proxy generiert, welche als Stellvertreter für den eigentlichen Web Service aufgerufen wird und selbst als Client agiert, so wie ich das verstanden habe. Dieses Model wird dann mit dem Controller Context der Komponente verbunden, um zentral über die Daten verfügen zu können.

Man kann dann relativ einfach ein Service Controller Template generieren lassen, welches in den wdDoInit() und execute() Methoden das Model initialisiert (die Web Service Aufrufe verwaltet).

Danach sollten man die View Controller Contexte auf den Component Controller Context mappen und das Data Bindung für die Views durchführen.

Nun noch die Event Handler anlegen und implementieren und fertig ist die Web Dynpro Anwendung, die ihre Daten komplett über einen Web Service bezieht.

Den Web Service selbst möchte ich gerne unter Tomcat laufen lassen, um die altbekannten Werkzeuge einsetzen zu können und zu testen, ob das alles ohne Probleme zusammen funktioniert.

Der ganze Entwicklungsprozess von Web DynPro ist so ausgelegt, dass man so wenig wie möglich programmieren muss. Und wenn man es dann muss, ist’s relativ einfach.

Das wichtigste ist, dass man die Kontexte initialisert. Dies geschieht in der wdDoInit()-Methode der Controller Kontexte. Hier mal ein Code-Schnipsel aus dem Beispiel im SDN:

/** Hook method called to initialize controller. */

public void wdDoInit()

{

[…]

Collection questions = new ArrayList();

for (int i = 0; i < size; i++) {

// instantiate the new context node element of type QuizData

IPublicQuiz.IQuizDataElement quizDataElement =

wdContext.createQuizDataElement();

// set contained context value attributes

quizDataElement.setQuestion(resourceHandlerForQuestions.getString(„Q“+i));

quizDataElement.setAnswer(resourceHandlerForAnswers.getString(„A“+i));

quizDataElement.setCounter(String.valueOf(i+1)+“/“+String.valueOf(size));

// add new context node element of the type QuizeData to ArrayList

questions.add(quizDataElement);

}

//===== STEP 3: Bind collection of Q&A pairs to context value node QuizData ====

// Bind collection of context node elements to context value node QuizData

wdContext.nodeQuizData().bind(questions);

//@@end

}

SAP Library – Web Dynpro for Java

Hier werden die vorher angelegten Context Nodes (quizDataElement) der Komponente initialisiert und in einer Collection gespeichert. Auf diese kann man dann in den Views über

wdContext.nodeQuizData().<operation>;

zugegriffen werden.

Der eigene Context des Views wird über

wdContext.currentContextElement().<operation>;

aufgerufen.

Dann noch ein bisschen Logik implementieren und das war’s.

Das Thema des heutigen Tages war das Contextkonzept in Dynpro.

Sturkturieren lässt sich dies in

  • Context Design
  • Context Mapping und
  • DataBinding

Beim Context Design geht es darum, die Controller-Kontexte (das ist sozusagen der Speicher für Daten mit unterschiedlichen Strukturen) aufzubauen. Diese kann man selbst oder aus einem Model erstellen.

Es gibt drei Kategorien von Kontexten

  • View-owned business data
    Daten die nur für eine View relevant sind
  • View-owned layout data
    Daten die die Darstellung betreffen (z.B. Sichtbarkeit eines Buttons)
  • Cross-view business data
    Daten die View übergreifen sind und weitergereicht werden.
    Diese Daten müssen im Controller Context der Komponente gespeichert werden.

Update 11.7.:

Für die Views kann man sog. Plugs (Stecker) definieren. Es gibt ausgehende (outbound) und eingehende (inbound) Plugs. Sie dienen dazu, die Navigation zwischen den Views zu definieren. Hierfür zieht man dann Navigation Links vom outbound zum inbound Plug zweier Views und definiert Actions dafür.

Allgemein läßt sich der Entwicklungsprozess mit Web DynPro in 3 Aktivitäten bzw. Kategorien untergliedern:

  • Die Visualisierung, d.h. das Designen der Oberfläche, ohne Funktion
  • Das Deklarieren des Datenmodels und der Beziehungen zwischen den Elementen der Oberfläche und den Daten, Actions. (Bindings usw.)
  • Das eigentliche Programmieren, z.B. Aufbau der Datenstrukturen zur Runtime, Ablauflogik implementieren. Wenn man die ersten beiden Schritte gut gemacht hat, muss man hier eigentlich nur noch relativ wenig tun.

Dann habe ich mir heute noch überlegt, wie ich den Web Service für die Daten aus der EinkäuferDB strukturiere. Momentan denke ich, dass ich 3 Operationen implementiere. Obwohl ich mir immer noch nicht ganz sicher bin, ob ich wirklich einen Web Service dazu benutzen kann. Das zeigt sich erst nächste Woche, wenn ich Web Dynpro live ausprobiert habe.

  • getSearchCriterias()
    Diese Operation liefert die Daten für die Dropdown-Auswahllisten in Abhängigkeit davon, welche Suchkriterien bereits ausgewählt wurden.
  • getResultList()
    Gibt die Liste der Einkäufer oder Verträge zurück, je nachdem welche Kriterien eingegeben wurden.
  • getDetails()
    Liefert die Details zu einem ausgewählten Einkäufer/Vertrag

Diesmal in textueller Form.

Schritt für Schritt werden hier die wichtigsten Komponenten und Grundsätze von Web DynPro erklärt. Leider immer noch alles Trockenübungen, weil ich weiterhin auf meinen Rechner warte.

Update: Nachdem ich das Einsteigertutorial durch habe (sieht alles noch sehr simpel und logisch aus, Resumé gibt’s heute abend), widme ich mich jetzt dem Extended Tutorial.

Hier gibt es ein sehr infomatives Video-Tutorial für Web DynPro. Ist eigentlich alles was man braucht, um in das Thema reinzufinden.

Kann sein, dass man sich dafür zuerst beim SDN anmelden muss.

Es muss eine Möglichkeit gefunden werden, die Daten aus der EinkäuferDB im Portal zur Verfügung zu stellen.

Ein Ansatz wäre, einen oder mehrere Webservices zu programmieren, die als Eingangsparameter z.B. Suchkriterien erhalten und dann die Ergebnisliste an einen iView oder eine Web DynPro Applikation liefern.

Web DynPro bietet die Möglichkeit als Datenmodell einen WebService zu nehmen:

http://entwickler.com/itr/online_artikel/show.php3?nodeid=97&id=583