lookupService YahooLocalService{@restbinding};
Die Eigenschaft @restbinding gibt an, dass sich die Details für den Servicezugriff in Ihrem Code befinden, nicht im EGL-Implementierungsdeskriptor. Die Entscheidung ist bequem, aber unflexibel. Um die Serviceposition zu ändern, müssen Sie den Quellcode ändern. In Lerneinheit 14 wird der EGL-Implementierungsdeskriptor eingeführt. Dadurch verlagern Sie wahrscheinlich die Details für den Serverzugriff hauptsächlich in Ihre Entwicklungsarbeit.
function checkForEnter(event Event in)
if(event.ch == 13)
search();
end
end
Beachten Sie die folgende Hintergrundinformation: Der EGL-Laufzeitcode ruft die Funktion checkForEnter auf und übergibt ein Ereignisobjekt. Dies ist eine Speicherstruktur, die Details zu einem Ereignis enthält. In diesem Fall wurde der Aufruf durch das Ereignis onKeyDown verursacht und das Ereignisobjekt enthält das ASCII-Zeichen, das den Tastenanschlag des Benutzers darstellt. Konkret ist die Zahl 13 der Dezimalwert für den Wagenrücklauf (die Eingabetaste) in der ASCII-Tabelle, wie auf der folgenden Website beschrieben: ASCII Table and Description (http://www.asciitable.com).
Die Funktion checkForEnter wird nur aufgerufen, wenn der Benutzer eine Taste wie die Tabulator- oder die Eingabetaste drückt, sobald das Textfeld aktiviert ist. Die Funktion ihrerseits ruft nur die Funktion search auf, wenn die Eingabetaste gedrückt wurde. Sie werden die Funktion search bald erstellen.
function buttonClicked(event Event in) search(); end
Mit der Funktion buttonClicked und deren Beziehung zu der schaltflächenspezifischen Eigenschaft onClick wird sichergestellt, dass beim Klicken des Benutzers auf die Schaltfläche Suchen die Funktion search aufgerufen wird.
function search()
localMap.zoom = 13;
// show an initial marker, as necessary to display the map at all
// (the marker identifies only the zip code)
localMap.addMarker(new MapMarker
{address = zipField.text, description = "zipcode: " + zipField.text});
// Call the remote Yahoo! service, passing the zip code
call lookupService.getSearchResults("YahooDemo", zipField.text)
returning to showResults onException displayError;
end
In dieser Eingangsanzeige für eine bestimmte Postleitzahl ist die einzige Information, die Sie für die Funktion localMap.addMarker() bereitstellen, die Postleitzahl selbst. Später geben Sie detailliertere Informationen an, indem Sie die Eigenschaft address festlegen, mit der eine adressspezifische Markierung angezeigt wird.
function showResults(retResult ResultSet in)
linkListing HyperLink[0];
for(i INT from 1 to retResult.result.getSize() by 1)
newLink HyperLink{padding = 4, text = retResult.result[i].title, href = "#"};
newLink.setAttribute("address", retResult.result[i].Address + ", "
+ retResult.result[i].city + ", " + retResult.result[i].state);
newLink.setAttribute("title", retResult.result[i].Title);
newLink.onClick ::= mapAddress;
linkListing.appendElement(newLink);
end
listingBox.setChildren(linkListing);
end
newLink HyperLink{padding = 4, text = retResult.result[i].title, href = "#"};
Der Hyperlink bewirkt, dass Code aufgerufen wird, keine Webadresse. Dennoch wird durch den Platzhalter sichergestellt, dass der Hyperlink Text in ähnlicher Weise anzeigt, nämlich mit Unterstreichungszeichen und in Farbe, wie wenn der Benutzer auf den Hyperlink klickt und dadadurch eine Website öffnet.
function mapAddress(e Event in)
// Show the marker when the user clicks the link
businessAddress STRING = e.widget.getAttribute("address") as STRING;
businessName STRING = e.widget.getAttribute("title") as STRING;
localMap.addMarker(new MapMarker {
address = businessAddress,
description = businessName} );
end
Wenn der Benutzer während der Ausführung auf den Hyperlink klickt, ruft die Funktion mapAddress die Attribute ab, die in der Funktion showResults festgelegt wurden, und setzt eine Markierung auf die angezeigte Landkarte.
function displayError(ex AnyException in)
DojoDialogLib.showError("Yahoo Service",
"Cannot invoke Yahoo Local Service: "
+ ex.message, null);
end
DojoDialogLib ist ein Bibliotheksabschnitt im Projekt com.ibm.egl.rui.dojo.samples, das Sie in Lerneinheit 2 zu Ihrem Arbeitsbereich hinzugefügt hatten. Die Funktion showError in dieser Bibliothek zeigt in einem Dialogfenster Informationen an. Der Funktionsaufruf umfasst eine Zeichenfolge namens message. Dies ist der Ausnahmedatensatz, den der EGL-Laufzeitcode an die Funktion displayError übergibt.
Da dieses Portlet unabhängig funktioniert, können Sie es separat testen.
10001Die Postleitzahl bezeichnet Midtown Manhattan.

Auf der folgenden Website können Sie über Probleme mit dem Service "Lokale Suche" von Yahoo! berichten: “Local API – General Questions” unter http://developer.yahoo.net/forum.
localMap.removeAllMarkers();
In der nächsten Lerneinheit betten Sie den neuen Handler in die Anwendung ein.