- PR -

ATLASでのデータセットの戻り値について

1
投稿者投稿内容
未記入
大ベテラン
会議室デビュー日: 2005/03/23
投稿数: 105
投稿日時: 2007-06-27 13:33
いつもお世話になります。

今回VS2005(ASP.NET(VB) ATLAS)にて開発を
行っています。

テキストボックス1 ドロップダウンリスト1

がありテキストボックスをEnter時に入力された内容を
キーにDBよりデータを取得しドロップダウンリストに
データをセットしようとしているのですが、
サーバー側の処理でデータセット(dataset)にデータを
格納しそれをリターンする?部分でうまくいきません。

javascript部分
var nm = $get('Txt_Urinm').value;
AJAXDataGet.Get_Torisaki(nm, OnComplete, OnTimeout,OnError);

function OnComplete1(result1){
var ds = result1.value;
}

//エラー時処理
function OnTimeout(result)
{
alert('タイムアウト発生');
}

function OnError(result)
{
alert('エラー発生');
}

WEBサービス(サーバー側)のコード
<WebMethod()> _
Public Function Get_Torisaki(ByVal nm As String) As DataSet
'取引先の検索
Dim result As New DataSet
     ※データ取得コード
Return result
End Function

上記内容でWEBサービスのメソッドを呼び出すと
問題なくEnd Functionまでいくのですが、
(デバックでresultの中にデータが格納されてい
 るのも確認済み)
その後にjavascriptのOncompleteにはいかず
OnTimeoutの部分に飛んでエラーメッセージが
出力されます。ここでリターンするのをdataset
ではなくStringにして値を返すとOncomplete部分
に飛んでくれます。

どこかおかしい部分がわかられる方がおられましたら
宜しくお願いします。
どっとねっとふぁん
ぬし
会議室デビュー日: 2005/02/23
投稿数: 935
投稿日時: 2007-06-27 14:43
このコードだけみると、

> AJAXDataGet.Get_Torisaki(nm, OnComplete, OnTimeout,OnError);

終了時のOnCompleteを呼び出したいのだろうけど、

> function OnComplete1(result1){

OnComplete1しかないから動かない、というように見えてしまいますが。。。

#typoなんだろうなぁ。。。

未記入
大ベテラン
会議室デビュー日: 2005/03/23
投稿数: 105
投稿日時: 2007-06-27 14:58
お返事ありがとうございました。

>> function OnComplete1(result1){

の部分ですが書き間違えました
OnComplete(result){

と記述しているのにOnTimeOutにいって
しまいます。

#typoとはなんでしょうか?
わかれば教えて下さい。

宜しくお願いします。
chack
常連さん
会議室デビュー日: 2002/11/18
投稿数: 48
お住まい・勤務地: 埼玉県
投稿日時: 2007-06-27 20:24
ATLASということですが、正式版の ASP.NET AJAX Extensions 1.0 をお使いなら、

AJAXDataGet.Get_Torisaki(nm, OnComplete, OnTimeout, OnError);

は、

AJAXDataGet.Get_Torisaki(nm, SucceededCallback, FailedCallback, userContext);

に変更されていますので注意してください。

【参考】
Generated Proxy Classes Web Service Methods
http://ajax.asp.net/docs/ClientReference/Sys.Net/GeneratedProxyClasses/WebServiceMethods.aspx

[ASP.NET AJAX] クライアントスクリプトからの Web サービスの非同期呼び出し
http://bitwiz.jp/tabid/56/EntryID/22/Default.aspx


OnTimeout が呼び出されているのは、この変更が原因では。
おそらく何かしらのエラーが起きているものと思います。

詳しいエラー情報を、次の例のようにして取得してみてください。

function FailedCallback(error)
{
var stackTrace = error.get_stackTrace();
var message = error.get_message();
var statusCode = error.get_statusCode();
var exceptionType = error.get_exceptionType();
var timedout = error.get_timedOut();

$get("result").innerHTML =
"スタックトレース : " + stackTrace + "<br/>" +
"エラーメッセージ : " + message + "<br/>" +
"ステータスコード : " + statusCode + "<br/>" +
"例外の種類 : " + exceptionType + "<br/>" +
"タイムアウト : " + timedout;
}


おそらく、ASP.NET AJAX を使ったWebサービスで DataSet をそのまま返しているのに何かあるのだと思いますが、ちょっとわかりません。

JSONシリアライズがだめなのかなも?
次のような属性を指定したらどうでしょうか?

<WebMethod()> _
<ScriptMethod(ResponseFormat:=ResponseFormat.Xml, _
XmlSerializeString:=True)> _
Public Function Get_Torisaki(ByVal nm As String) As DataSet
'取引先の検索
Dim result As New DataSet
     ※データ取得コード
Return result
End Function

Access
ぬし
会議室デビュー日: 2002/04/08
投稿数: 829
投稿日時: 2007-06-28 08:27
まず、ATLASからASP.NET AJAX 1.0に移行してください。

ATLASでは、WebサービスからDataSet、DataTableを返すことができたはずでしたが、
AJAX 1.0では、DataSet、DataTableをシリアライズしていないようです。

DataTableをGeneric Listに格納して返すとJSONにシリアライズするようです。

このサンプルが参考になるかと:
http://jsajax.com/SamplesByID.aspx?id=456

「その他」のタブをクリックするとWebサービスのソースが表示されます。
_________________
ASP.NET+Ajaxサンプル集 | JavaScript+Ajaxサンプル集

[ メッセージ編集済み 編集者: Access 編集日時 2007-06-28 08:40 ]
未記入
大ベテラン
会議室デビュー日: 2005/03/23
投稿数: 105
投稿日時: 2007-06-28 09:40
chackさん、Accessさんお返事ありがとうございます。

まずATLASと記述していたのですが、インストールしていたのは
ASP.NET AJAX Extensions 1.0でした。

AJAX1.0とATLASがごっちゃになってすみませんでした。

まずchackさんからのお返事で
//<WebMethod()> _
//<ScriptMethod(ResponseFormat:=ResponseFormat.Xml, _
//XmlSerializeString:=True)> _
とありWEBサービス部分に記述してみたのですが、
ScriptMethodがエラーになりました。
どの名前空間にあるのかがわからず同じような文言のものを
探していたら、ScriptMethodAttributeというのがあり
<ScriptMethodAttribute(ResponseFormat:=ResponseFormat.Xml, _
XmlSerializeString:=True)> _
と実装し、実行したところ戻り値としてデータセットを受け取る
ことが出来ました。
function SucceededCallback(result){ ※resultの部分に取得OK

} 
しかしresultからの取り出し方法がわからず今悪戦苦闘中です。
※デバッグでresultを見ると,text xmlというプロパティに
値が入っていそうなのですが・・・
ここの取り出し部分でいい方法があれば宜しくお願いします。

Accessさんの

>DataTableをGeneric Listに格納して返すとJSONにシリアライズするようです。

上記のやり方でなら確かに問題なく出来そうです。
こちらの方法も試してみようと思います。

引き続き検証の方を行います。

yos
常連さん
会議室デビュー日: 2004/08/24
投稿数: 27
投稿日時: 2007-06-28 10:17
引用:
#typoとはなんでしょうか?
わかれば教えて下さい。


http://ja.wikipedia.org/wiki/Typo
未記入
大ベテラン
会議室デビュー日: 2005/03/23
投稿数: 105
投稿日時: 2007-06-28 14:06
yosさんお返事ありがとうございます。

typoの意味わかりました。

とりあえず今回のデータ取得はAccessさんに
教えて頂いた方法で解決しました。

本当にありがとうございました。
1

スキルアップ/キャリアアップ(JOB@IT)