lookupService YahooLocalService{@restbinding};
@restbinding プロパティーは、サービス・アクセスの詳細が、EGL デプロイメント記述子ではなく、コード内にあることを示します。 このような決断は便利ではありますが、柔軟性には欠けます。 サービスのロケーションを変更する場合に、ソース・コードの変更が必要になります。 演習 14 では、EGL デプロイメント記述子を紹介します。開発作業の多くでは、サービス・アクセスの詳細をこの記述子に置くことが多くなります。
function checkForEnter(event Event in)
if(event.ch == 13)
search();
end
end
背景にある以下のような詳細を考慮に入れてください。EGL ランタイム・コードは、checkForEnter 関数を呼び出して、イベント・オブジェクト (イベントに関する詳細を含んだメモリー構造) を渡します。 この場合、呼び出しを実行したイベントは onKeyDown で、イベント・オブジェクトには、ユーザーのキー・ストロークを表す ASCII 文字が含まれています。 特に、数値 13 は ASCII 表の復帰 (Enter キー) を表す 10 進値です。これについては、ASCII Table and Description (http://www.asciitable.com) に説明があります。
checkForEnter 関数が呼び出されるのは、テキスト・フィールドにフォーカスが置かれた状態で、ユーザーが Tab や Enter などのキーを押した場合のみです。 関数側では、キーが Enter であった場合にのみ、search 関数を呼び出します。 search 関数はこの後で作成します。
function buttonClicked(event Event in) search(); end
buttonClicked 関数、およびボタン固有の onClick プロパティーに対するその関係により、ユーザーが「Search」ボタンをクリックした際に search 関数が呼び出されるようになります。
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
特定の郵便番号を表すこの初期表示でユーザーが localMap.addMarker() 関数に提供する唯一の詳細は、郵便番号それ自体です。 その後、address プロパティーを設定してより詳しい内容を提供し、それによって住所固有のマーカーが表示されます。
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 = "#"};
このハイパーリンクでは、Web アドレスではなく、コードが呼び出されます。 ただし、プレースホルダーがあることで、ユーザーがハイパーリンクをクリックして Web サイトが開く場合と同様に、下線の引かれた色付きのテキストという一般的な方法でハイパーリンクが表示されます。
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
ユーザーが実行時にハイパーリンクをクリックすると、mapAddress 関数は、showResults 関数で設定された属性を取得し、表示されたマップ上にマーカーを設定します。
function displayError(ex AnyException in)
DojoDialogLib.showError("Yahoo Service",
"Cannot invoke Yahoo Local Service: "
+ ex.message, null);
end
DojoDialogLib は、演習 2 でワークスペースに追加した com.ibm.egl.rui.dojo.samples プロジェクトのライブラリー・パーツです。このライブラリーにある showError 関数によって、ダイアログ内に情報が表示されます。 この関数呼び出しには message という名前のストリングが含まれており、これは、EGL ランタイム・コードが displayError 関数に渡す例外レコード内にあります。
このポートレットは独立して動作するので、単独でテストできます。
10001この郵便番号は、マンハッタン中心部のものです。

Yahoo! Local Search Service に関する問題は、『Local API – General Questions』(http://developer.yahoo.net/forum) に報告されている可能性があります。
localMap.removeAllMarkers();
次の演習では、この新規ハンドラーをアプリケーションに組み込みます。