lookupService YahooLocalService{@restbinding};
A propriedade @restbinding indica que os detalhes de acesso ao serviço estão em seu código em vez de estarem no descritor de implementação do EGL. Essa decisão é conveniente, mas inflexível. Uma mudança no local do serviço requer que você altere o código de origem. A Lição 14 introduz o descritor de implementação do EGL, onde é provável que você insira a maioria dos detalhes de acesso ao serviço do seu trabalho de desenvolvimento.
function checkForEnter(event Event in)
if(event.ch == 13)
search();
end
end
Considere o seguinte detalhe de plano de fundo: O código de tempo de execução do EGL chama a função checkForEnter e passa um objeto de evento, que é uma estrutura de memória que inclui detalhes sobre o evento. Neste caso, o evento que provocou a chamada é onKeyDown, e o objeto de evento inclui o caractere ASCII que representa o pressionamento de tecla do usuário. Especificamente, o número 13 é o valor decimal do Retorno de Linha (a tecla ENTER) na tabela ASCII, conforme observado aqui: Tabela ASCII e descrição (http://www.asciitable.com).
A função checkForEnter é chamada apenas se o usuário pressionar uma tecla, como Tab ou ENTER, quando o campo de texto estiver em foco. A função, por sua vez, chama a função search apenas se a tecla for ENTER. Você criará a função search em breve.
function buttonClicked(event Event in) search(); end
A função buttonClicked e seu relacionamento com a propriedade onClick específica do botão assegura que, quando o usuário clica no botão Procurar, a função search seja chamada.
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
Nesta exibição inicial de um CEP específico, o único detalhe que você fornece à função localMap.addMarker() é o próprio CEP. Posteriormente, você configurará a propriedade endereço para fornecer mais detalhe, que é usada para exibir um marcador específico de endereço.
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 = "#"};
O hyperlink provocará a chamada do código em vez de um endereço da Web. Entretanto, a presença do marcador assegura que o hyperlink mostra o texto de uma forma familiar, com um sublinhado e colorido, como se o clique do usuário no hyperlink abrisse um Web site.
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
Quando o usuário clica no hyperlink no tempo de execução, a função mapAddress recupera os atributos que foram configurados na função showResults e configura um marcador no mapa exibido.
function displayError(ex AnyException in)
DojoDialogLib.showError("Yahoo Service",
"Cannot invoke Yahoo Local Service: "
+ ex.message, null);
end
DojoDialogLib é uma parte da Biblioteca no projeto com.ibm.egl.rui.dojo.samples que foi incluída na área de trabalho na Lição 2. A função showError nessa biblioteca exibe as informações em um diálogo. A chamada de função inclui uma sequência denominada mensagem, que está no registro de exceção que o código de tempo de execução do EGL passa para a função displayError.
Como este portlet trabalha de forma independente, é possível testá-lo separadamente.
10001Esse CEP faz referência ao centro de Manhattan.

Problemas com o Yahoo! Local Search Service podem ser relatados aqui: “API Local – Questões Gerais” em http://developer.yahoo.net/forum.
localMap.removeAllMarkers();
Na próxima lição, você integrará o novo manipulador no aplicativo.