lookupService YahooLocalService{@restbinding};
La propiedad @restbinding indica que los detalles de acceso al servicio se encuentran en el código y no en el descriptor de despliegue EGL. La decisión es cómoda pero inflexible. Un cambio en la ubicación del servicio requiere cambiar el código fuente. En la lección 14 se ofrece una introducción del descriptor de despliegue EGL, donde seguramente deberá especificar detalles de acceso al servicio en la mayor parte de su trabajo de desarrollo.
function checkForEnter(event Event in)
if(event.ch == 13)
search();
end
end
Considere los siguientes detalles de fondo: El código de tiempo de ejecución EGL invoca la función checkForEnter y pasa un objeto de evento, que es una estructura de memoria que incluye detalles acerca del evento. En este caso, el evento que ha originado la invocación es onKeyDown, y el objeto de evento incluye el carácter ASCII que representa la pulsación del usuario. Concretamente, el número 13 es el valor decimal para el retorno de carro (la tecla INTRO) en la tabla ASCII, como se indica aquí: Tabla ASCII y descripción (http://www.asciitable.com).
La función checkForEnter sólo se invoca si el usuario pulsa una tecla, como por ejemplo Tab o INTRO, cuando el campo de texto tiene el foco. La función, a su vez, invoca la función search sólo si se trataba de la tecla INTRO. Pronto creará la función search.
function buttonClicked(event Event in) search(); end
La función buttonClicked y su relación con la propiedad onClick específica del botón asegura que cuando el usuario pulse el botón Search se invocará la función search.
function search()
localMap.zoom = 13;
// mostrar un marcador inicial, según sea necesario para visualizar el mapa
// (el marcador sólo identifica el código postal)
localMap.addMarker(new MapMarker
{address = zipField.text, description = "zipcode: " + zipField.text});
// Llamar al servicio Yahoo! remoto, pasando el código postal
call lookupService.getSearchResults("YahooDemo", zipField.text)
returning to showResults onException displayError;
end
En esta visualización inicial de un código postal específico, el único detalle que se proporciona a la función localMap.addMarker() es el propio código postal. Más tarde, establezca la propiedad address para ofrecer más detalle, que se utiliza para visualizar un marcador específico de dirección.
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 = "#"};
El hiperenlace provocará la invocación del código y no de una dirección web. Sin embargo, la presencia del marcador de posición asegura que el hiperenlace mostrará el texto de una forma familiar, con un subrayado y en color, como cuando el usuario pulsa el hiperenlace para abrir un sitio web.
function mapAddress(e Event in)
// Mostrar el marcador cuando el usuario pulsa el enlace
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
Cuando el usuario pulsa el hiperenlace en tiempo de ejecución, la función mapAddress recupera los atributos que se habían establecido en la función showResults y establece un marcador en el mapa visualizado.
function displayError(ex AnyException in)
DojoDialogLib.showError("Yahoo Service",
"Cannot invoke Yahoo Local Service: "
+ ex.message, null);
end
DojoDialogLib es un componente Library del proyecto com.ibm.egl.rui.dojo.samples que se ha añadido al espacio de trabajo de la Lección 2. La función showError de dicha biblioteca muestra información en un diálogo. La invocación de la función incluye una serie llamada message, que está en el registro de excepción que el código de tiempo de ejecución de EGL pasa a la función displayError.
Dado que este portlet funciona de manera independiente, puede probarlo por separado.
10001Este código postal hace referencia a midtown Manhattan.

Los problemas con el Servicio de búsqueda local de Yahoo! pueden notificarse aquí: “API local – Preguntas generales” en http://developer.yahoo.net/forum.
localMap.removeAllMarkers();
En la lección siguiente, incorporará el nuevo manejador en la aplicación.