得意先照会

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