Code-Beispiel für die Verwendung einer
geografischen Karte
Das folgende Beispiel zeigt Ihnen die Verwendung einer geografischen Karte. Dabei wird der Aufbau der View, die dafür notwendige Context-Struktur sowie die Datenbindung der Oberflächenelement-Eigenschaften an diese zur Design-Zeit definierte Context-Struktur zur Darstellung einer geografischen Karte vorgestellt. Auf dieser Karte wird ein so genanntes Geo-Objekt platziert, mit dem Sie zusätzlich ein Ereignis auslösen können. Geo-Objekte können dazu verwendet werden, um eine bestimmte geografische Position im Kartenausschnitt optisch hervorheben. In diesem Beispiel wird die genaue Lage der SAP AG in Walldorf gekennzeichnet. Wenn Sie dieses Geo-Objekt auswählen, erscheint die Adresse der SAP AG in einem TextView-Oberflächenelement am unteren Rand der Karte.
Sie haben eine Web-Dynpro-Anwendung erstellt und innerhalb der Web-Dynpro-Component (in diesen Beispiel GeoMapComponent genannt) eine View (in diesem Beispiel TestGeopMapView genannt) angelegt, in die Sie das GeoMap-Oberflächenelement einfügen möchten. Eine detaillierte Vorgehensweise zur Erstellung von Web-Dynpro-Projekten, Web-Dynpro-Components, der Context-Struktur sowie des Layouts der View finden Sie im Tutorial „Erstellen der ersten Web-Dynpro-Anwendung“.
...
Oberflächenelement GeoMap mit der ID
TheMap in die View TestGeoMapView einfügen.

...
Context-Knoten anlegen:
Context-Struktur: Anlegen des Value-Knotens DataSource Anlegen des Value-Attriuts geoObject Anlegen des Value-Attriuts Address
|
|
Eigenschaften des Value-Knotens DataSource |
|
Eigenschaften des Value-Attributs geoObject |
|

Wenn Sie nach dem Anlegen der View zuerst die Context-Struktur definieren, dann haben Sie die Möglichkeit, die Oberflächenelement-Eigenschaften direkt nach Einfügen des Oberflächenelements in die View an die entsprechenden Context-Elemente zu binden.
...
Datenbindung der
Oberflächenelement-Eigenschaften für das GeoMap-Oberflächenelement
definieren:
Oberflächenelement-Eigenschaft |
Wert |
Bottom |
49.2000 |
geoObjectSource |
DataSource.geoObject (in diesem Beispiel optional) |
Height |
250 |
igsURL |
Web-Adresse Ihres IGS-Services |
Left |
8.5082 |
moveType |
none |
Right |
8.7922 |
Top |
49.4304 |
Width |
250 |
zoomType |
none |
Datenbindung der
Oberflächenelement-Eigenschaften für das Label-Oberflächenelement
definieren:
Die Oberflächenelement-Eigenschaft textwird an das Wurzelknotenattribut Addressgebunden.
Oberflächenelement-Eigenschaft |
Wert |
LabelFor |
TextView1 |
Text |
Address of the company |
Datenbindung der
Oberflächenelement-Eigenschaften für das TextView-Oberflächenelement
definieren:
Die Oberflächenelement-Eigenschaft textwird an das Wurzelknotenattribut Addressgebunden.
Oberflächenelement-Eigenschaft |
Wert |
text |
Address |
Ein Geo-Objekt kann ein onObjectAction-Ereignis auslösen. Dieses Ereignis ist immer an ein Geo-Objekt auf der Karte gebunden. Dazu legen Sie die Aktion LinkToWebAddress mit Parameter actionID im View Designer an. Damit wird in der Controller-Implementierung automatisch die Methode onActionLinkToWebAddress angelegt.
Innerhalb dieser Methode befüllen Sie durch den Quelltext wdContext.currentContextElement().setAddress("SAP AG, Neurottstraße 16, 69190 Walldorf"); den Context mit der Adresse. Wenn Sie in diesem Beispiel das Geo-Objekt mit der Maustaste auswählen, dann erscheint die Adresse von SAP in einem TextView-Oberflächenelement am unteren Rand der Karte.

Um der Aktion mitzuteilen, welcher Geo-Punkt das Ereignis auslöst, müssen Sie die Parameter id des Geo-Punkts auf den Parameter actionIDder Aktion abbilden.
public static void wdDoModifyView(IPrivateTestGeoMapView wdThis, IPrivateTestGeoMapView.IContextNode wdContext, com.sap.tc.webdynpro.progmodel.api.IWDView view, boolean firstTime) { //@@begin wdDoModifyView IWDGeoMap map = (IWDGeoMap)view.getElement("TheMap"); map.mappingOfOnObjectAction().addSourceMapping("id", "actionID"); //@@end }
//@@begin javadoc:onActionLinkToWebAdress(ServerEvent) /** Declared validating event handler. */ //@@end public void onActionLinkToWebAddress(com.sap.tc.webdynpro.progmodel.api.IWDCustomEvent wdEvent, java.lang.String actionID ) { //@@begin onActionLinkToWebAddress(ServerEvent) wdContext.currentContextElement().setAddress("SAP AG, Neurottstraße 16, 69190 Walldorf"); //@@end } |
Zum Platzieren von Geo-Objekten stehen Ihnen mehrere Web-Dynpro-Klassen zur Verfügung. Dies sind u.a. WDGeoObject, WDGeoLine, WDGeoPoint und WDGeoPolygon. Mit dem folgenden Quelltext wird bei der Initialisierung ein Geo-Objekt in der Karte mit der Position 8.6425, 49.2929 (WGS84-Format) in Form einer blauen Ellipse mit dem Titel SAP dargestellt. Siehe Bildschirmkopie zum Ergebnis des Beispiels weiter unten. Ist für die Methode setTriggersEvent der Wert true gesetzt, dann kann das Geo-Objekt vom Typ IWDGeoPoint ein Ereignis auslösen.
public void wdDoInit() { //@@begin wdDoInit() IPrivateTestGeoMapView.IdataSourceNode node = wdContext.nodeDataSource();
IWDGeoPoint point = WDGeoFactory.createGeoPoint("GeoPoint1"); point.setLabel("SAP"); point.setStyle(WDGeoPointStyle.ELLIPSE); point.setTooltip("SAP"); WDGeoPosition geoPosition = new WDGeoPosition(8.6425, 49.2929); point.setPosition(geoPosition); point.setTriggersEvent(true); point.setSize(20); point.setColor(java.awt.Color.blue);
IPrivateTestGeoMapView.IDataSourceElement nodeElement = node.createDataSourceElement(); nodeElement.setGeoObject(point); node.addElement(nodeElement); //@@end } |
Bevor Sie die Web-Dynpro-Anwendung aufrufen können, müssen Sie das entsprechende Web-Dynpro-Projekt gebaut und die Web-Dynpro-Anwendung auf der SAP J2EE Engine installiert haben.
Über eine Web-Adresse rufen Sie die Web-Dynpro-Anwendung im Browser auf, als Ergebnis wird ein Kartenausschnitt der Umgebung von Heidelberg/Walldorf darstellt und die Lage der SAP AG mit blauer Ellipse markiert.

Wenn Sie dieses Geo-Objekt auswählen, dann wird die Adresse am unteren Rand der Karte angezeigt.

Weitere Informationen stehen Ihnen in der Beschreibung der Web Dynpro GeoMap API zur Verfügung.