i- web RPGX 使用者の手引き

i- web RPGX
使用者の手引き
目 次
Ⅰ.i−webRPGX とは?
P.3
Ⅱ.導入手順
P.8∼
Ⅲ.i−webRPGX の使用方法
1.組込関数
P.13∼
1−1.#IWIN (入力変数の取込)
1−2.#IWVAL (セッション変数ファイルからの変数値取込)
1−3.#IWSET (セッション変数ファイルへの変数値セット)
1−4.#IWOUT (HTML ファイル書き出し)
1−5.HTMLの規則
1−6.#STD_OUT (HTML書き出し)
1−7.#CHR2NUM (数字(文字)→数値変更<戻り値:文字>)
1−8.#IWNBR (セッション№/SEQ№獲得)
2.コマンド
P.28∼
2−1.CRTWEBRPG (コンパイル)
2−2.CRTHTMD (HTML定義ファイルの作成)
2−3.DLTHTMD (HTML定義ファイルの削除)
2−4.CLRIWR (i-web RPGX システムファイルのクリアー処理)
2−5.DLXLSF (EXCEL ファイルのダウンロード)
2−6.CRTFRMCSV (CSVからDB作成)
2−7.CRTCSVF (DBからCSVF作成)
3.ユーティリティー
P.38∼
3−1.STRGEN (WEBプログラムソースジェネレータ)
3−2.#IWCMB (コンボボックス作成)
3−3.ULTOPFC(ファイルをQSYSへアップロード)
Ⅳ.サンプルプログラム
1.得意先照会 処理内容
P.53∼
2.i-web RPGX を使用してCGIプログラムを作成
P.54∼
2−1.キー画面プログラム(SP0010)
2−2.キー画面HTMLソース( SP0010H)
2−3.明細画面HTMLソース( SP0020H)
2−4.エラー画面HTMLソース(SP9999H)
Ⅰ.i−webRPGX とは?
RPGだけでwebプログラムを作成するツールで、Web機能のコンポーネント群です。
扱いやすいようにパーツ化(サブルーチン呼出し可能)されており既存プログラムに容易に付け加える
(プラグインする)ことが可能です。
これによりお客様のアプリケーション資産を素早く、低コストでwebアプリケーションに対応させることができます。
i-web RPGX 機能の概要
IOプロシージャー機能
ブラウザーとの入出力は、#IW関数を用いて行います。
#IWプロシージャーは次の4つの組込関数から成ります。
・#IWIN ・・・ ブラウザーからの入力値を一括して入力域に読み込みます
・#IWVAL ・・・ 一括して読み込まれた入力域から個々の変数値を取り出します
・#IWSET ・・・ 出力域に変数値をセットします
・#IWOUT ・・・ 出力域の変数値をHTMLスケルトンとともにブラウザーに書き出します
セッション管理は、一連の画面推移をひとつの連続した処理とみなし、セッション内での変数の引継ぎを行います。
ブラウザーの『戻る』キーに対応した、変数の引継ぎにも対応します。
セッション管理に必要な制御は、#IW関数の中で行われます。
PC連携機能
CSV、ExcelによるPCとのデータの連携に用いる機能を提供します。
・Excel形式のダウンロード ・・・ DBを直接Excel形式でダウンロードします
・CSVファイルの作成 ・・・ DBをCSV形式に変換します。DBのヘッダー情報も変換します
・CSVからDBの作成 ・・・ CSV形式のデータを、DBを作成してコピーします
・PCからDBへのアップロード ・・・ HTTPプロトコルでAS400へアップロードします
プログラム生成機能
DBおよび項目を対話型で指定し、それを照会するRPGおよびHTMLを自動生成します。
・単一レコード照会 ・・・ キーを入れて1データ表示するタイプです
・複数レコード照会 ・・・ 複数の検索条件を入力して、条件の一致するデータを表示するタイプです
・ウィンドウ型照会 ・・・ 検索の開始キーをパラメータで受け取り、複数件表示するタイプです
3
#IW関数を使ってブラウザーとの入出力を行います。
下記の図は、 ユーザープログラムで#IW関数を使用し、ブラウザーとの入出力の関係を
あらわしています。
i-web RPGX 技術の概要
AS400
RPGプログラム
得意先
セッション№ SEQ フィールド名 変数
0011
*HTTP入力データの変数
EVAL sts_set=#IWIN(pgm_id)
ブラウザからの入力値を
セッション変数ファイル
にセット
1001
001
TOKUCD
1001
セッション変数ファイル
*変数取得
EVAL K_TOK = #IWVAL(‘TOKCD')
セッション№:0011
シーケンス№:001
A
S
4
0
0
得意先コード 名称 住所
変数名より変数値を
セッション変数ファイル
より取得。
1001
得意先 1001
名 称 OOOO
住 所 XXXX
XXXX
・
・
K_TOK CHAIN TOKUF
H
T
T
P
サ
│
バ
│
OOOO
データベース
・
・
EVAL sts_set = #IWSET
(‘TOKNM':
set_val)
*変数セット
EVAL sts_set = #IWSET
('TOKAD':
set_val)
セッション№ SEQ フィールド名 変数
0011
001
TOKUCD
1001
0011
002
TOKNM
OOOO
0011
002
TOKAD
XXXX
変数名より変数値を
セッション変数ファイル
にセット。
*ブラウザに出力
EVAL sts_out = #IWOUT(‘XXX':
'QHTMSRC':
‘XXXX’)
パラメータより定義
ファイルからHTML
情報を取得し標準出力
セッション変数ファイル
HTML 定義ファイル
セッション№:0011
シーケンス№:002
4
セッション管理
通常webアプリケーションを作成した場合、画面単位でプログラムが途切れ、次の画面への情報の受け渡しが
必要となります。受け渡し情報が多ければ多いほど処理が煩雑になってきます。
入力値=1100
ここでは
ここで
入力値=1100
入力値=1100
使用しない
を表示したい
Web上での動き
第一画面
Web上での動き
第ニ画面
①
第三画面
③
⑤
A S 4 0 0 H T T P サ ー バ ー
②
プログラム
④
プログラム
処理の切れ目
プログラム
処理の切れ目
<INPUTtype=“hidden” ・・・
第二画面から情報を
と第ニ画面のHTMLに
取得し第三画面へ出力
情報をもたせる。
第一画面にて入力した値を、第三画面にて使用したい場合、第二画面のHTMLに HIDDEN タイプの
情報をセットしておかないとプログラム自体は、画面出力単位で処理が終わるので、第三画面での表示が出来ない。
5
そこで I-webRPGX では、HTMLにセッション番号を持たせ、処理のつながりを持たせるようにしました。
そして、変数情報をセッション変数ファイルというI-webRPGXのシステムファイルに書き込むことで、
同じセッション番号のHTMLファイルであれば、先の画面処理からも、共通の変数情報を取出すことが出来ます。
入力値=1100
ここでは
ここで
入力値=1100
入力値=1100
使用しない
を表示したい
Web上での動き
Web上での動き
第一画面
第ニ画面
セッション№:0012
シーケンス№:001
第三画面
セッション№:0012
シーケンス№:002
①
セッション№:0012
シーケンス№:003
③
⑤
A S 4 0 0 H T T P サ ー バ ー
②
④
プログラム
プログラム
プログラム
処理の切れ目
入力変数を
処理の切れ目
セッション
セッション
変数ファイルに
変数ファイルか
セット
ら入力変数を
取出す。
セッション変数ファイル
セッション№
シーケンス№
変数名
変数値
0012
001
TOKUCD
1100
0012
002
TOKUNM
OOOO
セッション№・シーケンス№は、 I-webRPGX のアプリケーションにて自動採番されます。
HTMLへのセッション№・シーケンス№の定義も、出力時に自動で書き出されます。
6
i-web RPGXは、複雑なシステムAPIや呼出し手順等を全てカプセル化しておりますので扱い方は簡単です。
Webブラウザへの書出し(HTML書出し)、Excelへの出力、等々の機能が 1つ1つコンポーネント化されているので、
必要な機能だけを既存プログラムに組み込むことができます。
1.組込関数
RPGプログラム内に組込み、ブラウザーとの入出力を行うための関数を提供します。
従来の5250画面プログラム、コーディングでの画面に対する、WRITE/READ/EXFMT 命令を
組込関数に置き換えたイメージで、webプログラムを作成できます。
関数は、次の4つです。
■ #IWIN
セッションの割り当て、ブラウザーからの入力項目をセッション変数ファイルに書き込む関数です。
■ #IVAL
READ命令に当たる関数です。セッション変数ファイルから、ブラウザーからの入力項目を読込みます。
■ #IWSET
ブラウザーへ出力する変数項目をセッション変数ファイルに書き込む関数です。
■ #IWOUT
WRITE命令に当たる関数です。ブラウザーへの書き出しを行います。
2.コマンド
web適用業務を作成するのに必要ないくつかの機能をコマンド形式で提供します。
■ CRTWEBRPG (コンパイル)
CGIプログラムをコンパイルする際に使用すると、便利なコマンドです。
モジュールの作成とプログラムの作成を一度に行います。
■ CRTHTMD (HTML定義ファイルの作成)
HTMLファイルをHTML定義ファイルに書き込むコマンドです。 ■ DLTHTMD (HTML定義ファイルからの定義削除)
HTML定義ファイルに書き込んだ定義情報を削除するコマンドです。 ■ DLXLSF (エクセル形式にしてブラウザー出力)
データベースデータをエクセル形式にしてブラウザーに出力するコマンドです。
■ CRTCSVF (CSVファイルをIFSに作成)
データベースデータをCSV形式にしてIFSに出力するコマンドです。
■ CRTFRMCSVF (CSVファイルからデータベース作成)
CSV形式ファイルからデータベースを作成するコマンドです。
3.ユーティリティー
webアプリケーションを補助するユーティリティーを提供します。
■ STRGEN (ジェネレーター)
webアプリケーションプログラムを簡易作成するツールです。
7
Ⅱ.導入手順
1.ダウンロード
① http://axel.vis.ne.jp/i-web/iwrpgx.zip
上記のURLより、i-webRPGXのダウンロード(約4M)を行ってください。
ダウンロードしたファイルはZIPファイルです。解凍するとiwrpgx.savfというファイルになります。 2.セーブファイルの作成
① AS400内にSAVFを作成します。
コマンド:CRTSAVF FILE(QGPL/IWEBRPGX)
3.FTPサーバーの立上げ
① AS400でFTPサーバーを開始させます。
コマンド:STRTCPSVR SERVER(*FTP)
4.DOSプロンプトからのFTP操作
① DOSプロンプトを立上げ、FTPを用いてアップロードします。
・FTP 貴社のAS400のIPアドレス
・(USERに対し、)ユーザーID
・(PASSWORDに対し、)パスワード
・binary
・put C:¥iwebrpgx.savf QGPL/IWEGRPGX
・QUIT
5.ライブラリーの導入
① AS400でIWRPGXライブラリーを作成します。
コマンド:CRTLIB LIB(IWRPGX)
② RSTLIB でライブラリー IWRPGX を復元します。
コマンド:RSTLIB SAVLIB(IWRPGX) DEV(*SAVF) SAVF(QGPL/SAVF) MBROPT(*ALL)
6.IWEBRPGX のセットアップ
セットアップにはパスワードが必要です。パスワードは、注文が完了次第お知らせ致します。
① セットアッププログラムを実行します。
コマンド:IWRPGX/SETTPW RPGX パスワード
入金確認後にもう一度メールでパスワードをお知らせ致します。以下の処理を行ってください。
① セットアッププログラムを実行します。
コマンド:IWRPGX/SETPPW RPGX パスワード
8
7.作業ファイルの削除
① セーブファイルの削除を行います。
コマンド:DLTF QGPL/IWEBRPGX
② PC内のファイルを削除します。
ダウンロードファイルを削除してください。
8.ライブラリーリストのユーザー部分の変更
① IWRPGXライブラリーをライブラリーリストに追加します。
コマンド:WRKSYSVAL QUSRLIBL
ライブラリーリストの変更が出来るのでQTEMPの下にIWRPGXを追加してください。
設定後、初期ライブラリーにIWRPGXが追加されます。
9.HTTP構成の変更
① HTTPサーバーが稼動中の場合は、サーバーを終了させます。
コマンド:ENDTCPSVR SERVER(*HTTP)
HTTPサーバーが終了します。
② 既存のファイルに以下のものを追加もしくは変更してください。
すでに定義してあればそのままで結構です。
このファイルにはHTTPサーバーの動作を規定する命令(ディレクティブ)が書かれます。
コマンド:WRKHTTPCFG
・CCSID DIRECTIVESを追加します。
DefaultFsCCSID 5035
DefaultNETCCSID 0932 を追加。
・HTTPサーバーがクライアントからの要求を受け取るポート番号を指定します。
Port
80
・CGIプログラムを利用する為のメソッドを使用可能にします。
Enable
Enable
Enable
GET
HEAD
POST
・ブラウザが要求したCGIプログラムの実行パス名を実際のライブラリーのパス名に変換します。 Exec /実行パス名/* /QSYS.LIB/実際のライブラリー名/*
i-web RPGX のツールを稼動できるように実行パスを追加します。
Exec /RPGX/*
/QSYS.LIB/IWRPGX.LIB/*
9
次頁に参考記述があります。
参考テキスト(一部だけ記述)
#-----------------------------------------------------# AS/400 INTERNET CONNECTION SERVER CONFIGURATION
# AXEL CORP,.
#-----------------------------------------------------#
#*** CCSID DIRECTIVES ***
#
DefaultFsCCSID
5035
DefaultNETCCSID
0932
#
#*** PORT DIRECTIVES ***
#
Port
80
#
#*** METHOD DIRECTIVES ***
#
Enable
GET
Enable
HEAD
Enable
POST
#
#*** MAPPING DIRECTIVES ***
#
Exec /RPGX/* /QSYS.LIB/IWRPGX.LIB/*
Exec /XXXX/* /QSYS.LIB/XXX.LIB/*
③ 次にHTTPサーバーを起動させます。
コマンド: STRTCPSVR SERVER(*HTTP) HTTPSVR(DEFAULT)
これで追加、変更した設定が有効になります。
10
10.その他導入及び初期作業での注意点
10−1.web適用業務のライブラリーの作成
web適用業務で使うライブラリーでアプリケーションの開発を行いますが、実行環境やIFSパス
の設定を WRKHTTPCFG にて行う必要があります。
例えば、ライブラリー CGILIB を実行環境として登録し、IFSパス CONTENTS を設定する場合。
① コマンド:WRKHTTPCFG
② #*** MAPPING DIRECTIVES *** に
Exec /CGI-BIN/* /QSYS.LIB/CGILIB.LIB/* を追加。
/CGI-BIN/ は、本当の構成を web 上に表示させないために仮名として設定します。
③ # Pass /*
/HTML/* に
Pass /CONT-DOC/* /CONTENTS/* を追加。
/ CONT-DOC / は、本当の構成を web 上に表示させないために仮名として設定します。
以上の設定を行えば、実行プログラムやIFSパスが web 上で使用可能となります。
手順は 9.HTTP構成の変更 と同じ方法です。
10−2.ソースファイルの作成
各APIは英語大文字・小文字を区別するので、ソースファイル作成時(CRTSRCPF)に
パラメータCCSIDで 5035 を指定します。
例。ライブラリー:CGILIB、ソースファイル:QHTMSRC とした場合
CRTSRCPF FILE(CGILIB/QHTMSRC) RCDLEN(112) IGCDTA(*YES) CCSID(5035)
10−3.5250エミュレータ(P−COM)の設定
5250エミュレータも英小文字が扱えるように設定(PC5250ではホストコードページとして
『939 日本語英数小文字拡張』を指定)
この設定を行うと、半角カナ文字が文字化します。コントロール+F3にて
930 日本語英数 カナ の表示切替が可能です。
11
10−4.ジョブのCCSIDを変更する
英小文字が扱えるようにするため、CCSIDを変更します。
i-web RPGX でのアプリケーション開発は、CCSIDを5035に変えて行ってください。
コマンド:CHGJOB CCSID(5035)
10−5.既存の i-web RPGX をアップロードなどで上書きする
i-web RPGX では、ファイルを使用しています。
上書きする場合は、ファイルをバックアップして別のライブラリーに
退避させてから上書き作業をして下さい。その後、コピーなどでデータを戻してください。
対象のファイルを以下に記述します。
IWR00
IWR01
IWR01L1
IWR02
IWR02L1
IWR03
IWR04
IWR05
PF
PF
LF
PF
LF
PF
PF
PF
コントロールファイル (FOR i-web RPGX)
セッション管理ファイル
セッション管理ファイル L1
セッション変数ファイル
セッション変数ファイル L1
HTML 定義ファイル
HTML 定義ファイル (ADD 部まとめ)
HTML ログファイル
12
Ⅲ.i−webRPGX の使用方法
1.組込関数
1−1.#IWIN (入力変数の取込)
#IWIN は、ブラウザから入力された全ての変数値をI-webRPGXのシステムファイル、
(セッション変数ファイル)に書き出します。
また、セッション№・シーケンス№の採番もここで処理されます。
i-web RPGX #IW関数
AS400
RPGプログラム
得意先
セッション№ SEQ フィールド名 変数
0011
*HTTP入力データの変数
EVAL sts_set=#IWIN(pgm_id)
ブラウザからの入力値を
セッション変数ファイル
にセット
1001
001
TOKUCD
1001
セッション変数ファイル
*変数取得
EVAL K_TOK = #IWVAL(‘TOKCD')
セッション№:0011
シーケンス№:001
A
S
4
0
0
得意先コード 名称 住所
変数名より変数値を
セッション変数ファイル
より取得。
1001
得意先 1001
名 称 OOOO
住 所 XXXX
XXXX
・
・
K_TOK CHAIN TOKUF
H
T
T
P
サ
│
バ
│
OOOO
データベース
・
・
EVAL sts_set = #IWSET
(‘TOKNM':
set_val)
*変数セット
EVAL sts_set = #IWSET
('TOKAD':
set_val)
セッション№ SEQ フィールド名 変数
0011
001
TOKUCD
1001
0011
002
TOKNM
OOOO
0011
002
TOKAD
XXXX
変数名より変数値を
セッション変数ファイル
にセット。
*ブラウザに出力
EVAL sts_out = #IWOUT(‘XXX':
'QHTMSRC':
‘XXXX’)
パラメータより定義
ファイルからHTML
情報を取得し標準出力
セッション変数ファイル
HTML 定義ファイル
セッション№:0011
シーケンス№:002
13
#IWIN は、次の形式で使用します。
EVAL
sts_in = #IWIN(pgm_id)
sts_in ・・・ 処理結果のステータスが返ってきます。
0 : セッション初回
1 : セッション継続
9 : エラー
pgm_id ・・・ プログラムIDをセットします。
実際のコーディングは以下のように記述されます。
D仕様書に以下の文を追加します。
D #IWIN
D
D sts_in
D pgm_id
PR
S
S
1
10
1
10
EXTPROC('#IWIN')
value
INZ
INZ
例 プログラムIDを PGM010 とする。
C
C
EVAL
EVAL
pgm_id = ‘PGM010’
sts_in = #IWIN(pgm_id)
セッションが初回の場合は、セッション№が採番されます。
継続の場合は、セッション№はそのままです。
セッション№・シーケンス№は稼動するジョブ内のデータエリアに保管されます。
14
1−2.#IWVAL (セッション変数ファイルからの変数値取込)
セッション変数ファイルから変数名に対応する値を取得し、プログラム間の変数にセットします。
同じ変数名に対応する変数値が複数ある場合、変数値は現在のセッション№・
最終のシーケンス№を持ってきます。
i-web RPGX #IW関数
AS400
RPGプログラム
得意先
セッション№ SEQ フィールド名 変数
0011
*HTTP入力データの変数
EVAL sts_set=#IWIN(pgm_id)
ブラウザからの入力値を
セッション変数ファイル
にセット
1001
001
TOKUCD
1001
セッション変数ファイル
*変数取得
EVAL K_TOK = #IWVAL(‘TOKCD')
セッション№:0011
シーケンス№:001
A
S
4
0
0
得意先コード 名称 住所
変数名より変数値を
セッション変数ファイル
より取得。
1001
得意先 1001
名 称 OOOO
住 所 XXXX
XXXX
・
・
K_TOK CHAIN TOKUF
H
T
T
P
サ
│
バ
│
OOOO
データベース
・
・
EVAL sts_set = #IWSET
(‘TOKNM':
set_val)
*変数セット
EVAL sts_set = #IWSET
('TOKAD':
set_val)
セッション№ SEQ フィールド名 変数
0011
001
TOKUCD
1001
0011
002
TOKNM
OOOO
0011
002
TOKAD
XXXX
変数名より変数値を
セッション変数ファイル
にセット。
*ブラウザに出力
EVAL sts_out = #IWOUT(‘XXX':
'QHTMSRC':
‘XXXX’)
パラメータより定義
ファイルからHTML
情報を取得し標準出力
セッション変数ファイル
HTML 定義ファイル
セッション№:0011
シーケンス№:002
15
#IWVALは、次の形式で使用します。
EVAL
結果フィールド = #IWVAL(‘変数名')
変数名 ・・・ HTMLの変数名をリテラルでセット。
結果フィールド ・・・ 変数値が入ってきます。
実際のコーディングは以下のように記述されます。
D仕様書に以下の文を追加します。
D #IWVAL
D
PR
1000
32
EXTPROC('#IWVAL')
const
C仕様書にて使用する際、以下のように使用します。
例 HTML変数名を TOKUCD とする。
結果フィールドは K_TOKUCD とする。フィールド長は4バイトとする。
WEBにて入力された値は ‘0001’ とする。
C
EVAL
K_TOKCD = #IWVAL(‘TOKUCD')
K_TOKUCD には ‘0001’が入ってきます。 取得したい変数が複数ある場合は、続けて#IWVALを
使用してください。
16
1−3.#IWSET (セッション変数ファイルへの変数値セット)
セッション変数ファイルに指定された変数名で変数値をセットします。
i-web RPGX #IW関数
AS400
RPGプログラム
得意先
セッション№ SEQ フィールド名 変数
0011
*HTTP入力データの変数
EVAL sts_set=#IWIN(pgm_id)
ブラウザからの入力値を
セッション変数ファイル
にセット
1001
001
TOKUCD
1001
セッション変数ファイル
*変数取得
EVAL K_TOK = #IWVAL(‘TOKCD')
セッション№:0011
シーケンス№:001
A
S
4
0
0
得意先コード 名称 住所
変数名より変数値を
セッション変数ファイル
より取得。
1001
得意先 1001
名 称 OOOO
住 所 XXXX
XXXX
・
・
K_TOK CHAIN TOKUF
H
T
T
P
サ
│
バ
│
OOOO
データベース
・
・
EVAL sts_set = #IWSET
(‘TOKNM':
set_val)
*変数セット
EVAL sts_set = #IWSET
('TOKAD':
set_val)
セッション№ SEQ フィールド名 変数
0011
001
TOKUCD
1001
0011
002
TOKNM
OOOO
0011
002
TOKAD
XXXX
変数名より変数値を
セッション変数ファイル
にセット。
*ブラウザに出力
EVAL sts_out = #IWOUT(‘XXX':
'QHTMSRC':
‘XXXX’)
パラメータより定義
ファイルからHTML
情報を取得し標準出力
セッション変数ファイル
HTML 定義ファイル
セッション№:0011
シーケンス№:002
17
#IWSETは、次の形式で使用します。
EVAL
sts_set = #IWSET(‘変数名':set_val)
変数名 ・・・ HTMLの変数名をリテラルでセット。
set_val ・・・ 変数値をセットします。
sts_set ・・・処理結果のステータスが返ってきます。
0 : 追加
1 : 変更
9 : エラー
実際のコーディングは以下のように記述されます。
D仕様書に以下の文を追加します。
D #IWSET
D
D
D sts_set
D set_val
PR
S
S
1
32
1000
1
1000
EXTPROC('#IWSET')
const
value
INZ
C仕様書にて使用する際、以下のように使用します。
例 HTML変数名を TOKUNM とする。
変数値セットフィールドは、AATOKNM とする。
C
C
EVAL
EVAL
set_val = %TRIM(AATOKUNM)
sts_set = #IWSET('TOKUNM':set_val)
set_val に変数 AATOKUNM の値をセットします。セットしたい変数が複数ある場合は、
続けて #IWSET を使用してください。
18
1−4.#IWOUT (HTML ファイル書き出し)
パラメーターで指定されたHTML定義ファイルを読み込み、ブラウザーに書き出します。
この際、HTMLファイル内に置換の指定がある場合、
セッション変数ファイル内でセットした変数値で置き換えてから、書き出します。
i-web RPGX #IW関数
AS400
RPGプログラム
得意先
セッション№ SEQ フィールド名 変数
0011
*HTTP入力データの変数
EVAL sts_set=#IWIN(pgm_id)
ブラウザからの入力値を
セッション変数ファイル
にセット
1001
001
TOKUCD
1001
セッション変数ファイル
*変数取得
EVAL K_TOK = #IWVAL(‘TOKCD')
セッション№:0011
シーケンス№:001
A
S
4
0
0
得意先コード 名称 住所
変数名より変数値を
セッション変数ファイル
より取得。
1001
得意先 1001
名 称 OOOO
住 所 XXXX
XXXX
・
・
K_TOK CHAIN TOKUF
H
T
T
P
サ
│
バ
│
OOOO
データベース
・
・
EVAL sts_set = #IWSET
(‘TOKNM':
set_val)
*変数セット
EVAL sts_set = #IWSET
('TOKAD':
set_val)
セッション№ SEQ フィールド名 変数
0011
001
TOKUCD
1001
0011
002
TOKNM
OOOO
0011
002
TOKAD
XXXX
変数名より変数値を
セッション変数ファイル
にセット。
*ブラウザに出力
EVAL sts_out = #IWOUT(‘XXX':
'QHTMSRC':
‘XXXX’)
パラメータより定義
ファイルからHTML
情報を取得し標準出力
セッション変数ファイル
HTML 定義ファイル
セッション№:0011
シーケンス№:002
19
#IWOUTは、次の形式で使用します。
EVAL
sts_out = #IWOUT(‘ライブラリー’:‘ファイル':out_mbr)
ライブラリー ・・・ 出力されるHTMLのライブラリー名をリテラルでセット。
ファイル ・・・ 出力されるHTMLのファイル名をリテラルでセット。
out_mbr ・・・出力されるHTMLのメンバー名をセットします。
sts_out ・・・処理結果のステータスが返ってきます。
1 : 出力成功
9 : エラー
実際のコーディングは以下のように記述されます。
D仕様書に以下の文を追加します。
D #IWOUT
D
D
D
D sts_out
D out_mbr
PR
S
S
1
10
10
10
1
10
EXTPROC('#IWOUT')
const
const
value
INZ
C仕様書にて使用する際、以下のように使用します。
例 ライブラリーをCGILIB、ファイルをQHTMSRC、メンバーをTST010とする。
C
C
C
EVAL
EVAL
out_mbr = ‘TST010’
sts_out = #IWOUT(‘CGILIB':'QHTMSRC':
out_mbr)
処理によってメンバー名が変わる場合は、処理毎でout_mbrの値を変更します。
20
HTML文は以下のように記述します。
CONTENT-TYPE: TEXT/HTML
<HTML>
<BODY>
(省略)
<TABLE>
<TR>
<TD> 得 意 先 </TD>
<TD> 住 所 </TD>
</TR>
<TR>
<!-- FLDREP START -->
<TD>&&TOKUNM</TD>
<TD>&&ADR</TD>
<!-- FLDREP END -->
</TR>
</TABLE>
</BODY>
</HTML>
<!-- FLDREP START --> から <!-- FLDREP END --> の間が
置換操作の対象となります。
<TD>&&TOKUNM</TD> には TKTOKNAM の値が入り
<TD>&&ADR</TD> には TKTOKADR の値がそれぞれ入ります。
置換項目は &&変数名 で記述してください。
注)HTMLソースを作成しただけでは、稼動しません。
i-web RPG コマンド CRTHTMD を使ってHTML定義ファイルに登録しなければなりません。
i-web RPG コマンド CRTHTMD については次章 P.28『2.コマンド』のところで解説します。
21
1−5.HTMLの規則
i-web RPGX では、ブラウザーに出力されるHTMLをプログラムの外部に、
ソースファイルの形式で定義し、その定義をCRTHTMDを使用して定義ファイルに設定します。
(CRTHTMDについては、P.28 『2.コマンド』のところで解説します。)
そして、そのソースファイル内のHTMLの一部をプログラムの変数で置換して
最終的に、ブラウザーに出力します。
このため、通常のHTMLのルールのほかに、幾つかのルールが追加されています。
このルールは、i-web RPGX 内だけの特別なルールです。
1−5−1.単純な変数置換
HTML文は以下のように記述します。
変数値
TOKUNM=“あいうえお”
HTML定義ファイル
得意先名は&&TOKUNM
#IWOUT
書き出されるHTML
得意先名は“あいうえお”
&&変数名で記述した部分は、変数の内容に置換されます。
1−5−2.代替変数置換
リテラルを記述する事により、リテラルの部分が、変数の内容で置換されます。
変数値
TOKUNM=“あいうえお”
HTML定義ファイル
<TD><FLD=“TOKUNM">AB9876</FLD>
#IWOUT
書き出されるHTML
<TD> <FLD=“TOKUNM">あいうえお
22
1−5−3.変数置換の範囲
変数置換処理は、
<!-- FLDREP START --> と、
<!-- FLDREP END --> の間に挟まれた部分に対してのみ行われます。
これは、置換処理がコンピューターの資源を大量に必要とするので、
置換処理の範囲を最低限に留める為です。
置換処理をHTMLに使用する場合、十分に配慮をする必要があります。
1−5−4.HTMLに書き出さない
<!-- IGNORE START --> と、
<!-- IGNORE END --> の間に挟まれた部分は、ブラウザーには書き出されません。
1−5−5.コマンドの実行
<!-- #EXEC CMD=“コマンド” --> と記述されると、記述された場所で、
コマンドが呼び出され実行されます。
例えば、<!-- #EXEC CMD=“CALL DTLSET” -->と記述すると、
プログラム DTLSET が実行されます。 この機能を用いて、行数が可変なテーブルの出力などを
行う事が出来ます。
1−5−6.コマンドの実行2
<!-- #EXEC CMD2=“コマンド” --> と記述されると、記述された場所で、
コマンドが呼び出され実行されます。コマンドにパラメーターがあり、そのパラメーターが
変数を使用する場合に使用します。
例えば、<!-- #EXEC CMD2=“CALL DTLSET PARM(‘&&CODE’)” -->と記述すると、
変数 &&CODE の値が置換わり、プログラム DTLSET が実行されます。 23
1−6.#STD_OUT (HTML書き出し)
プログラム中にて作成されたHTML文を、ブラウザーに書き出します。
次の形式で使用します。
CALLB
PARM
‘#STD_OUT’
OUT
2048
文字列
実際のコーディングは以下の様に記述します。
C仕様書にて使用する際以下のように使用します。
例 WEBに出力する変数項目は、
得意先名 'TOKUNM'
住所 ‘TOKADR’ とする。
D* コンパイル時配列
DHTM
S
D* 改行コード
DNL
C
* ◆HTML文作成◆
C
DO
C
EVAL
C
* ◆標準出力◆
C
IF
C
C
CALLB
C
PARM
C
CLEAR
C
ENDIF
C
ENDDO
C
SETON
C
RETURN
80
DIM(52) PERRCD(1) CTDATA
x'15'
52
i
3 0
OUT = %TRIM(OUT) + %TRIM(HTM(i)) +
%TRIM(NL)
i = 25 OR
i = 52
'#STD_OUT'
OUT
OUT
2048
LR
コンパイル時配列は次頁へ
#STD_OUT は、一度に2048バイト分までのHTML文を出力することが出来ます。
例では、途中まで OUT パラメーターにHTML文をためて出力させています。
一行のHTML文の最後に改行コードをセットしています。
24
コンパイル時配列
** CTDATA HTML *******************************************
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>
<!------- ボディの表示 -->
<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=" 実行 "></TD></TR>
</TABLE>
</CENTER>
</FORM>
</BODY>
</HTML>
25
1−7.#CHR2NUM (数字(文字)→数値変更<戻り値:文字>)
数値変換する文字列・変換する数値の総桁数・小数点以下桁数を受取り、
変換した数値を文字列として返します。(戻り値の1桁目は、マイナス符号。
ただし、文字列中の数字・マイナス符号・小数点以外の文字は無視されます。
次の形式で使用します。
EVAL
戻り値 = #CHR2NUM(cnv_str:数値の総桁数:小数点以下桁数)
cnv_str ・・・ ブラウザーから受け取った文字列。
数値の総桁数 ・・・ 変換する数値の総桁数。
小数点以下桁数 ・・・ 変換する数値の小数点以下桁数。
戻り値 ・・・ 変換された文字列
例えば、ブラウザーでは数字9桁、小数点以下3桁の数値が『123,456.7-』だとすると
この関数を使用した場合、戻り値は『-123456700』となります。
実際のコーディングは以下のように記述されます。
D仕様書に以下の文を追加します。
D #CHR2NUM
D
D
D
*
D cnv_str
PR
31
EXTPROC('#CHR2NUM')
50
value
2 0 const
2 0 const
S
50
INZ
実際に使用する際、以下のように使用します。
例 cnv_strに入っている値を123,456.7-、総桁数9桁、小数点以下3桁とする
D #CHR2NUM
PR
31
EXTPROC('#CHR2NUM')
D
50
value
D
2 0 const
D
2 0 const
*
D cnv_str
S
50
INZ
*
D
DS
D dec_str
1
31
INZ
D d_minus
1
1
INZ
D d_numeric
2
31
INZ
*
D W_num
S
9 3 INZ
********************************************************************
・
・
・
C
EVAL
dec_str = #CHR2NUM(cnv_str:9:3)
C
MOVEL
d_numeric
W_num
C
IF
d_minus = '-'
C
Z-SUB
W_num
W_num
C
ENDIF
W_num の値は『123456.700-』となります。
26
1−8.#IWNBR (セッション№/SEQ№獲得)
iwebRPGXのwebPGMで使用する共用データエリアからセッション№・
シーケンス№を取り出します。
ユーザープログラムで、セッション№・シーケンス№を獲得する際に使用します。
実際のコーディングは以下のような形で記述します。
C
C
C
C
CALLB
PARM
PARM
PARM
'#IWNBR'
iw_session
iw_seqno
seq_mode
9
4
1
iw_session ・・・ 出力パラメータで、セッション№が入ってきます。
iw_seqno ・・・ 出力パラメータで、シーケンス№が入ってきます。
seq_mode ・・・ 入力パラメータで、処理モードをあらわします。
Nの場合は、インクリメント後シーケンス№、ブランクの場合は、現シーケンス№を取得。
27
2.コマンド
2−1.CRTWEBRPG (コンパイル)
CGIプログラムをコンパイルする際に使用すると、便利なコマンドです。
モジュールの作成とプログラムの作成を一度に行います。
パラメーター
プログラム . . . . . .
ライブラリー . . . .
ソースファイル . . . .
ライブラリー . . . .
モジュール . . . . . .
ライブラリー . . . .
バインドディレクトリー
ライブラリー . . . .
デバッキング用ビュー .
ターゲット・リリース .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
>
>
>
>
>
>
>
>
>
>
PGMID
LIB
SRCFILE
SRCLIB
MODNAME
MODLIB
BNDDIR
IWRPGX
*NONE
*CURRENT
名前
名前 , *LIBL
名前
名前 , *LIBL
名前 , *PGM
名前 , *LIBL ,
名前
名前 , *LIBL ,
*STMT, *SOURCE,
*CURRENT, *PRV,
*CURLIB
*CURLIB
*LIST...
VXRXMX
上から順に
プログラム:作成するプログラム名称
ライブラリー:作成するプログラムのライブラリー
ソースファイル:コンパイルするプログラムソース
ライブラリー:ソースファイルのライブラリー
モジュール:モジュールの名称
ライブラリー:モジュールのライブラリー
バインドディレクトリ:バインドするバインドディレクトリ名
ライブラリー:バインドディレクトリのライブラリー
デバッグ用ビュー:コンパイル済みプログラム・オブジェクトに使用可能なデバッグのレベルおよび
ソース・レベルのデバッグに使用可能なソース・ビューを指定。
ターゲットリリース:作成されるオブジェクトを使用するオペレーティング・システムのリリースを指定。
28
2−2.CRTHTMD (HTML定義ファイルの作成)
HTMLファイルの定義を i-web RPGX システムファイルであるHTML定義ファイルに登録します。
このコマンドで定義ファイルに登録しておかないと、ブラウザー表示することが出来ません。
このコマンドは、DSPFやPRTFのコンパイルと同じように考えていただければよいかと思います。
ですから、HTMLソースの変更があった場合は、このコマンドで定義しなおしてください。
パラメーター
ソースファイル . . . . . . . .
ライブラリー . . . . . . . .
メンバー . . . . . . . . . .
*LIBL
名前
名前 , *LIBL
名前 , *FIRST
上から順に
ソースファイル:定義するHTMLソース
ライブラリー:ソースファイルのライブラリー
メンバー:HTMLファイルの名前
定義ファイルは以下のファイルで構成されています。
IWR03 ・・・HTML 定義ファイル
IWR04 ・・・HTML 定義ファイル (ADD 部まとめ)
29
2−3.DLTHTMD (HTML定義ファイルの削除)
HTMLファイルの定義を i-web RPGX システムファイルであるHTML定義ファイルから削除します。
このコマンドは、既に使用しないHTML定義を削除するものです。
パラメーター
ソースファイル . . . . . . . .
ライブラリー . . . . . . . .
メンバー . . . . . . . . . .
*LIBL
名前
名前 , *LIBL
名前 , *FIRST
上から順に
ソースファイル:定義したHTMLソース
ライブラリー:ソースファイルのライブラリー
メンバー:HTMLファイルの名前
定義ファイルは以下のファイルで構成されています。
IWR03 ・・・HTML 定義ファイル
IWR04 ・・・HTML 定義ファイル (ADD 部まとめ)
30
2−4.CLRIWR (i-web RPGX システムファイルのクリアー処理)
セッション管理しているi-web RPGX システムファイルのレコードをクリアーします。
一度このファイルに登録されるとずっと履歴としてデータが残ってしまいます。
このコマンドを使って、定期的にレコードのクリアー処理を行うことを薦めます。
パラメーター
日数 . . . . . . . . . . . . .
30
数値 (1-999)
日数:1∼999まで入力できます。パラメータに入力した数値以前のデータを削除しにいきます。
デフォルト値は30日になっています。
クリアー処理されるシステムファイルは以下のファイルで構成されています。
IWR01 ・・・ セッション管理ファイル
IWR02 ・・・ セッション変数ファイル
IWR05 ・・・ セッションログファイル
31
2−5.DLXLSF (EXCEL ファイルのダウンロード)
このコマンドでAS/400データベースの名前、ライブラリー名を与えるだけで、
内容をEXCEL形式でダウンロードします。
パラメーター
DBファイル .
ライブラリー
タイトル . . .
コメント . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
*LIBL
名前
名前 , *LIBL
上から順に
DBファイル:対象データベースファイル
ライブラリー:対象データベースのライブラリー
タイトル:エクセル出力時の表タイトル一行目に出力
コメント:エクセル出力時の表コメント二行目に出力
イメージは、以下のようになります。
注)エクセルで表示できるフィールドの最大数は88項目までです。
それを超えるものは、無視されます。
32
このコマンドを使用し以下のようにして、
Excelダウンロード・プログラムを簡単に作成できます。
①ブラウザーより検索条件を入力する
↓
②ウェブプログラムで条件を受け取り、ワークファイルに書き出す
↓
③DLXLSFコマンドを発行
データベースをExcel形式でダウンロード
ユーザー作成のウェブプログラム
i M ac
ブラウザーから
条件の入力
*検索条件の取得
EVAL XXXX = #IWVAL(‘XXXXXX’)
*条件にしたがって、ワークファイルの作成
・
・
WRITE WKFIL
・
・
*ワークファイルをエクセル形式でダウンロード
・
・
EVAL CMD=‘DLXLSF・・・’
CALL ‘QCMDEXC’
ダウンロード用
ワークファイル
iM ac
ブラウザーから
エクセルの表示
PARM
・
・
SETON
CMD
LR
33
2−6.CRTFRMCSV (CSVからDB作成)
AS/400CSVファイルの1,2行目に、それぞれ、フィールド名、見出し名を記述しておくと、 自動でAS/400内に、物理ファイルを作成します。
パラメーター
CSVF . . .
ライブラリー
出力ファイル名
ライブラリー
タイプ . . . .
上書き . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
*LIBL
*LIBL
FHD
*NO
名前
名前 , *LIBL
名前
名前 , *LIBL
名前
名前
上から順に
CSVF ・・・ CSVファイル名
ライブラリー ・・・ ライブラリー名
出力ファイル名 ・・・ 作成データベース名
ライブラリー ・・・ ライブラリー名
タイプ ・・・ CSVデータのタイプ
FHD ー 1行目=フィールド名/2行目=見出し/3行目以降=データ
HFD ー 1行目=見出し/2行目=フィールド名/3行目以降=データ
FD ー 1行目=フィールド名/2行目以降=データ
HD ー 1行目=見出し/2行目以降=データ
D
ー 1行目以降=データ
上書き ・・・既にファイルがある場合、上書き(*YES)
34
このコマンドを使用すると、
①『DLXLSF』を使用してAS/400のデータベースをエクセルにダウンロードする
↓
②データベースファイルデータをエクセルでメンテナンスする
↓
③エクセルでCSVファイルを作成する
↓
④『ULTOPFC』で、CSVファイルをAS/400上にアップロード
↓
⑤『CRTFRMCSV』で、AS/400にデータベース化
といった処理が簡単に出来ます。
CSVファイルよりデータベースの作成
HINCOD,HINMEI,MAKER,UTANKA,STANKA,ZAIKO
コード、品名、メーカー、売単価、仕入単価、在庫数
10590,PLUS,電動専用替え消しゴム,190,95,26
13519,PLUS,エアイン 大 1個,72,36,111
13528,PLUS,ダストフリー 1個,72,96,0
① データ記述の作成
CSVファイル
データ記述
A R RECORD
A
HINCOD
A
HINMEI 52
6S 0 COLHDG(‘コード’)
COLHDG(‘品名’)
A
MAKER
COLHDG(‘メーカー’)
A
UTANKA 11S 0 COLHDG(‘売単価’)
10
13770,PLUS,電動式 鉛筆削り,4194,2097,25
A
STANKA 11S 0 COLHDG(‘仕入単価’)
15498,PKUS,手動鉛筆削り,998,499,9
A
ZAIKO
③ データのコピー
5S 0 COLHDG(‘在庫数’)
② 物理ファイルの作成
AS/400データベース
35
2−7.CRTCSVF (DBからCSVF作成)
このコマンドでAS/400データベースを指定すると、IFS(統合ファイルシステム)に
CSVファイルが作成されます。
パラメーター
ファイル . . . . . . . . . . .
ライブラリー . . . . . . . .
ストリームファイル . . . . . .
メンバー . . . . . . . . . .
ストリームファイル の置換え . . . . .
データベースファイルの CCSID
ストリームファイル のコードページ . .
*LIBL
名前
名前 , *LIBL, *CURLIB
.
.
.
.
*FIRST
*YES
*JOB
*SYSTEM
名前 , *FIRST
*YES, *NO
1-65533, *JOB, *FILE
1-32767, *SYSTEM
.
.
.
.
.
.
*NONE
*ABORT
*BOTH
*DOUBLEQUOTE
*COMMA
*NO
*NONE, *FLDNAM, *COLHDG...
1-9999, *ABORT, *IGNORE
*BOTH, *STMF, *SECLVL, *NONE
文字値 , *DOUBLEQUOTE...
文字値 , *COMMA, *SPACE
*YES, *NO
追加のパラメーター
見出し情報 . . . . . . .
レコードエラーの許可 . .
レコードエラーメッセージ
ストリング区切り文字 . .
フィールド区切り文字 . .
デバッグリスト . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
上から順に
ファイル ・・・ データベースファイル名
ライブラリー ・・・ ライブラリー名
ストリームファイル ・・・ IFSのパス <例)/TEMP/TOKU.CSV >
メンバー ・・・ データベースメンバー名
ストリームファイルの置換え ・・・既にファイルがある場合、上書き(*YES)
データベースファイルのCCSID ・・・ データベースファイルのCCSIDを指定
*JOB ・・・ デフォルトジョブCCSIDを使用
*FILE ・・・ データベースファイルCCSIDを使用
ストリームファイルのコードページ ・・・ ストリームファイルのコードページを指定
*SYSTEM ・・・ システム値を使用
36
追加のパラメーター
補足し情報 ・・・ ストリームファイルに書かれている補足情報を指定
*NONE
・・・ 補足情報は書かれません
*FLDNAM ・・・ フィールド名が、1行目に挿入されます
*COLHDG ・・・ カラムヘディングが、 1行目に挿入されます
*BOTH
・・・ カラムヘディングが1行目に、フィールド名が、2行目に挿入されます
レコードエラーの許可 ・・・ レコード・エラーを無視するかどうかを明示します
*ABORT ・・・レコード・エラーは許されません。
レコード・エラーが検知される場合、プログラムは異常終了します
*IGNORE ・・・復元可能なエラーの場合には処理し続けます レコードエラーメッセージ ・・・レコード・エラー・メッセージがジョブ・ログに送られるかどうか明示します
致命的な内部プログラム・エラーあるいは完成メッセージは、
プログラム・メッセージキューに常に送られます
*BOTH
・・・ レコード・エラー・メッセージはストリームファイルに書かれ、
ロー・レベルのメッセージとしてジョブログに送られます
*STMF
・・・ レコード・エラー・メッセージはストリームファイルに書かれます
*SECLVL ・・・ レコード・エラー・メッセージはロー・レベルのメッセージとして ジョブログに送られます
*NONE
・・・ レコード・エラー・メッセージは送られません
ストリング区切り文字 ・・・ ストリング区切り文字を指定の文字に変えます。
*DOUBLEQUOTE ・・・ 区切り文字は 『“』 を使用します
*SPACE
・・・ 区切り文字はスペースに置き換えます
フィールド区切り文字 ・・・ フィールド区切り文字を指定の文字に変えます
*COMMA ・・・ 区切り文字は 『,』 を使用します
*SPACE ・・・ 区切り文字はスペースに置き換えます
デバッグリスト ・・・ デバッグリストを出力させるかどうか指定します
注)CSVに変換できるフィールドの最大数は88項目までです。
それを超えるものは、出力されません。
出力されるデータが9、999件を超えた場合、ファイルを処理することができません。
37
3.ユーティリティー
3−1.STRGEN (WEBプログラムソースジェネレータ)
i-web RPGX を使用した、簡単な照会型プログラムソース及びHTMLソースを作成します。
画面にしたがって必要情報を設定するだけで、プログラムソース及びHTMLソースを作成します。
ジェネレータにより、単一レコード照会・サブファイル型照会・ポップアップウィンドウといった
3種類のプログラムソースを作成することが出来ます。
画面は、4つで構成されています。
1.基本情報入力
2.ヘッダー部情報入力
3.名細部情報入力
4.実行確認
WEBプログラムソースジェネレータ
基本情報入力
ヘッダー部情報入力
作成ライブラリ
キー項目の選択
名細部情報入力
明細表示項目の選択
テンプレートの選択
使用ファイル
実行確認
明細表示項目の選択
選択したファイル
テンプレート
プログラムソースと
HTMLソースの作成
単一レコード照会
サブファイル型照会
ポップアップウィンドウ
作成されたメンバー
プログラム
HTML
38
画面イメージ(単一レコード照会)
① 基本情報入力
② ヘッダー部情報入力
③ 明細部情報入力
④ 実行確認画面
39
画面イメージ(サブファイル型照会)
① 基本情報入力
② ヘッダー部情報入力
③ 明細部情報入力
④ 実行確認画面
40
画面イメージ(ポップアップウィンドウ)
① 基本情報入力
② ヘッダー部情報入力
③ 明細部情報入力
④ 実行確認画面
41
① 基本情報入力
1.プログラムソースの指定
ライブラリ/ソースファイル
RPGプログラムソース及びHTMLソースの生成先ソースファイル名/ライブラリを指定します。
ソースファイルは、既存のものである必要があります。
ライブラリの指定には、*LIBLは使用できません。
メンバー/プログラム名称
RPGプログラムID(=メンバー名)・プログラム名(メンバーテキスト)を指定します。
HTMLソースメンバーのIDは、RPGプログラムID+’H’+連番(数字1文字)で自動で
採番されるため、RPGプログラムのIDは最長8桁に制限されます。
プログラムIDは、重複するメンバーが存在する時は生成後置き換えられ、存在しない時は
新規に作成されます。
(ジェネレートプログラム内では、テンポラリーファイルとしてQTMPSRC@@というソースファイルを
QTEMPに作成し、いったんそこに指定されたIDのプログラム及びHTMLソースを作成します。
生成がエラーなく完了後にユーザー指定のライブラリ・ソースファイルに作成されたソースを
コピーし、メンバーの作成もしくは置換えを行っています。)
HTMLソースのメンバー名は、RPGプログラムのメンバー名(画面で指定された内容)と
同一になります。
また、プログラム名は、HTMLのタイトルとしても使用されます。
2.テンプレートの指定
テンプレート
テンプレートには、以下の3種があり、それぞれについて同数のソースメンバーが生成されます。
① 1レコード照会
TMP100
TMP100H1
TMP100H2
TMP100H3
② 複数レコード照会
TMP200
TMP2001
TMP200H1
TMP200H2
TMP200H3
TMP200H4
③ ポップアップウィンドウ TMP300
明細行数
②複数レコード照会、③ウィンドウ型照会を選択した場合、明細部の行数を指定します。
(①1レコード照会選択時は指定不可)
42
3.データベースの指定
データベースID/ライブラリ
生成するプログラムで使用するデータベースファイル・ライブラリを1つ指定します。
ライブラリの指定には、*LIBLは使用できません。
データベースファイルには、物理ファイル・論理ファイルいずれも指定できます。
データベースファイルにはキーフィールドが必要です。(キーなしではエラー)
キーフィールドがユニークキーを含まない場合、プログラムの生成は行われますが、
生成されたプログラムは正しく動作しません。
また、データベースフィールドが88を超える場合、88番目以降のフィールドは無視されます。
データベースPREFIX
RPGプログラム内で使用するデータベースフィールドのPREFIX2文字を指定します。
(1文字は不可)
また、PREFIXやプログラム内で使用するワークフィールドを‘W@’+フィールドIDという形で
作成するため、データベースのフィールドIDは8文字以内である必要があります。
43
② ヘッダー部情報入力
1.①1レコード照会、③ポップアップウィンドウ を選択した場合
(a) キー入力部フィールドの選定、表示順の指定
基本情報入力で指定したデータベースファイルのキーフィールドが一覧表示されます。
SEQの欄にユニークキーとなるフィールドを含む必要なフィールドを選択し、
表示順にナンバリングしてください。
指定の際は、枝番も使用できます。
例: SEQ 表示順
1
1
3
2
3
4
4
3
1
2
実行キーで指定した表示順に並び替えられます。
(ただし、エラーが残っている場合は、並び替えは行われませんので、まずエラーを修正してください。)
(b) 選択されたフィールドのラベル編集
web画面上に表示されるフィールドラベルを編集できます。(初期値はデータベース定義値)
ただし、ラベルをブランクにすることはできません。
ブランクにすると、データベースに定義されているフィールドラベルがセットされます。
(c) 数字フィールドの場合、編集コード
数値フィールド(属性P・Sのみ)の内容をweb画面上に表示する際の編集コードを指定できます。
P(パック10進数)、S(ゾーン10進数)以外の数値属性については対応していません。
2.②複数レコード照会 を選択した場合
(a) キー入力部フィールドの選定、表示順の指定
基本情報入力で指定したデータベースファイルの全フィールドが一覧表示されます。
明細に表示するレコードを選択するための条件とするフィールドを指定してください。
選択するフィールドは、キーフィールドである必要はありません。
指定方法については、上記(a)と同様です。
(b) 選択されたフィールドのラベル編集
(c) 数字フィールドの場合、編集コード
いずれも、指定方法については上記と同様です。
44
③ 明細部情報入力
1.①1レコード照会 を選択した場合
(a) 明細部フィールドの選定、表示順の指定
基本情報入力で指定したデータベースファイルのキーフィールドを除く全フィールドが一覧表示されます。
SEQの欄にユニークキーとなるフィールドを含む必要なフィールドを選択し、
表示順にナンバリングしてください。
指定の際は、枝番も使用できます。
例: SEQ 表示順
1
1
3
2
3
4
4
3
1
2
実行キーで指定した表示順に並び替えられます。
(ただし、エラーが残っている場合は、並び替えは行われませんので、まずエラーを修正してください。)
(b) 選択されたフィールドのラベル編集
web画面上に表示されるフィールドラベルを編集できます。
初期値はヘッダー部情報入力画面でラベルを編集した場合は、キー部と同値が、
編集していない場合はデータベース定義値がセットされます。
ラベルをブランクにすることはできません。
ブランクにすると、データベースに定義されているフィールドラベルがセットされます。
(c) 数字フィールドの場合、編集コード
数値フィールド(属性P・Sのみ)の内容をweb画面上に表示する際の編集コードを指定できます。
P(パック10進数)、S(ゾーン10進数)以外の数値属性については対応していません。
2.②複数レコード照会、③ウィンドウ型照会 を選択した場合
(a) 明細部フィールドの選定、表示順の指定
基本情報入力で指定したデータベースファイルの全フィールドが一覧表示されます。
明細に表示するレコードを選択するための条件とするフィールドを指定してください。
選択するフィールドは、キーフィールドである必要はありません。
指定方法については、上記(a)と同様です。
(b) 選択されたフィールドのラベル編集
(c) 数字フィールドの場合、編集コード
いずれも、指定方法については上記と同様です。
45
④ 実行確認画面
すべての指定が完了すると実行確認画面が表示されます。
実行確認=‘Y’を入力+実行キーで生成が開始されます。
なお、この時点でも生成するRPGプログラム/HTMLソースメンバーの存在チェックを行い、
プログラム・HTMLのどれか1つでも既存であった場合は、その旨の確認メッセージが表示されます。
46
⑤ その他注意事項
1.データベースファイルのキーフィールドについて
画面上で選択するキーフィールドは、あくまでもweb画面に表示するためのキーフィールドの指定と
表示順の指定です。
ジェネレートプログラムでは、指定されたデータベースのキー順とキーフィールドすべてを
レコードを特定するためのユニークキーとして扱い、プログラムを生成します。
(それが実際にユニークキーであるかどうかをプログラム内で判別することができないため)
従って、もし、指定されたデータベースファイルにユニークキー以外にもキーが指定されている場合、
すべてのキーフィールドを対象にレコードを特定するためのロジックを作成します。
(たとえば、指定したデータベースのユニークキーが商品コードで、キーフィールドとしては
登録日・商品コードの場合、ヘッダー部情報入力で登録日のみを選択しても
プログラムは商品コード・登録日をキーとして生成されます。)
2.ジェネレータのデータベース情報取得能力の限界について
データベースから取得する情報のうち、フィールド情報についてはフィールド数88までと
限定されています。
従って、指定されたデータベースファイルのフィールド数が88を超える場合、
89番目以降のフィールドは無視されます。
また、89番目以降の無視されるフィールドの中にキーフィールドが含まれる場合、
そのフィールドはキーフィールドとしても無視されてしまいますのでご注意ください。
3.ポップアップウィンドウの戻り値について
ウィンドウ型照会の場合、ラジオボタンをクリックすることによって、値を呼び出し元PGMに
返すようにコーディングされています。
返す値は、指定されたデータベースファイルのキーフィールドの内容です。
(キーが年月・得意先コード・商品コードならば、キー情報入力画面で選択した値にかかわらず
年月・得意先コード・商品コードを返すように生成されます。)
4.ネーミングの制限
プログラムID
HTMLソースファイルIDを「プログラムID + ’H’ + 連番(1桁の数字)」
として作成するため、プログラムIDは8桁以内で設定してください。
47
3−2.#IWCMB (コンボボックス作成)
ウェブアプリケーションにて以下のような表現をさせたい場合、
<SELECT> タグを使用しますが、#IWCMB を使用することでその部分の記述を楽に作成することが出来ます。
← この部分
以下のように使用します。
CALLB
PARM
PARM
PARM
PARM
PARM
'#IWCMB '
P_STS
P_NAM
P_VAL
P_ITM
P_SEL
1
20
10
100
1
上から順に
P_STS ・・・ ステータス。値により処理が変わります。
‘1’ ー 開始。コンボボックスの開始タグを書き出すので、最初に必ずセットしてください。
‘9’ ー 終了。終了タグを書き出すので、最終セットの時に必ずセットしてください。
P_NAM ・・・ 名前。コンボボックスの名称。
P_VAL ・・・ 値。CGIプログラムに渡される値。
P_ITM ・・・ 表示項目。ブラウザーで表示される値。
P_SEL ・・・ 初期表示区分。デフォルト表示させたい値の場合、このパラメーターに
‘1’をセットする。
48
実際ユーザープログラムで使用すると、以下のようなコーディングになると思います。
(例)ファイルを読んでその内容をコンボボックスに出力
P_VALにはコードをセットし、P_ITMには名称をセット。
2レコード目のデータをデフォルト表示とする。
C
C
*
C
C
C
C
C
DO
READ
*HIVAL
FILE
I
MOVEL
MOVEL
MOVEL
MOVEL
MOVEL
*BLANK
*BLANK
*BLANK
*BLANK
*BLANK
P_STS
P_NAM
P_VAL
P_ITM
P_SEL
IF
EVAL
EVAL
ENDIF
*IN90=*OFF
P_VAL = %TRIM(XXXXX)
P_ITM = %TRIM(XXXXX)
90
*
C
C
C
C
*
C
SELECT
*タグ終了
C
C
WHEN
MOVEL
*IN90
'9'
WHEN
MOVEL
EVAL
i = 1
'1'
P_STS
P_NAM = ‘XXXXXX’
WHEN
MOVEL
ENDSL
i = 2
'1'
CALLB
PARM
PARM
PARM
PARM
PARM
'#IWCMB '
P_STS
*タグ開始
C
C
C
*デフォルト表示
C
C
C
P_SEL
*
C
C
C
C
C
C
P_STS
P_NAM
P_VAL
P_ITM
P_SEL
1
20
100
100
1
*
C
90
LEAVE
*
C
ENDDO
尚、#IWCMBの中で標準出力しているので、このロジックの前でコンボボックスの前の
HTMLを標準出力する必要があります。
49
3−3.UPTOPFC(ファイルをQSYSへアップロード)
i-web RPGX のアップロードサービスプログラムを使用して、
AS400のQSYSへアップロードが可能です。
使用方法
ブラウザに以下のURLを入力して下さい。xxxxxxxxxxx の部分はTCP/IPドメインを入力して下さい。
http://xxxxxxxxxxx/RPGX/ULTOPFC.PGM
上記の画面が出力されます。
注)ULTOPFCを使用するためには、コマンド WRKHTTPCFGにて
EXEC 文を登録する必要があります。
登録方法は、P.9 『9.HTTP構成の変更』を参照してください。
50
送信元の設定を行います。
① PCファイルのパスを入力します。参照ボタンでファイルの選択が可能です。
送信先(AS)の設定を行います。
① ファイル:既存もしくは新規の名前を入力してください。
ソースファイルの場合は、アップロード用のソースファイルを予め用意しておきます。
例)
コマンド:CRTSRCPF FILE(TESTLIB/QUPLDSRC) RCDLEN(240) IGCDTA(*YES)
TEXT(‘ アップロード用ソースファイル ’)
ファイルを作成したら、WEKOBJ ライブラリー名/ファイル名 を実行します。
オプション‘2’で権限の編集を行います。
ユーザー‘*PUBLIC’のオブジェクト権を‘*ALL’に変更してください。
HTTPサーバーの権限は最小限なので、既存のソースファイルへアップロードをかけようとしても、
うまくいきません。予めアップロード用のソースファイルを作成しておく必要があります。
② ライブラリー:既存のライブラリー名を入力して下さい。
③ メンバー:既存もしくは新規の名前を入力してください。データの場合、ファイル名と同じ名前の場合は
‘*FIRST’でもかまいません。
④ テキスト:テキストをここで入力します。
⑤ ソース仕様タイプ:ソースとしてアップロードする場合、入力して下さい。
例)TXT,HTM
⑥ ファイル形式:ソース、データどちらかを選択します。
データの場合は、AS側には5000バイトのレコード長でファイルが作成されます。
それ以上の長さになるデータがあった場合は、以降のデータが無視されます。 ⑦ データの置換え:既存のデータの後ろから追加したい場合は、‘追加’、置換の場合は
‘置換’を選択してください。新規作成の場合は、どちらで選択しても作成されます。
⑧ コマンド入力:CALLやCRTSRCPFなどのコマンドが入力できます。
例)CALL TEST01 (‘001’ ‘XXXX’ ‘AAAA’)
HTTPサーバーの機能上、実行できないコマンドもあります。ご了承ください。
⑨ 入力が完了したら、『送信』ボタンを押してください。アップロードが開始されます。
アップロードが終了したら、完了画面が表示されます。
51
Ⅳ.サンプルプログラム
i−webRPGXのサンプルを入れてあるので、参考にして下さい。
得意先照会がサンプルとしてQSMPSRCに入っています。コピーして使用してください。
1.得意先照会 処理内容
キー入力画面
1.得意先コードを入力します。
2.実行ボタンを押します。
3.データがあった場合は、名称、住所が表示されます。
データがなかった場合は、エラー画面が表示されます。
明細画面
エラー画面
52
2.i-web RPGX を使用してCGIプログラムを作成
2−1.キー画面プログラム(SP0010)
* 得意先マスター
FTOKUF
IF E
K DISK
PREFIX(TK)
**************************************************************************
* 得意先マスターの構成
*
TOKCD
10A
COLHDG(' コード ')
*
TOKNAM
30O
COLHDG(' 得意先名 ')
*
TOKADR
30O
COLHDG(' 得意先住所 ')
*
* キーは TOKCOD
**************************************************************************
* データ構造(DS)
**************************************************************************
*<< DSP CONTROLL>>
D cur_dsp
S
3
INZ
**************************************************************************
* WEBツールの定義
**************************************************************************
*<< 初期処理 >>
D #IWIN
PR
1
EXTPROC('#IWIN')
D
10
VALUE
D sts_in
S
1
D pgm_id
S
10
INZ('SP0010')
ここで、i-web RPGX 関数の定義を
*<< 変数値獲得 >>
記述しています。
D #IWVAL
PR
1000
EXTPROC('#IWVAL')
D
32
const
使用するのは、
D get_val
S
1000
INZ
*<< 変数値セット >>
#IWIN (入力変数の取込)
D #IWSET
PR
1
EXTPROC('#IWSET')
#IWVAL (セッション変数ファイルからの変数値取込)
D
32
const
#IWSET (セッション変数ファイルへの変数値セット)
D
1000
value
#IWOUT (HTML ファイル書き出し)
D sts_set
S
1
D set_val
S
1000
INZ
です。
*<< 出力処理 >>
D #IWOUT
PR
1
EXTPROC('#IWOUT')
D
10
CONST
D
10
CONST
D
10
VALUE
D sts_out
S
1
D out_mbr
S
10
INZ
#IWOUT で使用する、HTMLのメンバー名を
*
ここで記述しています。
D out_mbr1
S
10
INZ('SP0010H')
D out_mbr2
S
10
INZ('SP0020H')
SP0010H (キー入力画面)
D out_mbr3
S
10
INZ('SP9999H')
SP0020H (明細画面)
SP9999H (エラー画面)
53
キー画面プログラム(SP0010)
**************************************************************************
* メイン
**************************************************************************
* ◆初期処理◆
C
EVAL
sts_in = #IWIN(pgm_id)
* 画面モードの獲得
C
EVAL
cur_dsp = #IWVAL('cur_dsp')
* 画面モード初期値 = 'TOP'
C
IF
cur_dsp = *BLANK
C
EVAL
cur_dsp ='TOP'
C
ENDIF
*
* ◆画面状況◆
C
SELECT
* キー画面標示
C
WHEN
cur_dsp ='TOP'
C
EVAL
out_mbr = out_mbr1
* 明細画面標示
C
WHEN
cur_dsp ='DTL'
* 得意先コード取得
C
CLEAR
W_TOKUCD
10
C
EVAL
W_TOKUCD = #IWVAL('TOKUCD')
* 得意先マスターより情報を取得
C
W_TOKUCD
CHAIN
TOKUFR
90
*
データがなかったらエラー画面表示
C
IF
*IN90 = *ON
C
EVAL
out_mbr = out_mbr3
*
データがあれば明細表示
C
ELSE
C
EVAL
out_mbr = out_mbr2
C
EVAL
set_val = TKTOKNAM
C
EVAL
sts_set = #IWSET('TOKUNM':set_val)
C
EVAL
set_val = TKTOKADR
C
EVAL
sts_set = #IWSET('ADR':set_val)
C
ENDIF
C
ENDSL
*
* ◆標準出力◆
C
EVAL
sts_out=#IWOUT(‘CGILIB':'QHTMSRC':out_mbr)
* ◆終了◆
C
SETON
LR
C
RETURN
ここで、入力値を取得、またはセッション№・
シーケンス№を採番します。
出力画面のコントロールを行っています。
値によって処理が変わります。
ここで得意先コードを取得します。
パラメーターに‘TOKUCD’とセットします。
W_TOKUCDに変数値がセットされます。
ここで出力データをセッション変数ファイル
に書き出します。
指定のHTMLファイルを標準出力します。
54
必ず記述してください
この後にはブランク行を入れてください。
2−2.キー画面HTMLソース( SP0010H)
CONTENT-TYPE: TEXT/HTML
<HTML>
<HEAD>
<TITLE> 得意先照会 by i-web RPGX</TITLE>
</HEAD>
実際のブラウザーのソースにはこの行に
『<INPUT TYPE=“HIDDEN” NAME=“SESSION”
VALUE=“000000001”><INPUT TYPE=“HIDDEN”
NAME=“SEQNO” VALUE=“0001”>』
<!------ タイトルの表示 -->
のタグが自動で入ってきます。
<CENTER>
ここで、セッション№とシーケンス№をセット
<TABLE border="3">
しています。
<TR><TD bgcolor="navy">
<FORM> タグがあれば、必ず追加されます。
<P align="center"><B><FONT size="4" color="White"> 得意先照会 </FONT></B></P>
</TD></TR>
</TABLE>
</CENTER><BR><BR>
<BODY bgcolor="lightGrey">
<FORM name="FORM1" method="GET" action="SP0010.PGM">
<!------- ボディの表示 -->
<CENTER>
<TABLE border="0">
<TR>
<TD><FONT size="2"> 得意先 </TD>
<TD><INPUT type="TEXT" name="TOKUCD" maxlength="6"></TD>
</TR>
</TABLE>
</CENTER><BR><BR>
<!------- 表示情報 -->
<INPUT type="HIDDEN" name="cur_dsp" value="DTL">
<!------------------->
<CENTER>
<TABLE border="0">
<TR><TD><INPUT type="SUBMIT" value=" 実行
</TABLE>
</CENTER>
<FORM> ∼ </FORM> の間にある <INPUT>タグで
指定したフィールドの変数値が渡されます。
ここでは、“TOKUCD”の値が渡されます。
(イメージ:TOKUCD=入力した値)
ここで、表示情報を設定しています。
"></TD></TR>
</FORM>
</BODY>
</HTML>
55
2−3.明細画面HTMLソース( SP0020H)
CONTENT-TYPE: TEXT/HTML
<HTML>
<HEAD>
<TITLE> 得意先照会 by i-web RPGX</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"> 得 意 先 </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 が
#IWSETで変数値をセットし、
</BODY>
置換処理が行われるフィールドです。
置換処理が行われる範囲は、
</HTML>
<!-- FLDREP START -->と<!-- FLDREP END --> の
間です。置換対象は &&変数名 で記述します。
例えば…
&&TOKUNM は (株)○○システム
&&ADR
は ○○市○区2−○−3
実際は上記のように置き換わります。
<!-- FLDREP START -->と<!-- FLDREP END -->は
WEBのHTML文には記述されません。
56
2−4.エラー画面HTMLソース(SP9999H)
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><BR>
<!------- ボディの表示 -->
<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>
57