Pythonで DSPF(=表示装置ファイル)をインターフェースとする
5250アプリケーションを開発することができます。
▼単票型アプリケーションの事例

▼SFLレコード型アプリケーションの事例

import sys
from as400 import *
CallType(sys.argv[1])
Open("QTROBJ/@SHOINQ", "DSPF") # 表示装置ファイルをオープン
Open("QTRFIL/SHOHIN", "FILE") # 商品マスターファイル
Open("QTRFIL/HINSHU", "FILE") # 品種マスターファイル
while True:
DSPHEAD.Exfmt()
DSPHEAD.SHCODE.SetLL(SHOHIN)
SFCTL = 'SFCTL01'
DSPEND = 'DSPEND01'
while True:
ENDRRN = TOPRRN + SFLPAG - 1
for RRN1 in range(TOPRRN, ENDRRN + 1):
if SHOHIN.Read() == EOF:
break
SFREC01.SHCODE = SHOHINR.SHCODE
SFREC01.SHNAME = SHOHINR.SHNAME
SFREC01.SHTANK = SHOHINR.SHTANK
SFREC01.SHSCOD = SHOHINR.SHSCOD
SHOHINR.SHSCOD.Chain(HINSHU) # 品種マスターファイル
SFREC01.HNSNAM = HINSHUR.HNSNAM
SFREC01.SFLWrite(RRN1)
DSPEND01.Write()
SFCTL01.Exfmt() # SFL コントロール/レコードを表示
しかも実行する演算命令はRPG入出力を模したものではなく、実際にILE-RPGが実行しているものと同じAPIを使用して入出力を行います。
しかも実行する演算命令はRPG入出力を模したものではなく
だから信頼性高く安全にレコード・レベルの更新をPythonで実現することができます。
数百万レコードの大量データ・ベースの中からRPG命令と同じように瞬時に求めるレコードを
Python.400が提供するAS400エンジン(*SRVPGM)はプログラマーに
代わって多くのことを代行して行います。
例えば
SFLCTL01.Exfmt()
と書くだけでExfmtの中では
・F3=終了
・F12=前画面
・ROLL UP/DOWN
の処理がプログラマーに代わって代行して実行されます。
多くの RPGプログラマーでも苦手な ROLL UP/DOWN処理を行うので高い品質のプログラムが
少ないソースで実現することができます。
例えば F3=終了はSAAの基準で定められておりほとんどの場合がF3=終了を記述しなければならないのに
毎回、義務のように繰り返し同じことを記述していたのです。
Python.400ではこのような無駄をなくして内部処理としました。
これがPython.400の代行処理です。
今までのRPG/COBOLでは
何でもできるが何でもすべて自分でやらなければいけない。
ということだったのです。
もちろん代行処理に任せるのではなく明示的にコーディングすれば
それが優先されて実行されます。
代行処理の導入によってプログラマーは
・実行する本質の機能だけを書けばよい
・少ないソースで見やすくバグの少ない高品質のプログラムが可能
・初心者でも実用的なプログラムの開発が可能
という利点に恵まれます。
Python.400の記述では従来のRPG/COBOLによる記述をそのまま踏襲するのではなく
最新のオープン系開発言語としてオブジェクト指向にシフトしています。
RPGも間接的でわかりにくくしていたキー・リストを廃止して直接的な記述ができるようにしました。
他の人が見てもひと目で演算の内容を理解できるソースになります。URKING = SURYO * TANKAこのようなフィールド名だけの記述の演算では どのファイルに対してどのような処理をしているのか全くわかりません。
URIRCDR.URKING = DSPDTA.SURYO * DSPDTA.TANKA
キー・リストもRPGの理解を難しくしていた要素のひとつです。
KYLIST KLIST
KFLD JUCNO
KFLD JUGYO
:
KYLIST CHAIN FILE 99
キー・リストの記述と CHAIN演算は離れたところに
(SFREC01.JUCNO + SFREC01.GYO) Chain(FILE)このように キーリストを使わずに直接、キーの内容を記述すれば 処理の内容が直観的によくわかるようになりました。
Pythonプログラマーが自然に理解できるようなソースになります。