![]() |
![]() |
|
|
TRANSFER リクエストの呼び出し方
この節では、TRANSFER リクエストの実行時の状況について説明します。ただし、必要な手順のみを説明しており、すべての手順は説明していません。
Jolt セッション・プール・マネージャを初期化する
まず、クライアントのブラウザを使用して、Jolt ASP Connectivity for BEA Tuxedo のクラスがインストールされている Web サーバに接続します。ダウンロードする最初のページは、tellerForm.asp (次の図の tellerForm.asp ページの例を参照) です。「準備チェックリスト」で、この teller サンプルがすでにインストールされている場合、このページの URL は次のようになっています。
http://<web-server:port>/teller/tellerForm.asp
注記 Web サーバの構成によっては、ポート番号の使用は必要ありません。ほとんどの場合、URL に「:port」を追加する必要はありません。
tellerForm.asp ページの例
tellerForm.asp ページには、Jolt セッション・プール・マネージャを初期化する際に必要な VBScript プロシージャが含まれています。初期化コードは、ASP Script ブロックに入っています。このコードは、このコード・ブロックを、クライアントに送信するのではなくサーバ上で実行するよう Web サーバに命令します。 tellerForm.asp : Jolt セッション・プール・マネージャを初期化する VBScript プロシージャの web_initSessionMgr() は、Jolt セッション・プールを確立する別の VBScript プロシージャを呼び出します。この Jolt セッションは、Web サーバ内の Jolt ASP Connectivity for BEA Tuxedo と BEA Tuxedo アプリケーション内に常駐する Jolt サーバの間に確立されます。呼び出されるプロシージャの 1 つは、web_start() です。web_start.inc ファイルにあるこのプロシージャは、「準備チェックリスト」の teller アプリケーションのインストールの際に編集されている必要があります。 web_cacheTemplates() プロシージャは、さまざまな HTML テンプレートをメモリ・キャッシュに読み込みます。この手順は必須ではありませんが、この操作によってパフォーマンスが向上します。 tellerForm.asp:ユーザが TRANSFER サービスを選択できるようにする 上記の HTML セグメントは、「Transfer」という名前のボタンを表示します。このボタンが選択されると、ブラウザは transferForm.htm ページをロードします。 クライアントから TRANSFER リクエストを送信する 次の図の「transferForm.htm の例」のフォームは、transferForm.htm によって生成されます。このページは、入力用のフォームを表示します。このページは、3 つのテキスト・フィールド (2 つの口座番号の入力フィールドとドル金額の入力フィールド) と、TRANSFER サービスを呼び出すときに使用するボタンで構成されています。 transferForm.htm の例<%
'// テンプレートを初期化しテンプレートをキャッシュします。
Call web_initSessionMgr(Null)
Call web_cacheTemplates()
%><INPUT TYPE="button" VALUE="Transfer"
onClick="window.location='transferForm.htm'">
次のコード・セグメントは、このページの主要な HTML エレメントを示しています。次のリスト内の太字のエレメントは、表の「主要な HTML エレメントとその説明」のエレメントに対応しています。 transferForm.htm:TRANSFER フォーム
<FORM NAME="teller" ACTION="tlr.asp" METHOD="POST">
<TABLE>
<TR><TD ALIGN=RIGHT>From Account Number: </TD>
<TD><INPUT TYPE="text" NAME="ACCOUNT_ID_0"></TD></TR>
<TR><TD ALIGN=RIGHT>To Account Number: </TD>
<TD><INPUT TYPE="text" NAME="ACCOUNT_ID_1"></TD></TR>
<TR><TD ALIGN=RIGHT>Amount: $</TD>
<TD><INPUT TYPE="text" NAME="SAMOUNT"></TD></TR>
</TABLE>
<CENTER>
<INPUT TYPE="hidden" NAME="SVCNAME" VALUE="TRANSFER">
<INPUT TYPE="submit" VALUE="Transfer">
<INPUT TYPE="reset" VALUE="Clear">
</CENTER>
</FORM>
この例で使用されている HTML フォームのフィールド名は、TRANSFER サービスで使用される BEA Tuxedo のフィールド名と完全に一致しています。これは必須ではありませんが、このように BEA Tuxedo と同じフィールド名を使用すると、入力項目を BEA Tuxedo フィールド名にマッピングする必要がなくなるため、サーバ上の処理が簡単になります。これは、Jolt ASP Connectivity for BEA Tuxedo クラスによって実行されます。 非表示の SVCNAME フィールドには、「TRANSFER」という値が指定されます。このフィールドはクライアント・フォームには表示されませんが、リクエストの一部として Web サーバに送信されます。VBScript プログラムは、どの BEA Tuxedo サービスを呼び出すか (この場合は TRANSFER サービス) を決定するために、このフィールドの値を取得します。 [From Account Number]、[To Account Number]、および [Amount] フィールドに入力します。BankApp では、10000 および 10001 が口座番号として有効です。[Transfer] ボタンを押します。フォームで入力されたデータは、Web サーバに送信され、このフォームの ACTION フィールドで指定されている tlr.asp で処理されます。 リクエストを処理する Web サーバは、TRANSFER リクエストを受信すると tlr.asp プログラムを実行します。クライアント・リクエストは、Web サーバで Request オブジェクトに変換されます。Request オブジェクトは、このフォームに入力されたすべてのデータと非表示フィールドなどのほかのフォーム・データを含むメンバを持っています。Web サーバは、この Request オブジェクトを実行プログラムで使用できるようにします。 tlr.asp プログラムは、VBScript のみを含みます。このプログラムは、最初に Jolt セッション・プール・マネージャが初期化されているかどうかを確認します。 次のリスト内のコード例は、この初期化チェックの実行と、セッション・プールが初期化されていない場合に HTML のエラー・ページを返すことを示しています。 tlr.asp:Jolt セッション・プール・マネージャが初期化されているかどうかを確認する セッション・プールが初期化されている場合、このプログラムはリクエストの処理を続行します。プログラムは、次のリストで示すように、セッション・プール・マネージャからセッションを探し出します。 tlr.asp:セッションを探し出す 有効なセッションを探し出すと、プログラムは、結果をクライアントに返すために使用する HTML テンプレートを取得します。この例では、テンプレートは初期化セクションでキャッシュされています。取り出されるテンプレートは、呼び出されているサービスの名前である Request("SVCNAME") によって識別されます (次のリストを参照)。 tlr.asp:キャッシュされている HTML テンプレートを取り出す 次のリストの「tlr.asp:BEA Tuxedo サービスの呼び出し」に示すような BEA Tuxedo サービスを呼び出します。この例では、request オブジェクトからの入力データが、セッションの call() メソッドに渡されます。call() メソッドは、ASP 組み込みの Request オブジェクトを入力として使用します。call() メソッドの結果は、output オブジェクトと iodata 配列に格納されます。 tlr.asp:BEA Tuxedo サービスの呼び出し BEA Tuxedo サービスを呼び出した後、output オブジェクトと iodata 配列の第 2 要素に、このサービス呼び出しの結果が入っています。 注記 フォームで最初に指定されるフィールド名と BEA Tuxedo サービスのパラメータ名が一致しているため、Request オブジェクトをそのまま call() メソッドで使用することができます。これらの名前が一致しない場合は、call() メソッドを呼び出す前に、各サービス・パラメータに対して「名前 = 値」の形式で入力配列を作成します。 クライアントへ結果を返す この段階では、クライアントに結果は返されていません。最後の手順では、このサービス呼び出しの結果を含む HTML ページをクライアントに返します。この HTML ページは、テンプレートにサービス呼び出しが返すデータをマージしたものです (リストの「tlr.asp:BEA Tuxedo サービスの呼び出し」を参照)。 テンプレート・ファイルには、呼び出しに固有なさまざまなデータのプレースホルダが入っています。これらのプレースホルダは、<%=NAME%> という特殊なタグによって識別されます。次のリスト内に示すコード例は、インデックスを使用しているパラメータ名のどのオカレンスが使用されているかを示します。たとえば、 ACCOUNT_ID[0] は、ACCOUNT_ID フィールドの最初のオカレンスを指定します。 transfer.temp:TRANSFER の結果のプレースホルダ テンプレートの中のプレースホルダを、サービス呼び出しが返したデータの実際の値に置換する場合は、次のリストに示す Template オブジェクトの eval() メソッドを使用します。このメソッドは、テンプレート・ファイルのプレースホルダと結果データの同名のフィールドを比較し、一致するデータでプレースホルダを置換します。結果 (output オブジェクト) の有効性チェックは、次のリスト内に示す方法で実行されます。output オブジェクトがない場合は、エラー・テンプレート・ページが返されます。 tlr.asp:テンプレートの処理 注記 iodata 配列には、入力リクエストとサービス呼び出しの結果が含まれています。iodata 配列は、結果ページに入力データを含ませたい場合に便利です。 テンプレートが処理されると、次の図のような HTML の結果ページがクライアントに返されます。 tlr.asp 結果ページ<%
If Not IsObject(Application("mgr")) Then
%>
<HTML>
<HEAD><TITLE>Error</TITLE></HEAD>
<BODY><CENTER>
<H2>Session Manager is not initialized</H2>
<P>Make sure that you access the correct HTML
</CENTER></BODY>
</HTML>
<%
End If
%>Set pool = Application("mgr").getSessionPool(Null)
'// レスポンス・テンプレートを選択します
If IsEmpty(Application("templates")) Then
Set template = Server.CreateObject("BEAWEB.Template")
Else
Select Case Request("SVCNAME")
Case "INQUIRY"
Set template = Application("templates")(INQUIRY)
Case "DEPOSIT"
Set template = Application("templates")(DEPOSIT)
Case "WITHDRAWAL"
Set template = Application("templates")(WITHDRAWAL)
Case "TRANSFER"
Set template = Application("templates")(TRANSFER)
End Select
End IfSet output = pool.call(Request("SVCNAME"), Null, Nothing)
Set iodata(1) = output<TABLE BORDER=1>
<TR><TD></TD><TD ALIGN=CENTER><B>Account #</B></TD>
<TD ALIGN=CENTER><B>Balance</B></TR>
<TR><TD ALIGN=RIGHT><B>From:</B></TD><TD><%=ACCOUNT_ID[0]%></TD>
<TD><%=SBALANCE[0]%></TR>
<TR><TD ALIGN=RIGHT><B>To:</B></TD><TD><%=ACCOUNT_ID[1]%></TD>
<TD><%=SBALANCE[1]%></TR>
</TABLE>path = Application("templatedir")
If (Not IsObject(output)) Or (output is Nothing) Then
Call template.evalFile(path & "¥nosession.temp", Null)
Elseif output.noError() Then
Call template.eval(iodata)
Elseif output.applicationError() Then
Call template.evalFile(path & "¥error.temp", iodata)
Else
'// System error
Dim errdata(0)
Set errdata(0) = Server.CreateObject("BEAWEB.TemplateData")
Call errdata(0).setValue("ERRNO", output.getError())
Call errdata(0).setValue("ERRMSG", output.getStringError())
Call template.evalFile(path & "¥syserror.temp", errdata)
End If
![]() |
![]() |
![]() |
|
Copyright © 2001 BEA Systems, Inc. All rights reserved.
|