iweb RPG による Web アプリケーション構築 サンプルプログラム(得意先照会) 1.@WEBツールを使用せずに作成 2.@WEBツールを使用して作成 3.@WEBツールのHTML作成補助 ツールを使用して作成 01
得意先照会の動き
全ての処理がHTTPサーバを介して処理が行われる。 iwebRPGの簡単な処理の流れ 通常、キー画面・明細画面の表示という処理をRPGで作成する際、 1本のプログラムで全て処理されますが、WEBRPGの場合、 キー画面表示用プログラム・明細画面表示用プログラムと、 2本に分けなければなりません。 それはプログラムからWEB表示処理させるときに、HTTPサーバは 単独処理として処理が行われるので、次の処理を行う場合は 別プログラムを呼び出さなくてはならないのです。 よって、処理画面が増えるたびにプログラム本数も合わせて 増えることになります。 RPGプログラムからWEB画面表示させる場合は、『標準出力』 という特別な領域にデータを送る必要があります。これは、 IBM標準のサービスプログラムで処理を行うことが可能です。 WEB画面からRPGプログラムへデータを受け取る場合は、 『環境変数』と『標準入力』という2つの特別な領域から データを受け取ることになります。これも、 『環境変数』で受け取るか『標準入力』で受け取るかは、 HTML側の命令文で決まります。 『環境変数』は、get メソッドを指定します。 データはURLの後ろについてきます。 Ex. /cgi-bin/AP0020.PGM?TOKUCD=000001 通常、キーワードを送って結果を返すような処理の場合に使用されます。 『標準入力』は、postメソッドを指定します。 送信範囲のWEBのデータそのものが送られます。 通常、メッセージの書き込みや、新規データの登録などに使用されます。 今回は『環境変数』を使って処理を行います。 WEBブラウザ HTTPサーバ プログラム キー画面表示処理PGM HTML キー画面 PGM01 標準出力処理 ① <FORM name="FORM1" method="GET" ・・・ ② 明細画面表示処理PGM HTML 明細画面 PGM02 環境変数取得処理 ③ 標準出力処理 全ての処理が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 CGIプログラム ユーザー作成のプログラム (ILERPG) IBM提供のサービスプログラム キー画面表示 HTTPサーバ (Common Gateway Interface) ① 標準出力 環境変数取得 CALLB QtmhWrStout ② QtmhGetEnv 明細画面表示 ② 環境変数 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> </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> <!------- ボディの表示 --> <TABLE border="0"> <TR> <TD><FONT size="2"> 得意先 </TD> <TD><INPUT type="TEXT" name="TOKUCD" maxlength="6"></TD> </TR> <TR><TD><INPUT type="SUBMIT" value=" 実行 "></TD></TR> </CENTER> </FORM> </BODY> </HTML> ここで“GET”と記述することで環境変数としてCGIプログラムにデータが渡されます。 ボタンを押した後のCGIプログラムを 指定します。 <FORM> ~ </FORM> の間にある <INPUT>タグで 指定したフィールドの変数値が渡されます。 ここでは、“TOKUCD”の値が渡されます。 (イメージ:TOKUCD=入力した値) 07
@WEBツールを使用せずにCGIプログラムを作成(明細画面) HTML文は、コンパイル時配列を使って記述します。 標準出力に書き出すデータの1行あたりの長さは、 120バイト以下、行の最後には EBCDIC の 改行文字を入れるという条件があります。 明細画面 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 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バイトで設定しています。 タイトル、見出しなどの共通表示部分を先に書き出しておきます。 環境変数取得の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 C 23 DO 28 i 3 0 * 得意先名 C EVAL OUT = %TRIM(OUT) + %TRIM('<TD>') + C %TRIM(TKTOKNAM) + C %TRIM('</TD>') + %TRIM(NL) * 得意先住所 C %TRIM(TKTOKADR) + C 29 DO 35 i 3 0 得意先マスターが読めなかった場合、 エラーメッセージを表示する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> <!------- ボディの表示 --> <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"> </CENTER> </BODY> </HTML> ================= ここからはエラータグ ===================== 35 <HR SIZE="3" WIDTH="360"> <TABLE border="0"> <TR><TD><FONT size="3"> 入力された得意先がありません </TD></TR> <!------- ボディの表示 -->の下にある<CENTER> まで同じ 文でいけるので、最初にここまでのHTML文を標準出力 させています。 通常得意先マスタが読み込めた場合は、矢印の部分 ( <TR bgcolor=“white”> と</TR> の間)に 得意先名と住所を表示するHTML文が入り、 </HTML>までの残りのHTML文を標準出力します。 ここに変数値が入る 通常得意先マスタが読み込めなかった場合は、 35配列より下の部分が置き換えられて標準出力されます。 11
2.@WEBツールを使用して プログラムを作成 12
処理の流れ このプログラムはブラウザから6桁の得意先コードを受け取り、AS400上の得意先マスタから得意先名・住所を取得し、 ブラウザに表示します。得意先マスタになかった場合は、エラー表示します。 ASCII EBCDIC 得意先コードを入力し実行 AS400 CGIプログラム ユーザー作成のプログラム (ILERPG) ユーザー作成の HTMLファイル @WEBツール キー画面表示 HTTPサーバ (Common Gateway Interface) キー画面表示用 HTMLファイル ① 標準出力 環境変数取得 CALLB #OUT_HTML ② #GET_FORM 明細画面表示 ② 環境変数 #GET_FORM 明細表示用 HTMLファイル 標準入力 取得したコードで 得意先マスタを読む 入力結果 ③ #POST_FORM CHAIN TOKUI2R 出力準備 ① エラー表示用 HTMLファイル 標準出力 標準出力 ⑤ ④ #OUT_HTML CALLB #OUT_HTML 得意先マスタ TOKUI2 得意先コード 得意先名 得意先住所 13
@WEBツール #GET_FORMと#OUT_HTML 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ファイルを変数パラメータで置き換え、標準出力に出力するプログラムです。 ユーザープログラム #OUT_HTML 明細 DATA パラメータ TOKUNM=(株)○○システム& ADR=名古屋市中村区名駅2-3-3& EVAL DATA = 'TOKUNM=' + %TRIM(TKTOKNAM) + %TRIM('&') + 'ADR=' + %TRIM(TKTOKADR) + %TRIM('&') #OUT_HTMLのパラメータ HTMLファイル CALLB '#OUT_HTML' PARM 'CGILIB' LIB 10 PARM 'QHTMSRC' FIL 10 PARM @@PGMID MBR 10 PARM DATA 2000 変数値を反映 <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> </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> <!------- ボディの表示 --> <TABLE border="0"> <TR> <TD><FONT size="2"> 得意先 </TD> <TD><INPUT type="TEXT" name="TOKUCD" maxlength="6"></TD> </TR> <TR><TD><INPUT type="SUBMIT" value=" 実行 "></TD></TR> </CENTER> </FORM> </BODY> </HTML> このファイルは、 ライブラリ CGILIB ファイル QHTMSRC メンバー AP0010 として作成しています。 ボタンを押した後のCGIプログラムを指定します。 ここで“GET”と記述することで環境変数としてCGIプログラムにデータが渡されます。 <FORM> ~ </FORM> の間にある <INPUT>タグで 指定したフィールドの変数値が渡されます。 ここでは、“TOKUCD”の値が渡されます。 (イメージ:TOKUCD=入力した値) 16
@WEBツールを使用してCGIプログラムを作成(明細画面) システムより自分自身のメンバー名を取得します。 明細画面 プログラム:AP0020 * 得意先マスター FTOKUI2L01 IF E K DISK PREFIX(TK) ************************************************************************** * データ構造(DS) * プログラム状況データ構造 D SDS D @@PGMID 1 10 プログラムID * * @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 は、環境変数を取得し、キーデータを 返すプログラムです。 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> </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> <!------- ボディの表示 --> <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 --> </CENTER> </BODY> </HTML> このファイルは、 ライブラリ CGILIB ファイル QHTMSRC メンバー AP0020 として作成しています。 斜体の部分 &&TOKUNM と&&ADR が @WEBツールの#OUT_HTMLの “DATA” パラメータに セットし、置換処理が行われるフィールドです。 置換処理が行われる範囲は、 <!-- FLDREP START -->と<!-- FLDREP END --> の 間です。置換対象は &&変数名 で記述します。 例えば… &&TOKUNM は (株)○○システム &&ADR は 名古屋市中村区名駅2-3-3 実際は上記のように置き換わります。 <!-- FLDREP START -->と<!-- FLDREP END -->は WEBの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> <!------- ボディの表示 --> <HR SIZE="3" WIDTH="360"> <TABLE border="0"> <TR><TD><FONT size="3"> 入力された得意先がありません </TD></TR> </CENTER> </BODY> </HTML> 通常表示用とは別ファイルで作成しておきます。 このファイルは、 ライブラリ CGILIB ファイル QHTMSRC メンバー AP9999 として作成しています。 19
両プログラムの比較 20
両プログラムを比較(プログラムソース) キー画面を表示するプログラムです。 ここで標準出力にて HTML文を書き出しています キー画面表示用 @WEBツールを使用しない @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 <HTML> <HEAD> <TITLE> 得意先照会 </TITLE> </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> <!------- ボディの表示 --> <TABLE border="0"> <TR> <TD><FONT size="2"> 得意先 </TD> <TD><INPUT type="TEXT" name="TOKUCD" maxlength="6"></TD> </TR> <TR><TD><INPUT type="SUBMIT" value=" 実行 "></TD></TR> </CENTER> </FORM> </BODY> </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ファイル HTML記述ファイルの場所を パラメータで指定するだけで HTML文を書き出してくれる。 メンテナンスは、HTML記述のファイルを 変更するだけでいい。 プログラムソース上でHTML文を記述するので 変更するごとにリコンパイルしなければならない。 21
両プログラムを比較(プログラムソース) 明細画面を表示するプログラムです。 ここで環境変数にて データを取得しています ここで標準出力にて @WEBツールを使用しない @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 * ◆データのデコード◆ * ------------------------------------------------------------ * アスキーコードデータから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 * 得意先マスター FTOKUI2L01 IF E K DISK PREFIX(TK) ************************************************************************** * データ構造(DS) * プログラム状況データ構造 D SDS D @@PGMID 1 10 プログラムID * * @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 ここで環境変数にて データを取得しています ここで標準出力にて HTML文を書き出しています 変数項目は、DATAパラメータ にセット 明細画面表示用 HTMLファイル デコード処理やデータ抜き出し処理の プログラムを別途作成しなくてはならない。 エラー画面表示用 HTMLファイル 画面ごとでHTMLファイルを作成すればよいので メンテナンスや管理が楽。 22
両プログラムを比較(プログラムソース) 明細画面を表示するプログラムです。 ここで標準出力にて HTML文を書き出しています @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 C 23 DO 28 i 3 0 * 得意先名 C EVAL OUT = %TRIM(OUT) + %TRIM('<TD>') + C %TRIM(TKTOKNAM) + C %TRIM('</TD>') + %TRIM(NL) * 得意先住所 C %TRIM(TKTOKADR) + C 29 DO 35 i 3 0 ** CTDATA HTML *************************************************************** CONTENT-TYPE: TEXT/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> </CENTER> ここで標準出力にて HTML文を書き出しています 変数表示用のHTML文を 記述しなければならない。 23
3.HTML作成補助ツールを使用して プログラムを作成 24
補助ツールを使用することで、簡単なWEBの画面処理が可能になります。 処理の流れ 用意するもの 1)HTMLファイル 2)変数をセットするプログラム 以上。 補助ツールを使用することで、簡単なWEBの画面処理が可能になります。 ASCII EBCDIC 環境変数や標準出力 といったWEBの知識がいらないので簡単にコーディングできます。 AS400 CGIプログラム URLを入力 HTML作成補助ツール @WEB ユーザー作成プログラム CGILIB ① HTTPサーバ (Common Gateway Interface) 環境変数、標準出力、 次プログラムへのデータの 受け渡し 受け取ったキーで、得意先 マスターを読み込み、 変数項目をセット 得意先コードを入力し実行 CHAIN TOKUI2R 得意先マスタ TOKUI2 ⑥ ③ EVAL=TOKUNM+・・・ QHTMDRV ⑤ ④ ⑦ パラメータセット 得意先コード 得意先名 得意先住所 入力結果 ② ⑧ ⑨ 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> </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> <!------- ボディの表示 --> <TABLE border="0"> <TR> <TD><FONT size="2"> 得意先 </TD> <TD><INPUT type="TEXT" name="KEY" maxlength="6"></TD> </TR> <TR><TD><INPUT type="SUBMIT" value=" 実行 "></TD></TR> </CENTER> </FORM> </BODY> </HTML> このファイルは、 ライブラリ CGILIB ファイル QHTMSRC メンバー AP0050 として作成しています。 HTML作成補助ツールのプログラムを指定します。 変数項目セットプログラムを指定します。 明細表示HTMLファイル名はこの名前と同じにしてください。 この部分が、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> </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> <!------- ボディの表示 --> <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 --> </CENTER> </BODY> </HTML> このファイルは、 ライブラリ CGILIB ファイル QHTMSRC メンバー AP0070 として作成しています。 29