httpDownload

Q6
AsyncDownloadイベントが発生しない

A6
[解決方法]
httpDownloadオブジェクトがオブジェクトツリーに接続されている必要があります。

httpDownloadオブジェクトを、

 httpDownload httpdown_obj;

と定義した場合は、オブジェクトツリーに接続されますが、

 var httpdown_var = new httpDownload( servername );

と、var変数で定義した場合は、オブジェクトツリーに接続されません。

var変数、httpdown_varへは、オブジェクトのリファレンスが格納されるだけとなります。
また、生成されたオブジェクトは、オブジェクトツリーに属さない無名の一時的なオブジェクトであるため、イベントを渡す先が不明となります。

var変数で定義した場合は、appendメソッドを使用して、オブジェクトツリーへ接続させてください。
 append( httpdown_var, オブジェクト名 );

この時、同一階層に同じ名前のオブジェクトを指定しないようにご注意ください。
既に同じ名前のオブジェクトが存在する場合、「同じ名前をもつオブジェクトはAppendすることはできません」エラーが発生します。
例えば、ButtonオブジェクトのOnTouchイベントハンドラ内でappendメソッドを実装している場合、ButtonオブジェクトのTouchイベントが発生する度にappendメソッドが実行され、エラーとなります。
deleteメソッドでオブジェクトツリーから切り離すか、appendメソッドの実行を回避する処理を実装してください。


[サンプルコード]
Form Form1 {
    X = 0;
    Y = 0;
    Width = 400;
    Height = 300;
    Button Button1 {
        X = 10;
        Y = 10;
        Width = 165;
        Height = 20;
        Title = "Get CSV Data";

        Number obj_flg = 1;

        Function OnTouch( e ) {
            var hd_obj
            if( obj_flg ){
                obj_flg = 0;
                hd_obj = new httpDownload( getHttpSession() );

                /* オブジェクト名を指定してオブジェクトツリーに接続 */
                append( hd_obj,"hd_obj" );
                hd_obj.AddURL("/getCSV.jsp");
                hd_obj.Start();
            }
        }

        /* Button1.hd_obj から伝播したイベントを捕捉する */
        Function OnAsyncDownload( e ) {
            if( e.response.status == $HTTP_OK ){
                print( e.response.body );
            }else{
                hd_obj.Stop();
            }
        }
        Function OnExitDownload( e ) {
            obj_flg = 1;
            hd_obj.delete();
            MessageBox( "終了" );
        }
    }
    if ( !$DESIGNTIME ) {
    }
}
管理番号:Dwn_007
  Biz-Collections Bizの宝箱 トップへ
  Biz/Browser・Biz/Designer TIPS集 トップへ