API version 1

- ‐

get

指定のURLからCRSファイルを読み込み実行します。

URLで指定した対象のCRSファイルを、以下の順に検索します。

  1. 既にローカルコンピュータにキャッシュされていれば、キャッシュから読み出します。

  2. 事前にimportしたCRSアーカイブ(CARファイル)に含まれていれば、アーカイブから読み出します。

  3. WEBサーバにリクエストを送信(file:の場合ローカルファイルを読み込み)し、CRSファイルを取得します。

取得した内容は、直ちにCRSスクリプトとして実行されます。Webサーバから取得したCRSファイルは、可能であればキャッシュに保存します。 キャッシュの制御については、後述のHTTPヘッダによるキャッシュの制御を参照してください。

  • paramを指定しない場合は、リクエストはHTTPのGETで送られます。

  • paramを指定した場合は、リクエストはHTTPのPOSTで送られます。

WebサーバがHTTPステータスコードに200を返さない場合は例外が発生します。 また、HTTPレスポンスヘッダを利用して任意の例外を発生させることが可能です。

取得したCRSスクリプトのカレントスコープ(this)は、getメソッドを実行したオブジェクトになります。例えば、ButtonクラスのOnTouchイベントハンドラ内でgetメソッドを実行すると、Buttonオブジェクトの子としてオブジェクトが生成されます。画面(Formクラス)を定義したCRSを取得するときは、Rootオブジェクト(//)やFormオブジェクトでgetメソッドを実行するのが一般的です。

取得したCRSスクリプトの実行が完了するまでgetメソッドは復帰しません。

キャッシュの制御

キャッシュを行うファイルに関して以下のルールが適用されます。

  • グローバル設定値"app.cache.mode"で許可されたURLスキームの通信

  • URLにフラグメント、クエリ、ユーザ名、パスワードを含まない

  • HTTPレスポンスヘッダによりキャッシュ不可を指示した場合

    サーバから返されるHTTPレスポンスのヘッダに、標準のHTTPヘッダであるCache-Controlヘッダ、Pragmaヘッダによるno-cacheの指定があると、Biz/Browserは取得したファイルをキャッシュしません。

    Cache-Control: no-cache
    Pragma: no-cache
    

    Biz/Browser固有のヘッダであるCRS-Cache-Controlヘッダは、標準のHTTPヘッダによるキャッシュ制御(Cache-Control、Pragmaヘッダ)より優先してキャッシュを制御できます。

    CRS-Cache-Control: no-cache
    または
    CRS-Cache-Control: cache
    

    CRS-Cache-Controlヘッダにno-cacheが指定されているときはキャッシュしません。cacheが指定されているときはキャッシュします。

    この機能は、HTTPメッセージを中継するプロキシサーバなどとBiz/Browserで異なるキャッシュ制御を行いたいときに利用できます。例えば、Cache-Controlヘッダにno-cacheを指定し、CRS-Cache-Control ヘッダにcacheを指定すると、中継するプロキシサーバではキャッシュされず、Biz/Browserはキャッシュする動作を指示することができます。

HTTPヘッダによる例外の制御

サーバから返されるHTTPレスポンスのヘッダを利用して、任意の例外を発生させることができます。この機能はアプリケーション独自の通信エラー処理に利用できます。 HTTPステータスコードが200のレスポンスヘッダにCRS-Exceptionヘッダを指定することで、正常な通信でも例外を発生させることができます。

CRS-Exceptionヘッダは次の書式で指定します。

CRS-Exception: Method:<メソッド>; Code:<コード>; Message:<メッセージ>;

Method、Code、Messageは、Exceptionクラスの同名のプロパティに対応しています。 Methodの内容はMethodプロパティに設定されます。Methodを指定しない場合は"Server-Error"となります。 Codeの内容はCodeプロパティに設定されます。Codeを指定しない場合は0となります。 Messageの内容はMessageプロパティに設定されます。Messageを指定しない場合はCRS-Exceptionヘッダ全体がMessageに設定されます。

発生する例外のExceptionオブジェクトは、CRS-331例外と同じ構造を持ち、同じ情報(requestURL、statusCodeなど)が格納されます。

呼出形式一覧

呼出形式

説明

void get(string url[, ... args])

urlで指定したURLからCRSファイルをダウンロードして実行します。

戻り値一覧

戻り値

説明

void

なし

引数一覧

引数

説明

url

CRSファイルのURL

URLは以下の規則で決定します。

プロトコルから指定

http://などのプロトコルから指定すると、そのままリクエストを送信します。 URLをホスト名から始めることはできません。ホスト名を指定したい場合は必ずプロトコルから指定します。

例)

get("http://server/path/form1.crs");
get("https://server/path/form1.crs");

絶対パス指定

"/"で始まるURLは絶対パスとなります。Getメソッドを実行したCRSファイルをダウンロードしたサーバにリクエストを送信します。

例)Getメソッドを実行するCRSがhttp://server/path1/form1.crsからダウンロードされた場合

get("/path2/form2.crs");
↓
get("http://server/path2/form2.crs");

相対パス指定

"/"で始まらないURLは相対パスとなります。Getメソッドを実行したCRSファイルをダウンロードしたサーバの同じパスにリクエストを送信します。

例)Getメソッドを実行するCRSがhttp://server/path/form1.crsからダウンロードされた場合

get("form3.crs");
↓
get("http://server/path/form3.crs")

args

リクエストに付加するパラメータ

指定できるパラメータの数に制限はありません。 各パラメータは文字型に変換された後、指定した文字列に"="が含まれるときは、"="の左側をパラメータ名、右側をデータ値とします。 "="が含まれないときは、"argN"(Nはパラメータの位置に応じた数字)をパラメータ名、文字列全体をデータ値とします。

例外

コード

説明

SYS-50:1

通信エラー

使用例

function onTouch(e) {
    //.Form1.delete();
    //.get("Form2.crs");
}

関連項目

Application.cache メソッド



使用例 CRSダウンロード ダウンロード(Dialog12.crs)

Form Objcntl {
   x = 0;
   y = 0;
   width = 800;
   height = 600;
   TextBox textbox1 {
           x = 100;
           y = 120;
           width = 168;
           height = 48;
   }
   Button button1 {
           x = 100;
           y = 200;
           width = 160;
           height = 48;
           Title = "ユーザー定義イベントを\r\n発生させる" ;

           function onTouch(e) {
                   var eventname = "UserEvent";
                   var userEvent1 =
                           new Event(eventname)  {
                                   String data ;
                           }
                   userEvent1.data.Value = ^.TextBox1.Value;
                   PostEvent(userEvent1) ;
           }
   }

   function OnUserEvent(e) {
           //.MessageBox(e.data.Value) ;
           print("from = ",e.from) ;

           var child = new Number[5];
           child[0] = 5;
           child[1] = 4;
           child[2] = 3;
           child[3] = 2;
           child[4] = 1;
           append(child, "TheArray");
           print("clasName=",child.className) ;
           print("array=",child.isArray," inx= ",child.index," Len= ",child.length);
           print("name=",child.name);
           print("type=",child.subType);
           print("change=",child.useChange);

           var fun = findObject("TheArray", FIND_EVENTPATH);
           if (fun == null) { print("null return") ; } ;
           print("find=",fun);
           for (var i in child) {
                   print(" indx=",i, " value=",child[i].value, "\n");
           }
           child.insert( 0 ) ;
           var ca = getChildObjects();
           for (var j in ca) {
                   if (ca[j] != null) {
                           print("inx= ", j, " value= ",ca[j].value ) ;
                   }
           }
           //.get("dialog12.crs");
           /* child.truncate() ; #このサンプルでは使えません */
   }
}