| 5. カスタマイズ |
フェーズに関連づけるHTMLの作成や、自動生成ソースのカスタマイズに関するノウハウを説明します。
| 5.1. HTMLの作成 |
■APAgentオブジェクトの変数名を自由に設定する
<%-- APAGENT_n_IS 変数名 --%>というコメントを出力用HTML(JSP)ファイルに記述することにより、フェーズに割り当てるメソッドに対応するAPAgentオブジェクトの変数名を自由に設定することができます。
<%-- APAGENT_n_IS 変数名 --%> |
JSP開発ツールでJSP生成した場合には、メソッドに対応するAPAgentオブジェクトの変数名は、jspAgent_メソッド名となりますが、事前カスタマイズでAPAgentオブジェクトから値を取得する処理を記述する場合には、メソッド名を特定しなければならない変数名を使用するのは不便です。 そのため、フェーズに設定するメソッドの順番に合わせて変数名を自由に設定できるようにしました。
記述例(INPUTタグText1とText2に同じ値を表示します)| JSP生成前 | <%-- APAGENT_1_IS agent --%> : <INPUT NAME="Text1" TYPE="text" VALUE=""> <- ここはJSP開発ツールでマッピング <INPUT NAME="Text2" TYPE="text" VALUE="<%= agent.param1%>"> <- ここは事前カスタマイズ |
| JSP生成後 |
<%-- APAGENT_1_IS agent --%>
:
<% proj.tran.classes.stub.ifname_Method1_APAgentSub jspAgent_Method1
= (proj.tran.classes.stub.ifname_Method1_APAgentSub)param.getAPAgent("Method1"); %>
<% proj.tran.classes.stub.ifname_Method1_APAgentSub agent = jspAgent_Method1; %>
:
<INPUT NAME="Text1" TYPE="text" VALUE="<%= jspAgent_Method1.param1%>">
<INPUT NAME="Text2" TYPE="text" VALUE="<%= agent.param1%>">
:
|
■テーブル内にサーバAPの実行結果を修飾したテキスト文字で表示
サーバAPのメソッドの出力引数または戻り値を、列マッピングしたテーブルに、修飾したテキスト文字で表示したい場合は、TDタグの中に修飾用のHTMLタグを記述してください。
<TD>〜</TD>の間にマッピング可能なHTMLタグの記述がない場合、列マッピングしたデータは、<TD>〜</TD>の間に出てくる最初の終端タグの前に出力されます。
下記の記述例の場合は、「引数設定」ダイアログで 名前を出力引数または戻り値に列マッピングすることにより、実行時に出力引数または戻り値の値が </i>タグの前にテキスト文字として出力されます。このため緑色の斜体文字として表示されます。
同様に、住所を列マッピングした場合は、</b>タグの前に出力されるので、太字で表示されます。
<table border="1"> <tr> <th>名前</th> <th>住所</th> </tr> <tr> <td><font color=green><i></i></font></td> <td><b></b></td> </tr> </table> |
■テーブルの見出し行にサーバAPの実行結果を表示
サーバAPのメソッドの出力引数または戻り値を、テーブルの見出し行に表示したい場合は、NAME属性値のない見出し行だけのテーブルを用意し、THタグの中にOTXJSPKEYタグを記述してください。
下記の記述例の場合は、「引数設定」ダイアログで JSPKEY1を出力引数または戻り値にマッピングすることにより、実行時に出力引数または戻り値の値が OTXJSPKEYタグの後ろにテキスト文字として出力されます。このためテーブルの見出しとして表示されます。
また、VAL_Aを出力引数または戻り値にマッピングすることにより、JSPKEY1にマッピングした見出しに対応するデータを表示することができます。
<form>
<table border="1">
<tr><td>
<table border="1" width="100%">
<tr>
<th width="50%"><OTXJSPKEY name="JSPKEY1"></th>
<th width="50%"><OTXJSPKEY name="JSPKEY2"></th>
</tr>
</table>
</td></tr>
<tr><td>
<table border="1" width="100%">
<tr>
<td width="50%"><input type="text" name="VAL_A" size="20"></td>
<td width="50%"><input type="text" name="VAL_B" size="20"></td>
</tr>
</table>
</td></tr>
</table>
</form>
|
■サーバAPの実行結果をテキスト文字で表示
サーバAPのメソッドの出力引数または戻り値を INPUTタグではなくテキスト文字として表示したい場合は、OTXJSPKEYタグを使用してください。
OTXJSPKEYタグは、WebAP JSP 独自のタグであるため、Webブラウザで表示する場合には OTXJSPKEYタグそのものは無視されます。環境設定での指定により OTXJSPKEYタグを生成JSPに出力しないようにすることもできます。
下記の記述例の場合は、「引数設定」ダイアログで ADDRESS を出力引数または戻り値に マッピングすることにより、実行時に出力引数または戻り値の値が OTXJSPKEYタグの後にテキスト文字として出力されます。
| <OTXJSPKEY NAME="ADDRESS"> |
■URL等からフェーズ実行
HTML(JSP)ファイルをカスタマイズして、ハイパーリンクやJavaScriptでフェーズのURLを指定することにより、次のフェーズを実行することが可能です。
URLの記述形式は、以下のとおりです。(/OTXJSP/RUN以降)/OTXJSP/RUN?JSPPRO=プロジェクト名&JSPTR=トランザクション名&JSPPHASE=フェーズ名&JSPNAME=JSPファイル名&JSPCOUNT=<%= param.count %> |
JSPファイル名とは、当該HTML(JSP)ファイルを元にJSP開発ツールで作成するJSPファイルの名前です。命名規則は以下のようになります。
HTML(JSP)ファイル中にフォームが複数あり、2番目以降のフォームから実行する場合は、以下の後に":フェーズを実行するフォームの番号(記述順に1から数えた番号)"を追加してください。
| フェーズ名_フェーズ設定で出力先として指定したHTML(JSP)ファイル名.jsp |
JSP開発ツールで作成したJSPファイル中に、フォームごとに"JSPNAME"というNAME属性値のhidden属性のINPUTタグの記述が追加されます。JSPファイル名が、そのINPUTタグのVALUE属性値と同じ値になっていることを確認してください。
注意:JSPNAME、JSPCOUNTを指定しない場合、フェーズの遷移チェックが正しく行われないことがあります。
また、JSPNAMEを指定しない場合、サーバAPの入力パラメータに正しい値を設定できないことがあります。
下記はJavaScriptに記述する場合の例です。
2番目のフォームのボタンをクリックするとフェーズp2を実行し、新しいウィンドウにフェーズ実行結果を表示します。
<SCRIPT Language="JavaScript">
function open_window(){
alert('送信します')
window.open('/OTXJSP/RUN?JSPPRO=Proj1&JSPTR=Tran1&JSPPHASE=p2&JSPNAME=p1_p1.jsp:2&JSPCOUNT=<%= param.count %>','window2');
}
</SCRIPT>
<FORM >
<INPUT TYPE="text" NAME="Frm1_text_1" SIZE=20>
</FORM>
<FORM >
<INPUT TYPE="text" NAME="Frm2_text_1" SIZE=20>
<INPUT NAME="Frm2_button" TYPE="button"VALUE="送信button" onClick="open_window()">
</FORM>
|
■実行時にテーブルのセルの属性を変更
実行時にテーブルのセルの背景色などの属性を変更したい場合は、TABLEタグにNOTBLMAP属性(WebAP JSP固有の属性)を指定し、TDタグ中のOTXJSPKEYタグとサーバAPのパラメータをマッピングしてください。
TDタグの他、TRタグ、THタグ中に記述したOTXJSPKEYタグも同様にサーバAPのパラメータとマッピング可能です。
NOTBLMAP属性を指定したテーブルは、セル単位のマッピングのみ可能となり、TABLE全体マッピング、列単位マッピングはできません。
NOTBLMAP属性を指定したテーブル内に入れ子になっているテーブルがある場合は、内側のテーブルについても、セル単位のマッピングのみ可能となります。外側のテーブルにNOTBLMAP属性の指定があれば、入れ子になっている内側のテーブルにはNOTBLMAP属性を指定する必要はありません。
下記の記述例の場合は、「引数設定」ダイアログで TDタグ中のP1_Mを出力引数または戻り値にマッピングすることにより、実行時にセルの背景色を変更することができます。
<TABLE NOTBLMAP>
<TR>
<TD BGCOLOR="<OTXJSPKEY NAME=P1_M>"><INPUT TYPE="TEXT" NAME="P1" SIZE="20">
</TD>
</TR>
</TABLE>
|
注意:
HTML(JSP)ファイルを作成するときには、次の点に注意してください。
HTMLタグのNAME属性値に不適切な文字(以下の枠内参照)を使用した場合、HTMLタグの種類によって、以下の制限があります。
|
INPUTタグ、TEXTAREAタグ、SELECTタグの場合
不適切な文字を含むNAME属性値がある場合、JSP開発ツールでHTML(JSP)ファイルを読み込んで使用可能ですが、不適切な文字を含むHTMLタグはサーバAPの引数にマッピングできません。TABLEタグ、OTXJSPKEYタグの場合
不適切な文字を含むNAME属性値がある場合、JSP開発ツールでHTML(JSP)ファイルを読み込んで使用することはできません。以下に、NAME属性値の記述によるWebAP JSPでの扱い方の違いを示します。
| NAME属性値の記述例 | WebAP JSPでの扱い方 |
|---|---|
| < INPUT TYPE=”TEXT” NAME=”ABC”> | HTML(JSP)ファイル使用可能、マッピング可能 |
| < INPUT TYPE=”TEXT” NAME=”ABC<% =I %>”> | HTML(JSP)ファイル使用可能、マッピング不可 |
| <TABLE NAME=”ABC<% =I %>”> | HTML(JSP)ファイル使用不可 |
| < INPUT TYPE=”TEXT” NAME=”ABC<% =”I” %>”> | HTML(JSP)ファイル使用可能、マッピング可能、Webブラウザの表示不正 |
| 例: |
|
HTMLタグのname属性値中に"."は記述しないことを推奨します。
パラメータ名と自動マッピングを行う場合は、"."を"_"に替えてもマッピング可能です。
JavaScriptを使用している場合は、必ずHTMLタグのname属性値中の"."を"_"に替えてください。
バージョン2.122 以前の WebAP JSP 構文で HTML にカスタマイズを加えている場合は、最新版のWebAP JSP Developer でビルドメニューを利用する前に修正する必要があります。
詳細は、「WebOTX WebAP JSP 運用ガイド 互換性について」を参照してください。
MFDL移行した画面をカスタマイズする場合に注意する点については、「移行画面のカスタマイズの注意点」を参照してください。
JSP構文の終端(%>)以外では、HTMLの終端タグ(>)の直前に%を記述しないでください。
例えば、TABEL、TDタグ等のWIDTH属性値を%表記で指定する場合は、指定値をダブルクォーテーションで囲むなどして、HTMLの終端タグの直前が%にならないようにしてください。
| 例: |
|
| 5.2. フェーズJavaソースファイル |
■フェーズJavaソースの作成と格納場所
フェーズ処理を行うJavaソースファイルは、JSP開発ツールで自動的に作成します。作成したソースファイルは、以下の場所にあります。
JSP開発ディレクトリ/project/プロジェクト名/トランザクション名/sources/フェーズ名.java
JSP開発ツールからソース生成を行ったときにフェーズJavaソースファイルに上書きすると、カスタマイズした情報は削除されます。
カスタマイズした情報をフェーズJavaソースファイル更新後にも使用したい場合には、カスタマイズした内容を別ファイルに保存するなどの対応が必要です。
■カスタマイズ可能な範囲
フェーズJavaソースファイル中でカスタマイズが不可能な部分は以下のように
「// ------- fixed area start -------」
「// ------- fixed area end ------- 」
で区分けしています。
// ------- fixed area start -------
//出力データ管理オブジェクト作成
OTXJSPResultRel1 jspresult = preOTXJSPResult;
if(jspresult == null){
jspresult = new OTXJSPResultRel1();
}
// ------- fixed area end -------
|
この範囲に含まれていないソースについてカスタマイズを行ってください。範囲内に含まれるソースを修正する必要がある場合には、修正による影響を十分考慮のうえ行ってください。
■カスタマイズ可能なメソッド
作成後のJavaソースファイルを、入力データおよび出力データについてユーザが直接カスタマイズすることができます。カスタマイズできるのは、ソースファイル中の以下のメソッド内の特定の記述のみです。その他のソースコードは変更しないでください。
| メソッド名 | 説明 |
public WebOTXJSPBean execute( Object com, HttpServletRequest req, HttpServletResponse res, String host, OTXJSPResultRel1 preOTXJSPResult, PhaseExecInfo pInfo ) throws JServletException |
Webブラウザからの情報の取得、サーバAPのメソッドの実行、出力に使用するJSPファイルの指定などの処理を行います。 |
private void setInputParam_jspAgent_ カウンタ_メソッド名_出力JSPファイル名( APAgentのクラス名 jspAgent_メソッド名, HttpServletRequest req, String jspCode )throws JServletException |
executeメソッドから呼び出されて、Webブラウザから入力情報を取得し、APAgentのクラスインスタンスに設定する処理を行います。 当メソッドは、フェーズに設定されているメソッドと前画面の出力JSPファイルの組み合わせごとに存在します。 |
JSP開発ツール起動時のJavaVMのオプションで、-Dwebapjsp.phasestate=1を指定しているときは、executeメソッドの形式は以下のようになります。JavaVMのオプションについては、「WebAP JSP Developer 固有のJavaVMのオプション」を参照してください。
| メソッド名 | 説明 |
public WebOTXJSPBean execute( Object com, HttpServletRequest req, HttpServletResponse res, String host, OTXJSPResultRel1 preOTXJSPResult ) throws JServletException |
Webブラウザからの情報の取得、サーバAPのメソッドの実行、出力に使用するJSPファイルの指定などの処理を行います。 |
タイムアウトフェーズのカスタマイズについては、「カスタマイズ例3(タイムアウトフェーズのカスタマイズ)」を参照してください。
■カスタマイズ例1 (INPUTタグに表示されている文字列をメソッドの入力引数に設定)
WebAP JSPでは、サーバAPのメソッドの入力引数に値を設定する場合、APAgentクラスのメンバ変数に値を設定します。WebAP JSPでは自動生成したフェーズソースのexecuteメソッドでAPAgentクラスのインスタンスを生成しています。APAgentクラスのインスタンスはjspAgent_メソッド名の変数に設定しています。
INPUTタグのNAME属性値ADDRESSから取得した文字列をサーバAPのメソッドの入力引数(string型)に指定する場合の例を示します。
ADDRESSの値を JavaServlet API である getParameter メソッドにより取得し、入力引数に設定するには、APAgentクラスのメンバ変数に値を設定します。メンバ変数の名前はIDLで定義したメソッドのパラメータ名となります。以下のようにカスタマイズします。
| |
| (jspCode:通信管理から取得した文字コード種別) |
INPUTタグのNAME属性値VINTAGEから取得した文字列をサーバAPのメソッドの入力引数(long型)に指定する場合の例を示します。
jspAgent_メソッド名.入力引数名 = DataConv.changeStrToInt("VINTAGE",req.getParameter("VINTAGE")); |
入力引数に値を設定する処理をカスタマイズする場合は、以下のことに注意してください。
自動生成されたフェーズJavaソース内の入力引数に値を設定する処理を削除すると、不正な値が送信されたり、メソッドの実行に失敗する場合があります。
■カスタマイズ例2 (デバッグトレースを出力)
フェーズJavaソース中のデバッグトレースに情報を出力したい箇所で、以下のいずれかの形式でカスタマイズコードを追加してください。
Trace.println(Trace.TRACE_LEVEL_1,"デバッグメッセージ"); |
if(Trace.getLevel() >= Trace.TRACE_LEVEL_1){
Trace.println("デバッグメッセージ");
}
|
WebAP JSPでトレースを取得するように設定している場合、カスタマイズしたフェーズが実行されると、トレースログに「デバッグメッセージ」で指定した内容を出力します。
■カスタマイズ例3 (タイムアウトフェーズのカスタマイズ)
タイムアウトフェーズが実行される契機は、セッション解放契機と同じです。タイムアウト時だけでなく、別のトランザクションに切り替わる場合も、タイムアウトフェーズが実行されます。
タイムアウトフェーズ中で業務の終了処理を行いたいが、トランザクション切り替わり時には終了処理を行いたくないといった場合には、タイムアウトフェーズの実行契機を判断して処理を切り分けてください。
タイムアウトフェーズの実行契機は、executeメソッドのreqパラメータ、resパラメータの値により判断できます。詳細はexecuteメソッドを参照してください。
また、トランザクション切り変わり時に、次に実行するトランザクションを判断して特定の処理を行うようにカスタマイズすることもできます。
以下にカスタマイズの例を示します。
public WebOTXJSPBean execute(Object com, HttpServletRequest req, HttpServletResponse res, |
| 5.3. JSPファイル |
■JSPファイルの作成と格納場所
フェーズ処理を実行した結果を出力するJSPファイルは、JSP開発ツールで自動的に作成します。作成したJSPファイルは、以下の場所にあります。
JSP開発ディレクトリ/jsp/プロジェクト名/トランザクション名/*.jsp
JSP開発ツールからJSP生成を行ったときにJSPファイルに上書きすると、カスタマイズした情報は削除されます。
カスタマイズした情報をJSPファイル更新後にも使用したい場合には、カスタマイズした内容を別ファイルに保存するなどの対応が必要です。
■カスタマイズ可能な範囲
JSPファイル中でカスタマイズが不可能な部分は以下の行記述で囲んでいます。
<%--- WebOTX WebAP JSP script1 Rel1 ----%>
<%--- WebOTX WebAP JSP script2 Rel1 ----%>
<%--- WebOTX WebAP JSP script3 Rel1 ----%>
<%--- WebOTX WebAP JSP script1 Rel1 ----%> <%--- This JSP File can be used for JSP 1.0 ---%> <%@ page import="jp.co.nec.webapjsp.run.*" %> <%@ page import="jp.co.nec.webapjsp.common.util.*" %> <%@ page contentType="text/html; charset=Shift_JIS" %> <%--- WebOTX WebAP JSP script1 Rel1 ----%> |
この範囲に含まれていないソースについてカスタマイズを行ってください。範囲内に含まれるソースを修正する必要がある場合には、修正による影響を十分考慮のうえ行ってください。
自動生成したJSPファイル内で使用できるJSP1.0構文は以下の通りです。
| JSP構文 | 説明 |
|---|---|
| Hidden Comment | Documents the JSP page, but is not sent to the client. <%-- comment --%> |
| Expression | Contains an expression valid in the page scripting language. <%= expression %> |
| Scriptlet | Contains a code fragment valid in the page scripting language. <% code fragment %> |
| Include Directive | Includes a file of text or code in the JSP source file. <%@ include file="relativeURL"%> この構文の使い方は「カスタマイズ例3(JSP構文<%@ include %>を使う)」を参照してください。 |
| <jsp:include> | Includes data in a JSP page from another file, without parsing the data. <jsp: include page="{ relativeURL | <%= expression %> }" flush=" true" /> |
また以下のオブジェクトが自動生成したJSPファイル中から参照可能です。
| オブジェクト | 説明 |
|---|---|
| request | Subclass of javax.servlet.ServletRequest |
| response | Subclass of javax.servlet.ServletResponse |
| session | javax.servlet.http.HttpSession |
| out | java.io.PrintWriter |
| config | javax.servlet.ServletConfig |
■カスタマイズ例1 (サーバAPの実行結果をテキストとして出力)
WebAP JSPでは、サーバAPのメソッドの出力引数、戻り値を取り出す場合、APAgentクラスを使用します。
APAgentクラスは、OTXJSPResultRel1クラスの getAPAgentメソッドにより取得します。APAgentクラスを取得するコードについては、JSPファイルに自動生成しています。
以下に自動生成したコード例を示します。
| <% PrimProj.allString.classes.stub.prim_allString_APAgentSub jspAgent_allString = (PrimProj.allString.classes.stub.prim_allString_APAgentSub)param.getAPAgent("allString"); %> |
テキストとして表示したい箇所に、値を取得するコードを追記することにより、サーバAPの出力引数、戻り値を表示することができます。
出力引数を表示する場合、以下のようにコードを記述します。
| 文字列型 | <%= jspAgent_メソッド名.出力引数名 %> |
| 数値型 | <%= String.valueOf(jspAgent_メソッド名.出力引数名) %> |
戻り値を表示する場合以下のようにコードを記述します。
(サーバAPのメソッドが void型の場合は、このような記述はしないでください。)
| 文字列型 | <%= jspAgent_メソッド名.jsp_return %> |
| 数値型 | <%= String.valueOf(jspAgent_メソッド名.jsp_return) %> |
■カスタマイズ例2 (配列データをテーブル形式で出力時、データが存在する行まで出力)
次のIDL定義、HTMLの場合を想定して、説明します。
interface ARRAYTEST{
typedef string ARRAY_NAME[6];
typedef wstring ARRAY_ADDR[6];
string methodB(in ARRAY_NAME iNAME, in ARRAY_ADDR iADDR,
out ARRAY_NAME oNAME, out ARRAY_ADDR oADDR);
};
|
<table name="tblA" border="1" > <tr> <th>名前</th> <th>住所</th> </tr> </table> |
JSP開発ツールを使って自動生成したJSPのテーブル出力部分をカスタマイズして、「名前」列に出力するデータが空文字列のとき、以降の行を出力しないようにします。
<%-- --%>は、コメントです。
<TABLE NAME="tblA" border= "1">
<TR >
<TH>名前</TH>
<TH>住所</TH>
</TR>
<% { %>
<% int jsp_rowcount = 0; %>
<% for(int jsp_i = 0 ; ; jsp_i++){ %>
<% boolean jsp_flag = false; %>
<% String jsp_column1_value = "";
try{
jsp_column1_value = jspAgent_methodB.oName[jsp_i];
jsp_flag = true;
}catch(ArrayIndexOutOfBoundsException e){
}%>
<% String jsp_column2_value = "";
try{
jsp_column2_value = jspAgent_methodB.oADDR[jsp_i];
jsp_flag = true;
}catch(ArrayIndexOutOfBoundsException e){
}%>
<% if(jsp_flag == false){
break;
}%>
<TR >
<TD><%= jsp_column1_value %></TD>
<TD><%= jsp_column2_value %></TD>
</TR>
<% } %>
<INPUT NAME="tblA__jsp_maxcount" TYPE="HIDDEN" VALUE="<%= jsp_rowcount %>" >
<% } %>
</TABLE>
|
<TABLE NAME="tblA" border= "1">
<TR >
<TH>名前</TH>
<TH>住所</TH>
</TR>
<% { %>
<% int jsp_rowcount = 0; %>
<% for(int jsp_i = 0 ; ; jsp_i++){ %>
<% boolean jsp_flag = false; %>
<% String jsp_column1_value = "";
try{
jsp_column1_value = jspAgent_methodB.oName[jsp_i];
if(jsp_column1_value.length() == 0){
break;
}
jsp_flag = true;
}catch(ArrayIndexOutOfBoundsException e){
}%>
<% String jsp_column2_value = "";
try{
jsp_column2_value = jspAgent_methodB.oADDR[jsp_i];
jsp_flag = true;
}catch(ArrayIndexOutOfBoundsException e){
}%>
<% if(jsp_flag == false){
break;
}%>
<TR >
<TD><%= jsp_column1_value %></TD>
<TD><%= jsp_column2_value %></TD>
</TR>
<% } %>
<INPUT NAME="tblA__jsp_maxcount" TYPE="HIDDEN" VALUE="<%= jsp_rowcount %>" >
<% } %>
</TABLE>
|
■カスタマイズ例3 (JSP構文<%@ include %>を使う)
JSP構文<%@include file="ファイル名" %>でファイルをインクルードする場合は以下の点に注意してください。
| 「<%@include%>のルートディレクトリ」の設定 | ルートディレクトリ |
|---|---|
| あり | 指定のディレクトリ |
| なし | 「JSP作成」で自動生成したJSPファイルが存在するディレクトリ |
| <%@ include file="/jsp/test1.jsp"%> |
上記例の場合、インクルードするファイルは以下のようになります。
| 「<%@include%>のルートディレクトリ」の設定 | インクルードするファイル |
|---|---|
| C:\WebAPJSP\INCLUDE\ | C:\WebAPJSP\INCLUDE\jsp\test1.jsp |
| なし | JSP開発ディレクトリ\jsp\プロジェクト名\トランザクション名\jsp\test1.jsp |
| 5.4. エラー表示画面 |
■カスタマイズ例1 (エラー表示画面を変更)
フェーズ処理を実行中にエラーを検出した場合に表示されるエラー表示画面は、以下の場所にあります。
| WebAP JSP インストール ディレクトリ/jsp/jsp/runerr.jsp |
runerr.jspは、SJISコードで記述しています。
エラー表示画面を変更して別のファイル名で格納した場合は、「環境設定」ページの「エラー発生時に表示するJSP名」を変更してください。
エラー表示画面を変更した場合、デフォルトと同じファイル名(runerr.jsp)のままにしておくと、WebAP JSPのバージョンアップインストールで、デフォルトのエラー表示画面に上書きされます。
エラー表示画面用JSPファイルにおけるエラー情報の参照方法について説明します。
<エラー概要>
エラーコード、エラーメッセージ一覧については、「WebOTX WebAP JSP メッセージ編 実行環境」を参照してください。
int errNo = jservletException.getErrno();
int errcd = JServletError.getErrNo(errNo);
|
String errMsg = jservletException.getMsg();
|
<エラー詳細(CORBAシステム例外の場合)>
Exception e = jservletException.getException();
if(e instanceof org.omg.CORBA.SystemException){
org.omg.CORBA.SystemException e2 = (org.omg.CORBA.SystemException)e;
}
|
String minor = String.valueOf(e2.minor);
|
String emsg = e2.toString();
|
<エラー詳細(CORBAユーザ例外の場合)>
Exception e = jservletException.getException();
if(e instanceof org.omg.CORBA.UserException){
org.omg.CORBA.UserException e2 = (org.omg.CORBA.UserException)e;
}
|
String emsg = e2.toString();
|
<エラー詳細(WebOTX VIS Connectorから通知されたユーザ例外の場合)>
WebOTX VIS Connectorでエラー発生時、VCAConUserExceptionが通知されます。
ただし、サーバAPを作成したWebOTX Connector Developer(VISコネクタ)のバージョンが4.2以前の場合はVISConUserExceptionが通知されます。
VCAConUserExceptionはVISConUserExceptionの情報に加えて、エラーの詳細情報を取得することができます。以下に、どちらの例外が通知されても情報を取得できる方法を示します。
Exception e = jservletException.getException();
if(e instanceof jp.co.nec.webapjsp.run.common.VISConUserException){
jp.co.nec.webapjsp.run.common.VISConUserException __jsp_vexception =
(jp.co.nec.webapjsp.run.common.VISConUserException)e;
if(e instanceof jp.co.nec.webapjsp.run.common.VCAConUserException){
//VCAConUserExceptionの場合に行いたい処理を記述
}
}
|
if(__jsp_vexception instanceof jp.co.nec.webapjsp.run.common.VCAConUserException){
//VCAConUserExceptionの場合に詳細情報を取得
String detail = ((jp.co.nec.webapjsp.run.common.VCAConUserException)__jsp_vexception).errdetail;
}
int __jsp_viscon_langtype = __jsp_vexception.errinfo & 0x00ff; // WebOTX VIS Connectorの言語種別取得
if((__jsp_vexception.errinfo & 0x0100) != 0){ // WebOTX VIS Connectorのコネクト状態チェック
__jsp_viscon_is_connect = true;
}
errinfo = Integer.toHexString(__jsp_vexception.errinfo);
String [][]__jsp_msgdim = null;
String visconerrPath = WebOTXJSPBase.getInstPath() +
java.io.File.separator + "conf" +
java.io.File.separator + "data" +
java.io.File.separator + "visconerr.dat";
try{
setVisConErrMsg(visconerrPath); // WebOTX VIS ConnectorUserException定義ファイルを読み込む
if(__jsp_viscon_langtype == 0x00){ // WebOTX VIS Connector C++版
__jsp_msgdim = __jsp_VISConUserExceptionMsg_C;
}else if(__jsp_viscon_langtype == 0x01){ // WebOTX VIS Connector JAVA版
__jsp_msgdim = __jsp_VISConUserExceptionMsg_Java;
}
}catch(IOException e2){
}
if(__jsp_msgdim != null){
// エラーコードに対応するメッセージを取得する
int __vexception_errcode = (__jsp_vexception.errcode & (~0x10000000));
for(int i = 0; i < __jsp_msgdim.length ; i++){
String []__jsp_se = __jsp_msgdim[i];
try{
if(__vexception_errcode == (Integer.valueOf(__jsp_se[0],16)).intValue()){
minor = __jsp_se[0]; // 番号
cause = __jsp_se[1]; // 原因
explain = __jsp_se[2]; // 詳細
tackle = __jsp_se[3]; // 対処方法
break;
}
}catch(NumberFormatException e3){
}
}
}
|
補足
WebOTX Connector Developer(VISコネクタ)で生成したサーバAPをカスタマイズして、独自エラーコードのVCAConUserExceptionを通知するようにした場合には、 WebOTX VIS ConnectorのUserException定義ファイル(visconerr.dat)に対応するエラーメッセージを追加してください。
WebOTX VIS ConnectorがC++版の場合は、visconerr.datの「// C 」のコメント行の下に、 WebOTX VIS ConnectorがJAVA版の場合は、visconerr.datの「// Java 」のコメント行の下に、エラーコード、原因、エラー内容、対処方法を、「,」で区切って1行に記述してください。エラーコードは16進で記述してください。
WebOTX VIS ConnectorのUserException定義ファイルは、以下の場所にあります。
| WebAP JSP インストール ディレクトリ/conf/data/visconerr.dat |
visconerr.datは、SJISコードで記述しています。
| 5.5. MFDL移行画面のカスタマイズ |
MFDL移行した画面のカスタマイズは、自動生成したHTMLファイルをカスタマイズし、それを元にJSPファイルを作成する方法で行ってください。
HTMLファイルをカスタマイズする方法は、JSPファイルをカスタマイズする方法に比べて以下の点で便利です。
以下に、移行画面をカスタマイズするための手順を説明します。移行定義ファイルの作成方法については、「移行定義ファイルの作成方法」を参照してください。
HTMLを作成した後で、WebOTX Connector Developer(VISコネクタ)でMFDL定義ファイルから移行し直すなどしてコネクタ連携ファイルを変更した場合は、以下のことに注意してください。
WebOTX Connector Developer(VISコネクタ)で追加/更新したフィールドのカスタマイズ
WebOTX Connector Developer(VISコネクタ)で追加/更新したパラメータをJSPファイルに反映するには、HTMLファイル生成後、カスタマイズしたHTMLファイルをベースにJSPファイルを生成する必要があります。
HTMLファイルを生成すると、追加/更新したフィールド(NAME属性値にはパラメータ名が含まれています)が画面の一番下に作成されるので、HTMLファイルをカスタマイズして適当な位置に移動してください。
移行画面のカスタマイズを行う場合、以下の点に注意してください。
編集に使用するHTMLエディタによっては、MFDLから移行した画面と項目の位置が変わってしまう場合があるのでご注意ください。WebAP JSP開発部門では、FrontPage98でこの現象が発生することを確認しています。
<HEAD>、</HEAD>、<BODY>、</BODY>、<FORM>、</FORM>タグを削除しないでください。
<BODY>タグのonLoadイベントに処理を記述する場合には、必ず処理を ' で囲んでください。
例: onLoad='initFunc()'
以下の名前のINPUTタグのonClickイベントに処理を記述する場合には、必ず処理を ' で囲んでください。
| "exec"、"PF01"、"PF02"、"PF03"、"PF04"、"PF05"、"PF06"、 "PF07"、"PF08"、"PF09"、"PF10"、"PF11"、"PF12"、"PF13"、 "PF14"、"PF15"、"EK01"、"EK02"、"EK03" |
例: onClick='checkFunc()'
JSP構文を追加しないでください。
タグのNAME属性値やタグの種類を変更しないでください。
HTMLファイルをカスタマイズ時のその他の注意点については、「HTML作成の注意点」を参照してください。
■カスタマイズ例1 (テキストフィールドをラジオボタンに変更したい場合)
(1)以下のように自動生成したタグの変更を行いたい箇所を非表示にします。
例: <INPUT NAME="M_SYORI" TYPE="text" ・・・ style="display:none" >
(2)以下のラジオボタン(カスタマイズするタグ)を追加し、ラジオボタンのonClickで非表示にした<INPUT>に値を
設定するようにJavaScriptコードを記述してください。
例: <INPUT TYPE="radio" NAME="M_SYORIR" onClick='M_SYORI.value="0"'>0:問合せ
<INPUT TYPE="radio" NAME="M_SYORIR" onClick='M_SYORI.value="1"'>1:登録
<INPUT TYPE="radio" NAME="M_SYORIR" onClick='M_SYORI.value="2"'>2:修正
<INPUT TYPE="radio" NAME="M_SYORIR" onClick='M_SYORI.value="3"'>3:削除