WEB最大表示 : 仕入先マスター登録(WSIREMT)
なるべくたくさんの項目を表示するWEB最大表示の適用業務を作成します。
WEB PYTHON の作成 (CRTWEBAPP)
選択項目を入力して,実行キーを押してください。
PYTHON プログラム . . . . . . . SIREMT 拡張子 .py
ディレクトリー . . . . . . . *PYTHON
...
ファイル . . . . . . . . . . . SIREMT 名前
ライブラリー . . . . . . . . QTRFIL 名前 , *LIBL, *CURLIB
HTML ディレクトリー . . . . . . '/PYTHON.400/PROJECT'
生成オプション . . . . . . . . *NONE *NONE, *ADD, *REPLACE
[解説]
項目数の多いデータ・ベースに対して
できるだけ最大表示にするのがこの「最大表示」です。
サンプル・ライブラリー(QTRFIL)の仕入先マスター(SIREMT)を使って
最大表示のWEB適用業務を作ることができます。
[パラメータの説明]
PYTHON プログラム. . . . . . . . . . . . . .作成するPythonプログラムの名前とそのソースを
ディレクトリー 保管するディレクトリー名を指定します。
*PYTHON = /PYTHON/PROJECT/(PYTHON名)
としてPYTHON名のディレクトリーも自動生成されます。
十分精通するまではこの指定のままで生成してください。
ファイル. . . . . . . . . . . . . . . . . . このPythonが扱う主たるデタ・ベースの名前と
ライブラリー ライブラリー名を指定してください。
HTML ディレクトリー . . . . . . . . . . . . このPythonが使用するHTMLテンプレートを保管する
ディレクトリーの名前を指定します。
生成オプション. . . . . . . . . . . . . . . *NONE以外の:ADD(=初期作成)または *REPLACE(=置換え)を
指定してください。*SADDを指定したときは既存の同じ名前の
Pythonが存在しているか検査され存在していれば
エラーとなります。
初めてこのPythonの名前で作成するときは*ADDを
指定してください。
[基本情報の定義]
基本情報の定義
ジョブ・タイトル 仕入先マスター登録
画面様式 2 1= 単票型式 2= 最大表示
3= 一覧表 4= 伝票型式
監査報告書 Y Y=YES, N=NO
数値の編集 Y Y=YES, N=NO
画面サイズ
桁 132 80, 132
行 27 24, 27
[解説]
ジョブ・タイトル. . . . . . . . : この適用業務のタイトルを入力してください。
このタイトルは適用業務画面の見出しとして使われます。
画面様式. . . . . . . . . . . . : 摘要業務のタイプを指定します。
1=単票形式 : 1レコード1画面1フィールド/行のDFUのような
基本型式の画面入力の適用業務を作成します。
2=最大表示 : 単票形式ですが1画面にフィールドをできるだけ
多く表示する画面型式の適用業務を作成します。
3=一覧表形式: SFLレコードによる一覧表形式の適用業務画面を
作成します。
4=伝票型式: 日本独自の伝票入力型の適用業務を作成します。
監査報告書 . . . . . . . . . . : 監査報告書とはDFUのように入出力の結果のモニター・リストで
更新の結果をQUERYによって印刷出力します。
数値の編集. . . . . . . . . . . :数値を編集するかどうかを指定します。
画面サイズ. . . . . . . . . . . :作成する表示装置ファイル(DSPF)のサイズを指定します。
現在、使用中の画面サイズが初期値として表示されます。
WEB作成ですのでこの値を無視してください。
レコード様式の処理
ファイル SIREMT ライブラリー QTRFIL
オプションを入力して、実行キーを押してください
1= 指定
OPT 様式 定義 記述
1 DSPHEAD N 初期画面レコード
1 DSPDTA N 明細画面レコード
1 ENDOPT N 終了画面
解説
画面芳樹を生成するための画面レコード様式の候補がすべて
表示されますのでそれぞれの画面様式に対するフィールドの定義を
行う必要があります。
選択欄(OPT)には初期値として1が既に表示されていますので
このままで実行キーを押すと最初のレコード:DSPHEADが選択されます。
このままで実行キーを押してください。
フィールドの選択および順序付け
ファイル SIREMT ライブラリー QTRFIL
レコード様式 SIREMTR テキスト 初期画面レコード
フィールドとその順序を選択するか,すべてを選択する F21 キーを押して
実行キーを押してください。
順序 フィールド 属性 長さ タイプ 記述
10 SRCODE キー 10 文字 仕入先コード
[解説]
選択したDSPHEADレコードに表示するフィールドの選択が要求されます。
この初期画面DSPHEADでは指定したデータ・ベース:QTRFIL/SIREMTの
アクセス・パスすなわちキー・フィールドが表示されて
順序選択の欄には初期値として10が既に表示されています。
このままで実行キーを押してください。
レコード様式の処理
ファイル SIREMT ライブラリー QTRFIL
オプションを入力して、実行キーを押してください
1= 指定
OPT 様式 定義 記述
DSPHEAD Y 初期画面レコード
1 DSPDTA N 明細画面レコード
1 ENDOPT N 終了画面
[解説]
表示は元のレコード選択の画面に戻りますが
今、処理したDSPHEADレコードの選択OPT=1は消えて
次の明細画面: DSPDTA に OPT=1 が残っていますので
続けてこのままで実行キーを押すと 明細画面: DSPDTAが
選択されます。
フィールドの選択および順序付け
ファイル SIREMT ライブラリー QTRFIL
レコード様式 SIREMTR テキスト 明細画面レコード
フィールドとその順序を選択するか,すべてを選択する F21 キーを押して
実行キーを押してください。
順序 フィールド 属性 長さ タイプ 記述
0 SRCODE キー 4 文字 コード
0 SRNMK 32 文字 カナ名
0 SRNMJ 32 漢字 OPEN 仕入先名 1
0 SRNMJ2 32 漢字 OPEN 仕入先名 2
0 SRNM 12 漢字 OPEN 略名
0 SRSHOT 5 文字 略号
0 SRTEL 15 文字 TEL
0 SRFAX 15 文字 FAX
0 SFAX 2 文字 FAX短縮
0 SRFORD 1 文字 FAX注文
続く ..
F3= 終了 F15= 他のデータ・ベースの結合 F12= 取消し
F21= すべての選択
[解説]
明細画面DSPDTAの選択候補としてデータ・ベース: QTRFIL/SHOHINのすべての
フィールドが表示されます。
「F21= すべての選択」キーを押してすべてのフィールドを詮索してください。
フィールドの選択および順序付け
ファイル SIREMT ライブラリー QTRFIL
レコード様式 SIREMTR テキスト 明細画面レコード
フィールドとその順序を選択するか,すべてを選択する F21 キーを押して
実行キーを押してください。
順序 フィールド 属性 長さ タイプ 記述
10 SRCODE キー 4 文字 コード
20 SRNMK 32 文字 カナ名
30 SRNMJ 32 漢字 OPEN 仕入先名 1
40 SRNMJ2 32 漢字 OPEN 仕入先名 2
50 SRNM 12 漢字 OPEN 略名
60 SRSHOT 5 文字 略号
70 SRTEL 15 文字 TEL
80 SRFAX 15 文字 FAX
90 SFAX 2 文字 FAX短縮
100 SRFORD 1 文字 FAX注文
続く ..
F3= 終了 F15= 他のデータ・ベースの結合 F12= 取消し
F21= すべての選択
[解説]
仕入先マスターには結合ファイルは必要ありませんので
このままで実行キーを押します。
レコード様式の処理
ファイル SHOHIN ライブラリー QTRFIL
オプションを入力して、実行キーを押してください
1= 指定
OPT 様式 定義 記述
DSPHEAD Y 初期画面レコード
DSPDTA Y 明細画面レコード
1 ENDOPT N 終了画面
[解説]
表示はレコード様式の選択に戻り終了画面(ENDOPT)の選択だけが
残っていますのでこのままで実行キーを押してください。
終了画面
選択項目を入力して、実行キーを押してください
終了画面を作成しますか ? Y Y=YES, N=NO
[解説]
終了画面は必要なのでこのままで実行キーを押します。
PYTHON プログラム定義の終了
選択項目を入力して、実行キーを押してください
プログラムの保管 Y Y=YES, N=NO
プログラムの実行 N Y=YES, N=NO
選択項目 Y=YES の場合
実行のタイプ 1 1= 変更 , 2= 表示
DDS ソースの保管 Y Y=YES, N=NO
PYTHON ソースの保管 Y Y=YES, N=NO
プログラムの保管 Y=YES の場合
PYTHON プログラム WSIREMT.PY 名前 *.PY
ディレクトリー /PYTHON.400/PROJECT/@SIREMT/@SIREMT.PY
権限 *LIBCRTAUT
テキスト 仕入先マスター登録
HTML ソースの保管 Y=YES の場合 名前, *LIBCRTAUT
HTML ディレクトリー /PYTHON.400/PROJECT
[解説]
最後にソースを生成する画面が表示されます。
プログラムの保管. . . . . . . . . . . .: Y=Pythonプログラムの保管を指示します。
プログラムの実行. . . . . . . . . . . .: 保管直後に実行するかどうかを指示します。
まだ慣れないうちは N としてください。
DDS ソースの保管 . . . . . . . . . . . : 表示装置ファイル(DSPF)のDDSソースの保管を指示します。
Yを指示してください。
PYTHON ソースの保管. . . . . . . . . . : PYTHONプログラム・ソースの保管を Yで応答してください。
PYTHON プログラム. . . . . . . . . . : 保管するPYTHONプログラムの名前を指示します。
拡張子.PYが必要です。
ディレクトリー. . . . . . . . . . . .: PYTHONを保管するIFSディリクトリーの名前を指示します。
/PYTHON.400/PROJECT/(PYTHOPN名)/(PYTHON名.PY)
の形式名にしてください。
PYTHONのプロジェクト(/PYTHON.400/PROJECT)の配下に
PYTHON名と同じ名前のプロジェトクが作成されて
その配下にPYTHONプログラム(PYTHON名.PY)が
保管されます。
プロジェクトの配下にはHTMテンプレートも保管される
場合があります。
HTML ソースの保管 . . . . . . . . . . .: HTMLテンプレートを保管するディレクトリーの名前です。
必ずPYTHONディレクトリーと同じ場所を指定してください。
実行キーを押すとHTMLソースの作成に続いて
PYTHONプログラムも指定した場所に保管されます。
PYTHONはコンパイルは必要ありません。
「WSIREMT.PY を保管しました 」
のような完了メッセージが表示されればWizard生成は成功です。
実行は「11. PYTHON データの表示(DSPPTN)」や
「12. PYTHON データの変更(CHGPTN)」によって実行することができます。
[生成されたPYTHONソースは?]
どのようなPYTHONソースが生成されたのか気になるところですが
ライブラリー: PYTHON.400 がライブラリー・リストに存在していれば
コマンド入力画面で
EDTPTN (PYTHON名)
だけでPYTHONソースの内容を見ることができます。
PYTHONを実行するHTMLソース(HTM)は
EDTPTN PYTHON(PYTHON名) OPTION(HTM)
でオープンすることができます。
DSPPTN WSIREMT
で実行してみると
のように初期画面: DSPHEAD が表示されるので
仕入先コード: 1000 を入力して実行すると次のように
明細画面が表示されます。
[解説]
仕入先マスターには項目数が多いので最大表示はされています。
表示がHTMLなので上下左右にも制限なくデータを表示することができます。
次に EDISRC WSIREMT で Pythonソースを次のように表示することが
できます。
import sys
import os
import re
import ibm_db2
import bottle2
import urllib.parse
dspmod = sys.argv[1]
add_count = 0
chg_count = 0
dlt_count = 0
#*************************************************************#
@bottle2.route('/init', method=["GET", "POST"])
def init():
#*************************************************************#
# 初期画面の HTML を表示する。
# パラメータを受け取る
params = bottle2.request.params.decode()
# パラメータがあれば初期画面の HTML にセットする。
values = [{
'SRCODE': params.get('SRCODE', ''),
}]
# ブラウザに DSPHEAD.HTM を出力する。
return bottle2.template('DSPHEAD.HTM', {
'dspmod': dspmod,
'values': values,
'msg': params.get('MSG', ''),
})
#*************************************************************#
@bottle2.route('/input', method=["GET", "POST"]) # 入力切替
def input():
#*************************************************************#
# ブラウザからの入力値を受け取る。
params = bottle2.request.query.decode()
# 白紙の明細画面の HTML を表示する
return bottle2.template('DSPDTA.HTM', {
'dspmod': 'INPPTN',
'values': [{}],
})
#*************************************************************#
@bottle2.route('/query', method=["GET"]) # データ検索
def query():
#*************************************************************#
# DB2 に接続する。
with ibm_db2.connected() as conn:
# ブラウザからの入力値を受け取る。
params = bottle2.request.query.decode()
# SQL を組み立てる。
sql = '''
SELECT T01.SRCODE
,T01.SRNMK
,T01.SRNMJ
,T01.SRNMJ2
,T01.SRNM
,T01.SRSHOT
,T01.SRTEL
,T01.SRFAX
,T01.SFAX
,T01.SRFORD
,T01.SRYOSI
:
FROM QTRFIL/SIREMT T01
WHERE T01.SRCODE = ?
ORDER BY T01.SRCODE
FETCH FIRST 1 ROW ONLY :
'''
stmt = ibm_db2.prepare(conn, sql);
ibm_db2.bind_param(stmt, 1, params['SRCODE']) # HEDKEY を SQL にセットする。
# SQL を実行する。
ibm_db2.execute(stmt)
# 結果のレコードを取得する。
values = []
row = ibm_db2.fetch_assoc(stmt)
while row != False:
values.append(row)
row = ibm_db2.fetch_assoc(stmt)
# レコードが存在しない場合
if len(values) == 0:
if dspmod == 'DSPPTN':
if dspmod == 'DSPPTN':
# DSPPTN の場合は初期画面に戻ってメッセージを表示する
values = [{
'SRCODE': params.get('SRCODE', ''),
}]
return bottle2.template('DSPHEAD.HTM', {
'dspmod': dspmod,
'values': values,
'msg': ' レコードが見つかりません ',
})
else:
# CHGPTN の場合は入力画面を表示する。
values = [{
'SRCODE': params.get('SRCODE', ''),
}]
return bottle2.template('DSPDTA.HTM', {
'dspmod': 'INPPTN',
'values': values,
:
[解説]
WEB適用業務の場合のデータ・ベース・アクセスは
SQL命令によってDB2/400データ・ベースをアクセスして
結果のレコードをFetch命令によって取り出します。
SQL文の作成は
# SQL を組み立てる。
sql = '''
SELECT T01.SRCODE
,T01.SRNMK
,T01.SRNMJ
,T01.SRNMJ2
,T01.SRNM
,T01.SRSHOT
,T01.SRTEL
,T01.SRFAX
,T01.SFAX
,T01.SRFORD
,T01.SRYOSI
:
FROM QTRFIL/SIREMT T01
WHERE T01.SRCODE = ?
ORDER BY T01.SRCODE
で宣言されています。
SQL文でアクセスしていますのでIBM iのRPG命令を知らない方でも
容易にSQLによるデータ・ベース・アクセスとして
Pythonプログラムを理解することができます。
またPythonはbottleフレーム・ワークというHTTPサーバーを
持っていますので事前にApcheなどのHTTPサーバーを起動させて
準備しておく必要もありません。
# HTTP サーバーを起動する。 bottle2.run(host='', port=8080, quiet=True)
によってbottle2というフレーム・ワークによって
初期画面HTMLが表示されます。
bottle2 とは Pythonで用意されているbottleフレーム・ワークを
Python.400フレーム・ワークで拡張しはたもので
ブラウザが自動的に起動されるように機能を拡張したものです。
その他のこのPYTHONプログラムの詳細はこちらを参照してください。