サーバ/通信データ

Q6 10
サーバプログラムからCRSを実行したい 
[内容]
JSPなどのサーバプログラム内で動的にCRSスクリプトを生成し、実行したい

A6 10
[解決方法]
通常、Internet Explorer上でBiz/Browserのプログラムを実行する場合、CRSやCRX
ファイルを呼び出して実行しますが、HTMLによるWebアプリケーションと同様にJSPなどの
サーバプログラムで動的にCRSスクリプトを生成し、実行することが出来ます。

サーバプログラムでは、実行したいCRSスクリプトを呼び出し元へ送り返すように
コーディングします。
このとき、サーバプログラムから送信するコードのヘッダ情報のContent-Typeを
「application/crs」「application/crx」と指定し、CRSスクリプトとして解釈可能な
テキストとして送り返します。
Internet Explorerは、このヘッダ情報(Content-Type)を判断し、受け取ったテキストを
Biz/Browserで実行します。


以下にサーバプログラムで動的にCRSスクリプトを生成、実行する例を挙げます。


<1>Biz/Browser起動時にサーバプログラムが保持している値を渡す

◆JSPサンプル

<%@page lanuage="java" 
contentType="application/crs; charset=Shift_JIS"%> <% String shellid = request.getParameter( "severid" ); %> //.ShellId = "<%=shellid%> Login("http://server/ShellIdSample/Form1.crs");

上記の例では、「contentType」に「application/crs」を設定し、最初に呼び出すCRS
(例えばlogin.crs)をサーバプログラムで動的に生成し、実行します。
このとき、パラメータ渡しの代わりに、サーバプログラムが保持している「shellid」を設定
してBiz/Browserを起動しています。

また、Loginメソッドで指定しているURLも実行状況によって切り替える、といったことも
可能です。

<省略>
<%
    if( status == "A" ){
        crspath = "programA.crs";
    } else {
        crspath = "programB.crs";
    }
%>
Login("http://server/ShellIdSample/<%=crspath%>");



<2>CRSから呼び出されたサーバプログラム内でCRSスクリプトを生成、実行する

◆CRSサンプル

Form Form1 {
    Form Form2 {
    }

    ImageButton ImageButton1[3] {

        Function OnTouch( e ){
            var idx = e.from.index;

            /* 現在表示中の子オブジェクトを削除 */
            ^.Form2.DeleteChild();

            /* サーバプログラムで生成したCRSスクリプトを
               Form2の配下で実行できるようにForm2のGetメソッドを
               実行する */
            /* パラメータとして、何番目のボタンがクリックされたか
               indexを渡す */

            ^.Form2.Get( "http://server/path/subForm.jsp",
                                             "id=" + str( idx ) );
        }
    }
}


◆JSPサンプル

<%@page lanuage="java" 
contentType="application/crs; charset=Shift_JIS"%> <% /* CRSから渡されたパラメータを取得 */ String id = request.getParameter( "id" ); <変数定義 省略> if( id.equals( "0" ) ){ title = "病気の保険"; tem.add("医療"); tem.add("介護"); tem.add("がん"); tem.add("女性向け"); else if( ・・・・ }
%> Form FormID{ Label Label1{ Value = "【<%= title %>】"; } <% for( i = 0; i < item.size(); i++ ){ /* 動的にImageButtonを複数生成 */ out.println( "ImageButton ImageButton" + Integer.toString(i + 1) ); out.println( "{" ); if( i == 0 ){ out.println( "Y = 40;" ); out.println( "X = 5;" ); } else { <座標定義 省略> } out.println( "Title = \"" + item.get(i) + "\";" ); out.println( "Width = 180;" ); out.println( "Height = 30;" ); out.println( "}" ); } %> }

NetObject.Getメソッドには、サーバプログラムを指定することができ、引数を渡すことも
出来ます。
サーバプログラムからのレスポンスはCRSスクリプトとして処理されます。
これにより、サーバプログラム内で動的にCRSスクリプトを生成し、オブジェクトを生成する
といったことが可能です。

上記のサンプルでは、以下の様な画面が生成されます。



サーバプログラムで動的に生成されたCRSスクリプトは、キャッシュの対象外となりますので
ご留意ください。



CRSファイル形式のサンプルを
  「サーバプログラムでShellIDを設定するサンプル (Svr_013_1.zip)
  「サーバプログラムで動的にオブジェクトを生成するサンプル (Svr_013_2.zip)
よりご利用いただけます。

管理番号:SvrM_011
 
  Biz-Collections Bizの宝箱 トップへ
  Biz/Browser Mobile・Biz/Designer Mobile TIPS集 トップへ