Valenceに付属しているテンプレートのRPGプログラムはCCSIDが5035で作成されています。
RPGプログラムを作成する際は、エミュレータのホストコードページを939、CCSIDを5035に設定後に編集してください。コンパイル時には、コンパイルオプションの設定が必要となります。RPG作成時の注意点と、作成したRPGプログラムをデバッグする方法についてご紹介します。
Valence RPG作成時の注意点
ValenceのRPGテンプレートファイルはCCSID5035で作成されています。RPGプログラム作成時にはいくつかの注意点が存在します。
IBMi接続時のジョブ設定
ValenceのRPGテンプレートファイルはCCSID5035で作成されています。エミューレータでIBMi接続時 ホストコードページを939 に設定して接続してください。
ユーザープロファイルのCCSID(コード化文字セットID)が*SYSVALに設定されている場合、ログイン後ジョブのCCSIDはシステム値のQCCSIDが適用されます。
日本環境のIBMiでシステム値のQCCSIDが 65535または5026の場合、接続後のジョブはCCSID5026が設定されます。そのため、CHGJOBコマンドでCCSIDを5035に変更してください。
CHGJOB CCSID(5035)
なお、IBMiのシステム値 QCCSIDの確認方法は以下のコマンドになります。
DSPSYSVAL SYSVAL(QCCSID)
テンプレートのメンバーファイルをコピー時の注意点
Valence AppBuilderのRPGプログラムテンプレートは VALENCE6/QRPGLESRC 物理ファイルのメンバーに格納されています。例えば、AppBuilderでボタンをクリック時に呼び出すRPGプログラムのテンプレートは QRPGLESRCのメンバー EXNABBTN です。このメンバーを任意のライブラリのソースファイルにコピーしてRPGプログラムを作成するのですが、コピー先ソースファイルのCCSIDは、5035の必要があります。
CCSID 5035のソースファイル作成
VALENCE6ライブラリに含まれるQRPGLESRCをコピーする、または、コマンドでソースファイル作成時、明示的にCCSID(5035)でソースファイルを作成します。CCSID5035 のソースファイルにメンバーをコピーしてください。
CRTSRCPF FILE(XXLIB/QRPGLESRC) RCDLEN(112) IGCDTA(*YES) CCSID(5035)
Valence6.2 以降のバージョンでの注意点
Valence6.2 以降のバージョンでは、AppBuilderで使用するRPGプログラムテンプレートファイル(QRPGLESRC)が完全な自由形式に変更されました。
自由形式のRPGプログラムはSEUで編集するとエラーが表示されてしまいます。
そのため、SEUを使用してRPGプログラムを開発する場合には、固定長形式混在のテンプレートをご使用ください。
固定長形式混在のテンプレートは、VALENCEライブラリ/QRPGLESRC2に格納されています。
QRPGLESRC2ファイルのCCSID値は37のため、ソースコードをコピーする際はQRPGLESRC2自体をコピーするのではなく、コマンドでソースファイルを作成後メンバーをコピーしてください。
例) VALENCE6/QRPGLESRC2(EXNABBTN01)を作成したXXLIB/QRPGLESRCにコピー
CPYSRCF FROMFILE(VALENCE6/QRPGLESRC2)
TOFILE(XXLIB/QRPGLESRC) FROMMBR(EXNABBTN01) TOMBR(EXNABBTN01)
コンパイルコマンドでの注意点
メンバーをコピーしてロジックを追加後、コンパイル時にはVALENCEライブラリをライブラリリストに追加してコンパイルコマンドを実行します。
ライブラリリストの追加
VALENCE6ライブラリを追加する場合は以下のコマンドになります。
追加するライブラリは、開発しているインスタンスによって変更ください。
もちろん、RPGプログラム内のF仕様書で外部ファイルを記述している場合は、外部ファイルが含まれるライブラリもライブラリリストに追加ください。
ADDLIBLE VALENCE6
※VALENCE6Tが開発環境の場合はVALENCE6Tをライブラリリストに含めてください。
コンパイルコマンド実行
AppBuilderのRPGプログラムテンプレートはソースに条件付きコンパイル・ディレクティブが含まれているため、コンパイル時に[RPG プリプロセッサー・オプション] (RPGPPOPT)へ[*LVL2]を設定する必要があります。
コンパイルコマンドの例は以下です。
CRTSQLRPGI OBJ(SMPLIB/BTN010) SRCFILE(SMPLIB/QRPGLESRC)
SRCMBR(BTN010) COMMIT(*NONE) OBJTYPE(*PGM)
RPGPPOPT(*LVL2) REPLACE(*YES)
デバッグができるようにRPGプログラムをコンパイルする場合、[DBGVIEW] オプションに[*SOURCE]を設定してください。
CRTSQLRPGI OBJ(SMPLIB/BTN010) SRCFILE(SMPLIB/QRPGLESRC)
SRCMBR(BTN010) COMMIT(*NONE) OBJTYPE(*PGM)
RPGPPOPT(*LVL2) REPLACE(*YES) DBGVIEW(*SOURCE)
Valence RPGのデバッグ方法
Valenceで実行されるRPGはWEBサーバーのCGIジョブ経由で実行されます。
Valenceジョブの確認方法
ジョブの一覧を表示するには、以下のコマンドを実行してください。
WRKACTJOB JOB(VALENCE6)
※VALENCE6の箇所は、開発しているインスタンス名に合わせてご変更ください。
例えば、VALENCE6Tで開発を行っている場合、WRKACTJOB JOB(VALENCE6T) となります。
処理で利用されるジョブは機能の列に [PGM-QZSRCGI]と記述されているジョブです。
ジョブは複数の同時アクセスに対応するため複数存在します。
Webサーバーは空いている、PGM-QZSRCGIのジョブに処理を割り当てていきます。
Valenceへのアクセス数が多く、同時にアクセスされてジョブが不足する場合には、PGM-QZSRCGIのジョブが新規に作成されていきます。
デバッグ手順
RPGプログラムのコンパイル
デバッグ対象のRPGプログラムは DBGVIEW オプションに*SOURCE を設定してコンパイルしている必要があります。 DBGVIEW オプションを設定せずにコンパイルしている場合は、再度RPGプログラムをコンパイルしてください。
ジョブ情報の確認
RPG実行時のジョブは機能の列に [PGM-QZSRCGI]と記述されているジョブです。通常、一番上にリストされているジョブが使用されるため、一番上に表示されているジョブへOPT5の指定をしてジョブ番号を取得してください。
バッチジョブのデバッグコマンド
Valenceジョブはバッチジョブデバッグコマンドの手法でデバッグします。
まず、STRSRVJOBコマンドを実行してください。
ジョブ番号777595をデバッグする場合は以下コマンドです。
確認したジョブ番号、ジョブ名に合わせて変更してください。
STRSRVJOB JOB(777595/QTMHHTTP/VALENCE6)
実行後、STRDBGコマンドでデバッグしたいRPGプログラムを指定します。
例えば、VAL60SMPライブラリのVAL010Bプログラムをデバッグする場合には以下になります。
STRDBG PGM(VAL60SMP/VLA010B) UPDPROD(*YES) OPMSRC(*YES)
STRDBGコマンドを実行するとソースコードが表示されるので、F6キーでブレイクポイントを設定してF3キーで終了してください。
アプリの実行
AppBuilderアプリから、RPGプログラムを呼び出してください。RPGプログラムが実行されると、エミュレータ画面では、ブレークポイントで実行が停止されます。後のデバッグ手順は通常のRPGプログラムと同様です。F11キーでフィールド値の確認、F10キーでステップ実行ができます。
以上で「RPG作成時の注意点とデバッグ方法」は終了です。