iweb RPG による Web アプリケーション構築 サンプルプログラム(得意先照会) 1.@WEBツールを使用せずに作成 2.@WEBツールを使用して作成 3.@WEBツールのHTML作成補助 ツールを使用して作成 01 得意先照会の動き iwebRPGの簡単な処理の流れ WEBブラウザ HTTPサーバ プログラム キー画面表示処理PGM PGM01 ① HTML キー画面 標準出力処理 <FORM name="FORM1" method="GET" ・・・ ② 明細画面表示処理PGM PGM02 環境変数取得処理 ③ HTML 明細画面 標準出力処理 通常、キー画面・明細画面の表示という処理をRPGで作成する際、 1本のプログラムで全て処理されますが、WEBRPGの場合、 キー画面表示用プログラム・明細画面表示用プログラムと、 2本に分けなければなりません。 それはプログラムからWEB表示処理させるときに、HTTPサーバは 単独処理として処理が行われるので、次の処理を行う場合は 別プログラムを呼び出さなくてはならないのです。 よって、処理画面が増えるたびにプログラム本数も合わせて 増えることになります。 RPGプログラムからWEB画面表示させる場合は、『標準出力』 という特別な領域にデータを送る必要があります。これは、 IBM標準のサービスプログラムで処理を行うことが可能です。 WEB画面からRPGプログラムへデータを受け取る場合は、 『環境変数』と『標準入力』という2つの特別な領域から データを受け取ることになります。これも、 IBM標準のサービスプログラムで処理を行うことが可能です。 『環境変数』で受け取るか『標準入力』で受け取るかは、 HTML側の命令文で決まります。 『環境変数』は、get メソッドを指定します。 データはURLの後ろについてきます。 Ex. /cgi-bin/AP0020.PGM?TOKUCD=000001 通常、キーワードを送って結果を返すような処理の場合に使用されます。 『標準入力』は、postメソッドを指定します。 送信範囲のWEBのデータそのものが送られます。 通常、メッセージの書き込みや、新規データの登録などに使用されます。 今回は『環境変数』を使って処理を行います。 全ての処理がHTTPサーバを介して処理が行われる。 <FORM name="FORM1" method="GET" action="HTTP://WWW1.AXEL.NE.JP/CGI-BIN/AP0020.PGM"> この部分を“POST”にすると標準入力でデータを受け取ることが出来ます。 02 プログラム解説 03 1.@WEBツールを使用せずに プログラムを作成 04 処理の流れ このプログラムはブラウザから6桁の得意先コードを受け取り、AS400上の得意先マスタから得意先名・住所を取得し、 ブラウザに表示します。得意先マスタになかった場合は、エラー表示します。 得意先コードを入力し実行 ASCII EBCDIC AS400 IBM提供のサービスプログラム H T T P サ ー バ 入力結果 I n t e r f a c e ) ユーザー作成のプログラム (ILERPG) キー画面表示 ① ② 環境変数取得 標準出力 CALLB QtmhWrStout QtmhGetEnv 明細画面表示 ( C o m m o n G a t e w a y CGIプログラム ② 環境変数 CALLB QtmhGetEnv 標準入力 取得したコードで ③ 得意先マスタを読む QtmhRdStin CHAIN TOKUI2R 出力準備 ① 標準出力 ⑤ QtmhWrStout ④ 標準出力 CALLB QtmhWrStout 得意先マスタ TOKUI2 得意先コード 得意先名 得意先住所 05 @WEBツールを使用せずにCGIプログラムを作成(キー画面) キー画面 ************************************************************************** * データ構造(DS) ************************************************************************** D* コンパイル時配列 DHTM S 80 DIM(52) PERRCD(1) CTDATA D* 改行コード DNL C x'15' * APIの定義 * D* 標準出力API 'QtmhWrStout' 用 DOUT S 2048A INZ DOUTLN S 9B 0 INZ(2048) * * ユーザースペースエラーコード /COPY QSYSINC/QRPGLESRC,QUSEC ************************************************************************** * メイン ************************************************************************** * ◆HTML文作成◆ C DO 52 i 3 0 C EVAL OUT = %TRIM(OUT) + %TRIM(HTM(i)) + C %TRIM(NL) * ◆標準出力◆ C CALLB 'QtmhWrStout' C PARM OUT C PARM OUTLN C PARM QUSEC C CLEAR OUT C ENDDO * * ◆終了◆ C SETON LR C RETURN HTML文は、コンパイル時配列を使って記述します。 標準出力に書き出すデータの1行あたりの長さは、 120バイト以下、行の最後には EBCDIC の 改行文字を入れるという条件があります。 IBM提供のサービスプログラムを使用します。 QtmhWrStoutは標準出力するAPIです。 このプログラムを介してHTMLがWEB上に表示されます。 “OUT”パラメータには、配列にて記述されているHTML文を セットします。 “OUTLIN”パラメータは標準出力の実際の文字列の長さを定義し ます。ここでは2048バイトで設定しています。 “QUSEC”パラメータには /COPY にて QSYSINC/QRPGLESRC を 取り込んでください。 “OUT”パラメータにHTML文をセットしていきます。 “OUT”パラメータにデータをセットし、標準出力の APIをCALLBしてHTML文を書き出します。 コンパイル時配列は次頁 06 @WEBツールを使用せずにCGIプログラムを作成(キー画面の続き) コンパイル時配列の内容 ** CTDATA HTML *************************************************************80 CONTENT-TYPE: TEXT/HTML <HTML> <HEAD> <TITLE> 得意先照会 </TITLE> ここで“GET”と記述することで環境変数としてCGIプログラ ムにデータが渡されます。 </HEAD> <BODY bgcolor="lightGrey"> <FORM name="FORM1" method="GET" action="HTTP://WWW1.AXEL.NE.JP/CGI-BIN/AP0040.PGM"> <!------ タイトルの表示 --> <CENTER> <TABLE border="3"> <TR><TD bgcolor="navy"> <P align="center"><B><FONT size="4" color="White"> 得意先照会 </FONT></B></P> </TD></TR> </TABLE> </CENTER><BR><BR> <!------- ボディの表示 --> <CENTER> <TABLE border="0"> <TR> <TD><FONT size="2"> 得意先 </TD> <TD><INPUT type="TEXT" name="TOKUCD" maxlength="6"></TD> </TR> </TABLE> </CENTER><BR><BR> <CENTER> <TABLE border="0"> <TR><TD><INPUT type="SUBMIT" value=" 実行 </TABLE> </CENTER> ボタンを押した後のCGIプログラムを 指定します。 <FORM> ~ </FORM> の間にある <INPUT>タグで 指定したフィールドの変数値が渡されます。 ここでは、“TOKUCD”の値が渡されます。 (イメージ:TOKUCD=入力した値) "></TD></TR> </FORM> </BODY> </HTML> 07 @WEBツールを使用せずにCGIプログラムを作成(明細画面) 明細画面 3-1 * 得意先マスター FTOKUI2L01 IF E K DISK PREFIX(TK) ************************************************************************** * データ構造(DS) ************************************************************************** D* コンパイル時配列 DHTM S 80 DIM(46) PERRCD(1) CTDATA D* 改行コード DNL C x'15' * 外部プログラムの定義 * APIの定義 * * 環境変数API 'QtmhGetEnv' 用 DENBUFF S 2048A INZ DENBUFFLN S 9B 0 INZ(2048) DENACTLN S 9B 0 INZ DENVARNAME S 20A INZ('QUERY_STRING') DENVARLN S 9B 0 INZ(12) * 標準出力API 'QtmhWrStout' 用 DOUT S 2048A INZ DOUTLN S 9B 0 INZ(2048) * * ユーザースペースエラーコード /COPY QSYSINC/QRPGLESRC,QUSEC ************************************************************************** * メイン ************************************************************************** * ◆HTML文作成◆ C DO 22 i 3 0 C EVAL OUT = %TRIM(OUT) + %TRIM(HTM(i)) + C %TRIM(NL) C ENDDO * * ◆標準出力◆ C CALLB 'QtmhWrStout' C PARM OUT C PARM OUTLN C PARM QUSEC C CLEAR OUT * * ◆環境変数より入力情報取得◆ C CALLB 'QtmhGetEnv' C PARM ENBUFF C PARM ENBUFFLN C PARM ENACTLN C PARM ENVARNAME C PARM ENVARLN C PARM QUSEC HTML文は、コンパイル時配列を使って記述します。 標準出力に書き出すデータの1行あたりの長さは、 120バイト以下、行の最後には EBCDIC の 改行文字を入れるという条件があります。 IBM提供のサービスプログラムを使用します。 QtmhGetEnvは環境変数を取得するAPIです。 このプログラムにより、変数項目を取得します。 “ENBUFF“パラメータは、環境変数が保管されます。 “ENBUFFLN”パラメータは、上記パラメータの長さを指定します。 ここでは2048バイトで設定しています。 “ENACTLN”パラメータは環境変数の実際の文字列の長さが入ってきます。 “ENVARNAME”パラメータは、取得する環境変数の名前をセットします。 環境変数QUERY_STRINGを取得するので固定値でセットします。 “ENVARLN”パラメータは、上記環境変数の名前の長さをセットします。 長さは12桁なのでこれも固定でセットします。 “QUSEC”パラメータには /COPY にて QSYSINC/QRPGLESRC を 取り込んでください。 QtmhWrStoutは標準出力するAPIです。 このプログラムを介してHTMLがWEB上に表示されます。 “OUT”パラメータには、配列にて記述されているHTML文を 2048バイトまでセットします。 “OUTLIN”パラメータは標準出力の実際の文字列の長さを定義します。 ここでは2048バイトで設定しています。 “QUSEC”パラメータには /COPY にて QSYSINC/QRPGLESRC を 取り込んでください。 タイトル、見出しなどの共通表示部分を先に書き出しておきます。 環境変数取得のAPIにてデータを取得します。 08 @WEBツールを使用せずにCGIプログラムを作成(明細画面の続き) 明細画面 3-2 * * ◆データのデコード◆ * -----------------------------------------------------------* アスキーコードデータからEBCDICコードデータに変換する * -----------------------------------------------------------C MOVEL(P) ENBUFF QCHR C Z-ADD ENACTLN QLEN C MOVEL(P) '5035' CP C CALLB '#DECODE' C PARM QCHR 2048 C PARM QLEN 5 0 C PARM CP 4 C MOVEL(P) QCHR W_BUFF 2048 * * ◆変数の取得◆ * -----------------------------------------------------------* EBCDICコードデータとキーを渡し、変数を取得する * -----------------------------------------------------------* 得意先コード C MOVEL(P) W_BUFF ENBUFF C MOVEL(P) 'TOKUCD' KEY C CALLB '#EXT_KVAL' C PARM ENBUFF 2048 C PARM KEY 20 C MOVEL(P) ENBUFF W_TOKUCD 10 * * ◆得意先マスターより情報を取得◆ C W_TOKUCD CHAIN TOKUI2R 90 C IF *IN90 = *ON C EXSR #ERR C ELSE C EXSR #OK C ENDIF * * ◆標準出力◆ C CALLB 'QtmhWrStout' C PARM OUT C PARM OUTLN C PARM QUSEC * * ◆終了◆ C SETON LR C RETURN デコードプログラムにて(今回は@WEBツールを使用) アスキーコードからEBCDICコードに 変換をかけます。 変数取得プログラムにて(今回は@WEBツールを使用) 得意先コードを取得します。 取得した得意先コードより、得意先マスタを読み込み データセットの処理を行います。 標準出力APIにてWEBに書き出します。 09 @WEBツールを使用せずにCGIプログラムを作成(明細画面の続き) 明細明細画面 3-3 ************************************************************** * エラー用HTML文作成 ************************************************************** C #ERR BEGSR * * ◆HTML文作成◆ C 37 DO 46 i 3 0 C EVAL OUT = %TRIM(OUT) + %TRIM(HTM(i)) + C %TRIM(NL) C ENDDO * C ENDSR ************************************************************** * HTML文作成 ************************************************************** C #OK BEGSR * * ◆HTML文作成◆ C 23 DO 28 i 3 0 C EVAL OUT = %TRIM(OUT) + %TRIM(HTM(i)) + C %TRIM(NL) C ENDDO * 得意先名 C EVAL OUT = %TRIM(OUT) + %TRIM('<TD>') + C %TRIM(TKTOKNAM) + C %TRIM('</TD>') + %TRIM(NL) * 得意先住所 C EVAL OUT = %TRIM(OUT) + %TRIM('<TD>') + C %TRIM(TKTOKADR) + C %TRIM('</TD>') + %TRIM(NL) * C 29 DO 35 i 3 0 C EVAL OUT = %TRIM(OUT) + %TRIM(HTM(i)) + C %TRIM(NL) C ENDDO * C ENDSR 得意先マスターが読めなかった場合、 エラーメッセージを表示するHTML文を 作成します。 得意先マスターが読めた場合、 得意先名と住所を表示させるHTML文を 作成します。 コンパイル時配列は次頁 10 @WEBツールを使用せずにCGIプログラムを作成(明細画面の続き) コンパイル時配列の内容 ** CTDATA HTML *************************************************************** CONTENT-TYPE: TEXT/HTML <HTML> <HEAD> <TITLE> 得意先照会 </TITLE> </HEAD> <BODY bgcolor="lightGrey"> <!------ タイトルの表示 --> <CENTER> <TABLE border="3"> <TR><TD bgcolor="navy"> <P align="center"><B><FONT size="4" color="white"> 得意先照会 </FONT></B></P> </TD></TR> </TABLE> </CENTER><BR><BR> <!------- ボディの表示 --> <CENTER> <TABLE border="1" cellspacing="0"> <TR bgcolor="#6666FF"> <TD><P align="center"><B><FONT color="white"> 得 <TD><P align="center"><B><FONT color="white"> 住 </TR> <TR bgcolor="white"> ここに変数値が入る </TR> </TABLE> </CENTER> <!------- ボディの表示 -->の下にある<CENTER> まで同じ 文でいけるので、最初にここまでのHTML文を標準出力 させています。 意 先 </FONT></B></TD> 所 </FONT></B></TD> 通常得意先マスタが読み込めた場合は、矢印の部分 ( <TR bgcolor=“white”> と</TR> の間)に 得意先名と住所を表示するHTML文が入り、 </HTML>までの残りのHTML文を標準出力します。 </BODY> </HTML> ================= ここからはエラータグ ===================== 35 <HR SIZE="3" WIDTH="360"> <TABLE border="0"> <TR><TD><FONT size="3"> 入力された得意先がありません </TD></TR> </TABLE> <HR SIZE="3" WIDTH="360"> </CENTER> 通常得意先マスタが読み込めなかった場合は、 35配列より下の部分が置き換えられて標準出力されます。 </BODY> </HTML> 11 2.@WEBツールを使用して プログラムを作成 12 処理の流れ このプログラムはブラウザから6桁の得意先コードを受け取り、AS400上の得意先マスタから得意先名・住所を取得し、 ブラウザに表示します。得意先マスタになかった場合は、エラー表示します。 得意先コードを入力し実行 ASCII EBCDIC AS400 @WEBツール H T T P サ ー バ 入力結果 I n t e r f a c e ) ユーザー作成のプログラム (ILERPG) ユーザー作成の HTMLファイル キー画面表示 ① ② 環境変数取得 標準出力 CALLB #OUT_HTML #GET_FORM キー画面表示用 HTMLファイル 明細画面表示 ( C o m m o n G a t e w a y CGIプログラム ② 環境変数 #GET_FORM 標準入力 取得したコードで ③ 得意先マスタを読む #POST_FORM 明細表示用 HTMLファイル CHAIN TOKUI2R 出力準備 ① 標準出力 ⑤ #OUT_HTML ④ 標準出力 CALLB #OUT_HTML エラー表示用 HTMLファイル 得意先マスタ TOKUI2 得意先コード 得意先名 得意先住所 13 @WEBツール #GET_FORMと#OUT_HTML #GET_FORM WEBからのデータは、AS400HTTPサーバを介して環境変数という領域に入ってきます。 #GET_FORM は、環境変数( QUERY_STRING)から、入力項目ごとにデータを取得するプログラムです。 得意先コード:000001 HTTPサーバ提供の環境変数 QUERY_STRING ユーザープログラム SERVER_NAME TOKUCD=000001 フィールド名:TOKUCDをセット SERVER_NAME EVAL W_TOKUCD = GET_FORM(field:option) 000001 を取得 オプションはブランク QUERY_STRING は、フォームから入力された フィールド名及びフィールド値が入ってきます。 #OUT_HTML AS400からWEBへデータを出力する場合、標準出力という領域からAS400HTTPサーバを介してデータが出力されます。 #OUT_HTML は、AS400上のHTMLファイルを変数パラメータで置き換え、標準出力に出力するプログラムです。 ユーザープログラム EVAL #OUT_HTML DATA = 'TOKUNM=' + %TRIM(TKTOKNAM) + %TRIM('&') + 'ADR=' + %TRIM(TKTOKADR) + %TRIM('&') 明細 DATA パラメータ TOKUNM=(株)○○システム& ADR=名古屋市中村区名駅2-3-3& #OUT_HTMLのパラメータ CALLB PARM PARM PARM PARM '#OUT_HTML' 'CGILIB' 'QHTMSRC' @@PGMID LIB FIL MBR DATA 10 10 10 2000 HTMLファイル 変数値を反映 <TD>&&TOKUNM</TD> <TD>&&ADR</TD> 14 @WEBツールを使用してCGIプログラムを作成(キー画面) キー画面 プログラム:AP0010 ************************************************************************** * データ構造(DS) ************************************************************************** * プログラム状況データ構造 D SDS D @@PGMID 1 10 プログラムID * ************************************************************************** * メイン ************************************************************************** * ◆標準出力◆ C CALLB '#OUT_HTML' C PARM 'CGILIB' LIB 10 ライブラリ名 C PARM 'QHTMSRC' FIL 10 ファイル名 C PARM @@PGMID MBR 10 メンバー名 C PARM DATA 2000 変数 * * ◆終了◆ C SETON LR C RETURN システムより自分自身のメンバー名を取得します。 @WEBツール提供の標準出力プログラムを CALLBにて呼び出します。 “LIB”パラメータには、HTML文が書かれたソースが 入っているライブラリを指定します。 ここではCGILIBというライブラリを指定しています。 “FIL”パラメータは、HTML文が書かれたソースが 入っているファイル名を指定します。 ここではQHTMSRCというファイル名を指定しています。 “MBR”パラメータには、HTML文が書かれたメンバー名を 指定します。ここでは、CGIプログラムと同じ名前で 指定しています。 “DATA”パラメータはここでは使用しません。 変数データをセットする際に使用します。 15 @WEBツールを使用してCGIプログラムを作成(キー画面用HTMLソース) CGILIB/QHTMSRCにて作成された HTML文です。 HTMLソース(キー画面用) CONTENT-TYPE: TEXT/HTML このファイルは、 <HTML> <HEAD> <TITLE> 得意先照会 by @WEBRPG</TITLE> ライブラリ CGILIB ファイル QHTMSRC メンバー AP0010 </HEAD> <BODY bgcolor="lightGrey"> <FORM name="FORM1" method="GET" action="HTTP://WWW1.AXEL.NE.JP/CGI-BIN/AP0020.PGM"> <!------ タイトルの表示 --> <CENTER> <TABLE border="3"> <TR><TD bgcolor="navy"> <P align="center"><B><FONT size="4" color="White"> 得意先照会 </FONT></B></P> </TD></TR> </TABLE> </CENTER><BR><BR> <!------- ボディの表示 --> <CENTER> <TABLE border="0"> <TR> <TD><FONT size="2"> 得意先 </TD> <TD><INPUT type="TEXT" name="TOKUCD" maxlength="6"></TD> </TR> </TABLE> </CENTER><BR><BR> <CENTER> <TABLE border="0"> <TR><TD><INPUT type="SUBMIT" value=" 実行 </TABLE> </CENTER> </FORM> </BODY> "></TD></TR> として作成しています。 ボタンを押した後のCGIプログラムを指定します。 ここで“GET”と記述することで環境変数としてCGIプロ グラムにデータが渡されます。 <FORM> ~ </FORM> の間にある <INPUT>タグで 指定したフィールドの変数値が渡されます。 ここでは、“TOKUCD”の値が渡されます。 (イメージ:TOKUCD=入力した値) </HTML> 16 @WEBツールを使用してCGIプログラムを作成(明細画面) システムより自分自身のメンバー名を取得します。 明細画面 プログラム:AP0020 * 得意先マスター FTOKUI2L01 IF E K DISK PREFIX(TK) ************************************************************************** * データ構造(DS) ************************************************************************** * プログラム状況データ構造 D SDS D @@PGMID 1 10 * * @WEBツールの定義 * * 変数取得 (GET) D GET_FORM PR 2000 EXTPROC('GET_FORM') D 10 VALUE D 1 D field S 10 INZ D option S 1 INZ ************************************************************************** * メイン ************************************************************************** * ◆環境変数より入力情報取得◆ * 得意先 C CLEAR W_TOKUCD 10 C MOVEL(P) 'TOKUCD' field C EVAL W_TOKUCD = GET_FORM(field:option) * ◆得意先マスターより情報を取得◆ C W_TOKUCD CHAIN TOKUI2R 90 * データがなかったらエラー画面表示 C IF *IN90 = *ON C MOVEL(P) 'AP9999' @@PGMID * データがあれば変数を置き換えるパラメータをセット C ELSE C EVAL DATA = 'TOKUNM=' + %TRIM(TKTOKNAM) + C %TRIM('&') + C 'ADR=' + %TRIM(TKTOKADR) + C %TRIM('&') C ENDIF * ◆標準出力◆ C CALLB '#OUT_HTML' C PARM 'CGILIB' LIB 10 C PARM 'QHTMSRC' FIL 10 C PARM @@PGMID MBR 10 C PARM DATA 2000 * ◆終了◆ C SETON LR C RETURN @WEBツールを使用します。 GET_FORM は、環境変数を取得し、キーデータを 返すプログラムです。 プログラムID 2000バイトのパラメータは出力パラメータです。 変数値が返ってきます。 10バイトのパラメータは入力パラメータです。 取得したい変数の名前をセットします。 フィールド名 オプション 1バイトのパラメータは入力パラメータです。 返ってくる変数値のパターンをここで指定します。 今回は、ブランクをセットします。 ここで得意先コードを取得します。 Fieldに‘TOKUCD’とセットします。 Optionは今回はブランクです。 W_TOKUCDに変数値がセットされます。 @WEBツールの#OUT_HTMLのパラメータ “DATA”に左記のように変数をセットします 。 得意先名 住所 ライブラリ名 ファイル名 メンバー名 変数 データ上はこうなります。 TOKUNM=(株)○○システム&ADR=名古屋市中 村区名駅2-3-3& 変数の名前=変数& というルールです。 複数項目の場合は、& の後に続けてセット してください。 @WEBツールの#OUT_HTMLで標準出力させ ます。 17 @WEBツールを使用してCGIプログラムを作成(明細画面通常表示用HTMLファイル) HTMLソース(通常表示用) CONTENT-TYPE: TEXT/HTML このファイルは、 <HTML> <HEAD> <TITLE> 得意先照会 by @WEBRPG</TITLE> ライブラリ CGILIB ファイル QHTMSRC メンバー AP0020 </HEAD> として作成しています。 <BODY bgcolor="lightGrey"> <!------ タイトルの表示 --> <CENTER> <TABLE border="3"> <TR><TD bgcolor="navy"> <P align="center"><B><FONT size="4" color="white"> 得意先照会 </FONT></B></P> </TD></TR> </TABLE> </CENTER><BR><BR> <!------- ボディの表示 --> <CENTER> <TABLE border="1" cellspacing="0"> <TR bgcolor="#6666FF"> <TD><P align="center"><B><FONT color="white"> 得 意 先 </FONT></B></TD> <TD><P align="center"><B><FONT color="white"> 住 所 </FONT></B></TD> </TR> <TR bgcolor="white"> <!-- FLDREP START --> <TD>&&TOKUNM</TD> <TD>&&ADR</TD> <!-- FLDREP END --> </TR> </TABLE> </CENTER> 斜体の部分 &&TOKUNM と&&ADR が @WEBツールの#OUT_HTMLの “DATA” パラメータに セットし、置換処理が行われるフィールドです。 置換処理が行われる範囲は、 <!-- FLDREP START -->と<!-- FLDREP END --> の 間です。置換対象は &&変数名 で記述します。 例えば… &&TOKUNM は (株)○○システム &&ADR は 名古屋市中村区名駅2-3-3 実際は上記のように置き換わります。 <!-- FLDREP START -->と<!-- FLDREP END -->は WEBのHTML文には記述されません。 </BODY> </HTML> 18 @WEBツールを使用してCGIプログラムを作成(明細画面エラー表示用HTMLファイル) HTMLソース(エラー表示用) CONTENT-TYPE: TEXT/HTML 通常表示用とは別ファイルで作成しておきます。 <HTML> <HEAD> <TITLE> 得意先照会 by @WEBRPG</TITLE> このファイルは、 </HEAD> <BODY bgcolor="LightGrey"> <!------ タイトルの表示 --> <CENTER> <TABLE border="3"> <TR><TD bgcolor="Navy"> <P align="center"><B><FONT size="4" color="White"> 得意先照会 </FONT></B></P> </TD></TR> </TABLE> </CENTER><BR><BR><BR> ライブラリ CGILIB ファイル QHTMSRC メンバー AP9999 として作成しています。 <!------- ボディの表示 --> <CENTER> <HR SIZE="3" WIDTH="360"> <TABLE border="0"> <TR><TD><FONT size="3"> 入力された得意先がありません </TD></TR> </TABLE> <HR SIZE="3" WIDTH="360"> </CENTER> </BODY> </HTML> 19 両プログラムの比較 20 両プログラムを比較(プログラムソース) キー画面を表示するプログラムです。 @WEBツールを使用しない ************************************************************************** * データ構造(DS) ************************************************************************** D* コンパイル時配列 DHTM S 80 DIM(52) PERRCD(1) CTDATA D* 改行コード DNL C x'15' * APIの定義 * D* 標準出力API 'QtmhWrStout' 用 DOUT S 2048A INZ DOUTLN S 9B 0 INZ(2048) * * ユーザースペースエラーコード /COPY QSYSINC/QRPGLESRC,QUSEC ************************************************************************** * メイン ************************************************************************** * ◆HTML文作成◆ C DO 52 i 3 0 C EVAL OUT = %TRIM(OUT) + %TRIM(HTM(i)) + C %TRIM(NL) * ◆標準出力◆ C IF i = 25 OR C i = 52 C CALLB 'QtmhWrStout' C PARM OUT C PARM OUTLN C PARM QUSEC C CLEAR OUT C ENDIF C ENDDO * * ◆終了◆ C SETON LR C RETURN ** CTDATA HTML *************************************************************80 CONTENT-TYPE: TEXT/HTML @WEBツールを使用する ここで標準出力にて HTML文を書き出しています ************************************************************************** * データ構造(DS) ************************************************************************** * プログラム状況データ構造 D SDS D @@PGMID 1 10 プログラムID * ************************************************************************** * メイン ************************************************************************** * ◆標準出力◆ C CALLB '#OUT_HTML' C PARM 'CGILIB' LIB 10 ライブラリ名 C PARM 'QHTMSRC' FIL 10 ファイル名 C PARM @@PGMID MBR 10 メンバー名 C PARM DATA 2000 変数 * * ◆終了◆ C SETON LR C RETURN キー画面表示用 HTMLファイル <HTML> <HEAD> <TITLE> 得意先照会 </TITLE> HTML記述ファイルの場所を パラメータで指定するだけで HTML文を書き出してくれる。 メンテナンスは、HTML記述のファイルを 変更するだけでいい。 </HEAD> <BODY bgcolor="lightGrey"> <FORM name="FORM1" method="GET" action="HTTP://WWW1.AXEL.NE.JP/CGI-BIN/AP0040.PGM"> <!------ タイトルの表示 --> <CENTER> <TABLE border="3"> <TR><TD bgcolor="navy"> <P align="center"><B><FONT size="4" color="White"> 得意先照会 </FONT></B></P> </TD></TR> </TABLE> </CENTER><BR><BR> <!------- ボディの表示 --> <CENTER> <TABLE border="0"> <TR> <TD><FONT size="2"> 得意先 </TD> <TD><INPUT type="TEXT" name="TOKUCD" maxlength="6"></TD> </TR> </TABLE> </CENTER><BR><BR> プログラムソース上でHTML文を記述するので 変更するごとにリコンパイルしなければならない。 <CENTER> <TABLE border="0"> <TR><TD><INPUT type="SUBMIT" value=" 実行 "></TD></TR> </TABLE> </CENTER> </FORM> </BODY> </HTML> 21 両プログラムを比較(プログラムソース) 明細画面を表示するプログラムです。 @WEBツールを使用しない * 得意先マスター FTOKUI2L01 IF E K DISK PREFIX(TK) ************************************************************************** * データ構造(DS) ************************************************************************** D* コンパイル時配列 DHTM S 80 DIM(46) PERRCD(1) CTDATA D* 改行コード DNL C x'15' * 外部プログラムの定義 * APIの定義 * * 環境変数API 'QtmhGetEnv' 用 DENBUFF S 2048A INZ DENBUFFLN S 9B 0 INZ(2048) DENACTLN S 9B 0 INZ DENVARNAME S 20A INZ('QUERY_STRING') DENVARLN S 9B 0 INZ(12) * 標準出力API 'QtmhWrStout' 用 DOUT S 2048A INZ DOUTLN S 9B 0 INZ(2048) * * ユーザースペースエラーコード /COPY QSYSINC/QRPGLESRC,QUSEC ************************************************************************** * メイン ************************************************************************** * ◆HTML文作成◆ C DO 22 i 3 0 C EVAL OUT = %TRIM(OUT) + %TRIM(HTM(i)) + C %TRIM(NL) C ENDDO * * ◆標準出力◆ C CALLB 'QtmhWrStout' C PARM OUT C PARM OUTLN C PARM QUSEC C CLEAR OUT * * ◆環境変数より入力情報取得◆ C CALLB 'QtmhGetEnv' C PARM ENBUFF C PARM ENBUFFLN C PARM ENACTLN C PARM ENVARNAME C PARM ENVARLN C PARM QUSEC * * ◆データのデコード◆ * -----------------------------------------------------------* アスキーコードデータからEBCDICコードデータに変換する * -----------------------------------------------------------C MOVEL(P) ENBUFF QCHR C Z-ADD ENACTLN QLEN C MOVEL(P) '5035' CP C CALLB '#DECODE' C PARM QCHR 2048 C PARM QLEN 5 0 C PARM CP 4 C MOVEL(P) QCHR W_BUFF 2048 * * ◆変数の取得◆ * -----------------------------------------------------------* EBCDICコードデータとキーを渡し、変数を取得する * -----------------------------------------------------------* 得意先コード C MOVEL(P) W_BUFF ENBUFF C MOVEL(P) 'TOKUCD' KEY C CALLB '#EXT_KVAL' C PARM ENBUFF 2048 C PARM KEY 20 C MOVEL(P) ENBUFF W_TOKUCD 10 * @WEBツールを使用する ここで環境変数にて データを取得しています ここで標準出力にて HTML文を書き出しています 変数項目は、DATAパラメータ にセット デコード処理やデータ抜き出し処理の プログラムを別途作成しなくてはならない。 * 得意先マスター FTOKUI2L01 IF E K DISK PREFIX(TK) ************************************************************************** * データ構造(DS) ************************************************************************** * プログラム状況データ構造 D SDS D @@PGMID 1 10 * * @WEBツールの定義 * * 変数取得 (GET) D GET_FORM PR 2000 EXTPROC('GET_FORM') D 10 VALUE D 1 D field S 10 INZ D option S 1 INZ ************************************************************************** * メイン ************************************************************************** * ◆環境変数より入力情報取得◆ * 得意先 C CLEAR W_TOKUCD 10 C MOVEL(P) 'TOKUCD' field C EVAL W_TOKUCD = GET_FORM(field:option) * ◆得意先マスターより情報を取得◆ C W_TOKUCD CHAIN TOKUI2R 90 * データがなかったらエラー画面表示 C IF *IN90 = *ON C MOVEL(P) 'AP9999' @@PGMID * データがあれば変数を置き換えるパラメータをセット C ELSE C EVAL DATA = 'TOKUNM=' + %TRIM(TKTOKNAM) + C %TRIM('&') + C 'ADR=' + %TRIM(TKTOKADR) + C %TRIM('&') C ENDIF * ◆標準出力◆ C CALLB '#OUT_HTML' C PARM 'CGILIB' LIB 10 C PARM 'QHTMSRC' FIL 10 C PARM @@PGMID MBR 10 C PARM DATA 2000 * ◆終了◆ C SETON LR C RETURN プログラムID フィールド名 オプション 得意先名 住所 ライブラリ名 ファイル名 メンバー名 変数 明細画面表示用 HTMLファイル エラー画面表示用 HTMLファイル 画面ごとでHTMLファイルを作成すればよいので メンテナンスや管理が楽。 22 両プログラムを比較(プログラムソース) 明細画面を表示するプログラムです。 @WEBツールを使用しない * ◆得意先マスターより情報を取得◆ C W_TOKUCD CHAIN TOKUI2R 90 C IF *IN90 = *ON C EXSR #ERR C ELSE C EXSR #OK C ENDIF * * ◆標準出力◆ C CALLB 'QtmhWrStout' C PARM OUT C PARM OUTLN C PARM QUSEC * * ◆終了◆ C SETON LR C RETURN ************************************************************** * エラー用HTML文作成 ************************************************************** C #ERR BEGSR * * ◆HTML文作成◆ C 37 DO 46 i 3 0 C EVAL OUT = %TRIM(OUT) + %TRIM(HTM(i)) + C %TRIM(NL) C ENDDO C ENDSR ************************************************************** * HTML文作成 ************************************************************** C #OK BEGSR * * ◆HTML文作成◆ C 23 DO 28 i 3 0 C EVAL OUT = %TRIM(OUT) + %TRIM(HTM(i)) + C %TRIM(NL) C ENDDO * 得意先名 C EVAL OUT = %TRIM(OUT) + %TRIM('<TD>') + C %TRIM(TKTOKNAM) + C %TRIM('</TD>') + %TRIM(NL) * 得意先住所 C EVAL OUT = %TRIM(OUT) + %TRIM('<TD>') + C %TRIM(TKTOKADR) + C %TRIM('</TD>') + %TRIM(NL) * C 29 DO 35 i 3 0 C EVAL OUT = %TRIM(OUT) + %TRIM(HTM(i)) + C %TRIM(NL) C ENDDO C ENDSR ** CTDATA HTML *************************************************************** CONTENT-TYPE: TEXT/HTML ここで標準出力にて HTML文を書き出しています 変数表示用のHTML文を 記述しなければならない。 <HTML> <HEAD> <TITLE> 得意先照会 </TITLE> </HEAD> <BODY bgcolor="lightGrey"> ~長くなるので省略します~ </BODY> </HTML> ================= ここからはエラータグ ===================== 35 <HR SIZE="3" WIDTH="360"> <TABLE border="0"> <TR><TD><FONT size="3"> 入力された得意先がありません </TD></TR> </TABLE> <HR SIZE="3" WIDTH="360"> </CENTER> </BODY> </HTML> 23 3.HTML作成補助ツールを使用して プログラムを作成 24 処理の流れ 用意するもの 1)HTMLファイル 2)変数をセットするプログラム 以上。 補助ツールを使用することで、簡単なWEBの画面処理が可能になります。 ASCII EBCDIC URLを入力 H T T P サ ー バ ③ ④ 入力結果 ⑨ 受け取ったキーで、得意先 マスターを読み込み、 変数項目をセット CHAIN TOKUI2R ⑥ EVAL=TOKUNM+・・・ QHTMDRV G a t e w a y I n t e r f a c e ) ユーザー作成プログラム CGILIB 環境変数、標準出力、 次プログラムへのデータの 受け渡し ( C o m m o n 環境変数や標準出力 といったWEBの知識が いらないので簡単にコー ディングできます。 CGIプログラム HTML作成補助ツール @WEB ① 得意先コードを入力し実行 AS400 ⑤ ⑦ ② パラメータセット 得意先マスタ TOKUI2 得意先コード 得意先名 得意先住所 ⑧ CGILIB キー画面表示用 HTMLファイル 簡単なルールに従って HTMLファイルを作成するだけ。 明細表示用 HTMLファイル 25 HTML作成補助ツールを使用してCGIプログラムを作成(URL入力) URLを入力しキー画面を出力させる HTML作成補助ツールのプログラムIDの後に、?を追加します。 それ以降は、パラメータとして認識されます。 PGMID=HTMLファイル名 と入力します。 今回は、AP0050というファイル名で入力しています。 http://www1.axel.ne.jp/@WEB/QHTMDRV.PGM?PGMID=AP0050 HTML作成補助ツール名 キー画面出力HTMLファイル名 26 HTML作成補助ツールを使用してCGIプログラムを作成(キー画面表示用HTMLファイル) HTMLソース(キー画面表示用) CONTENT-TYPE: TEXT/HTML このファイルは、 <HTML> <HEAD> <TITLE> 得意先照会 by @WEBRPG (ドライバ使用) </TITLE> ライブラリ CGILIB ファイル QHTMSRC メンバー AP0050 </HEAD> として作成しています。 <BODY bgcolor="lightGrey"> <FORM name="FORM1" method="GET" action="HTTP://WWW1.AXEL.NE.JP/@WEB/QHTMDRV.PGM"> <!------ ユーザープログラム名称 --> <input type="hidden" name="PGMID" value="AP0070"> <!------ タイトルの表示 --> <CENTER> <TABLE border="3"> <TR><TD bgcolor="navy"> <P align="center"><B><FONT size="4" color="White"> 得意先照会 </FONT></B></P> </TD></TR> </TABLE> </CENTER><BR><BR> <!------- ボディの表示 --> <CENTER> <TABLE border="0"> <TR> <TD><FONT size="2"> 得意先 </TD> <TD><INPUT type="TEXT" name="KEY" maxlength="6"></TD> </TR> </TABLE> </CENTER><BR><BR> <CENTER> <TABLE border="0"> <TR><TD><INPUT type="SUBMIT" value=" 実行 </TABLE> </CENTER> HTML作成補助ツールのプログラムを指定します。 変数項目セットプログラムを指定します。 明細表示HTMLファイル名はこの名前と同じにしてください。 この部分が、HTML作成補助ツールのプログラムに渡ります。 "></TD></TR> </FORM> </BODY> </HTML> 27 HTML作成補助ツールを使用してCGIプログラムを作成(変数セットプログラム) 変数項目セットプログラム:AP0070 * 得意先マスター FTOKUI2L01 IF E K DISK PREFIX(TK) ************************************************************************** * パラメータ ************************************************************************** C *ENTRY PLIST C PARM P_KEY 1000 C PARM P_RTDATA 2000 ************************************************************************** * メイン ************************************************************************** C MOVEL(P) 'AP0020' W_PGMID 10 * ◆キー取得◆ C CALL ‘QEXTKEY' C PARM LRKB 1 C PARM P_KEY KEY 1000 C PARM RTDATA 1000 C MOVEL(P) RTDATA W_TOKUCD 10 * * ◆得意先マスターより情報を取得◆ C W_TOKUCD CHAIN TOKUI2R 90 C IF *IN90 = *ON C MOVEL(P) *BLANK TKTOKNAM C MOVEL(P) *BLANK TKTOKADR C ENDIF * ◆変数を置き換えるパラメータをセット◆ C EVAL P_RTDATA = 'TOKUNM=' + %TRIM(TKTOKNAM) + C %TRIM('&') + C 'ADR=' + %TRIM(TKTOKADR) + C %TRIM('&') * * ◆終了◆ C SETON LR C RETURN HTML作成補助ツールからパラメータが渡ってきます。 キー群 返し変数 終了区分 キー群 返し変数 キー群パラメータは、1つもしくは複数のキーの値が入っています 。今回は、得意先コードのみが入っています。 返し変数パラメータは、HTML作成補助ツールに渡す パラメータです。変数項目を渡します。 ここで、キー取得のプログラムを使用して1つづつキーの 値を取得します。今回は得意先コードのみなので 一回しか呼び出していません。 終了区分パラメータは、データの終了時に ‘E’がセットされます。 通常はブランクをセットします。 キー群パラメータはHTML作成補助ツールから取得した キー群データを最初にセットしておきます。2回目以降は、 セットしません。 返し変数パラメータは、取得したキーデータがセットされます。 得意先名 住所 変数値をセットしていきます。セット方法は@WEBツールの #OUT_HTML(標準出力)プログラムの DATA パラメータの セット方法と同じです。 28 HTML作成補助ツールを使用してCGIプログラムを作成(明細画面表示用HTMLファイル) HTMLソース(明細画面表示用) CONTENT-TYPE: TEXT/HTML このファイルは、 <HTML> <HEAD> <TITLE> 得意先照会 by @WEBRPG (ドライバ使用) </TITLE> ライブラリ CGILIB ファイル QHTMSRC メンバー AP0070 </HEAD> として作成しています。 <BODY bgcolor="lightGrey"> <!------ タイトルの表示 --> <CENTER> <TABLE border="3"> <TR><TD bgcolor="navy"> <P align="center"><B><FONT size="4" color="white"> 得意先照会 </FONT></B></P> </TD></TR> </TABLE> </CENTER><BR><BR> <!------- ボディの表示 --> <CENTER> <TABLE border="1" cellspacing="0"> <TR bgcolor="#6666FF"> <TD><P align="center"><B><FONT color="white"> 得 意 先 </FONT></B></TD> <TD><P align="center"><B><FONT color="white"> 住 所 </FONT></B></TD> </TR> <TR bgcolor="white"> <!-- FLDREP START --> <TD>&&TOKUNM</TD> <TD>&&ADR</TD> <!-- FLDREP END --> </TR> </TABLE> </CENTER> </BODY> </HTML> 29
© Copyright 2024 ExpyDoc