VSUGのセッションで行ったデモの解説
VSUG DAY 2006 SUMMERのセッション資料が、下記のページからダウンロードできるようになっています。
http://vsug.jp/tabid/129/Default.aspx
※会員ログインが必要となります。
なぜか私のセッションだけデモのプロジェクトもダウンロードできるようになっていますので、こちらで少しフォローしておきたいと思います。なお、ダウンロードできるプロジェクトはAtlas April CTPで作成されたものですが、最新版であるこちらのJune CTPでも動作することを確認しています。
「05_AtlasJavaScript.aspx」は、セッションの中でクライアントセントリックモデルとして紹介したデモの1つです。
<atlas:ScriptManager ID="ScriptManager1" runat="server">
<services>
<atlas:servicereference path="ZipSearchService2.asmx" type="text/javascript" />
</services>
</atlas:ScriptManager>
ScriptManagerコントロールのServicesプロパティにServiceReferenceオブジェクトを追加している部分です。この記述により、クライアントスクリプトから下記のような記述でWebサービスメソッドを非同期に呼び出すことができます。<services>
<atlas:servicereference path="ZipSearchService2.asmx" type="text/javascript" />
</services>
</atlas:ScriptManager>
Sample.Atlas.ZipSearchService2.GetAddress(SrchElem.value, OnRequestComplete);
「Sample.Atlas」の部分は名前空間です。1つ目の引数がWebサービスメソッドに実際に受け渡す引数となり、2つ目の引数はクライアント側で結果を受け取るための関数名になります。呼び出されるWebサービスメソッドは通常のものと何ら変わりがないもので、特にAtlasから呼び出されるためのWebサービスメソッドだと宣言する必要があるといったことはありません。ここでのポイントは、メソッドの戻り値としてDataTableオブジェクトをそのまま返しているという部分です。
<WebMethod()> _
Public Function GetAddress(ByVal zipcode As String) As DataTable
AtlasのWebサービスプロキシから呼び出されたWebサービスメソッドの場合、戻り値はXMLではなくJSONデータへシリアライズされてクライアントへ返されます。逆に、クライアント側では自動的にJSONデータからのデシリアライズが行われるため、下記のように戻り値を直接セットすることができます。Public Function GetAddress(ByVal zipcode As String) As DataTable
function OnRequestComplete(result)
{
var myListBox = new Sys.UI.Select($("Select1"));
myListBox.set_textProperty("address");
myListBox.set_data(result);
}
{
var myListBox = new Sys.UI.Select($("Select1"));
myListBox.set_textProperty("address");
myListBox.set_data(result);
}
もし、他のデモについてもここが良く分からないという部分がありましたら、コメントかメールで連絡ください。こちらで解説します。