会社で、メールでAS/400のチップスを出しています。そこから、抜粋です。まあ、多くの人に共有してもらいましょう。
WRKACTJOBの自動再表示
何かジョブの動きを監視してしていたくて、ずーっと、WRKACTJOBでF5をちょんちょんと押しつづけたことはありませんか?実は、WRKACTJOBでは、自動的に再表示できるオプションがあります。
実行方法
- WRKACTJOB + F4 +F10 で出てくるINTERVALにたとえば 5と入れる(5秒間隔で再表示を指示)。※省略すれば、前回指定した値。
例 WRKACTJOB INTERVAL(5)
-
そのまま実行キーを押して、いったん、活動ジョブたちの画面を出す。
- F19(F19=
自動最新表示の開始)を押下。これで、自動再表示モードになります。
アクセスパスの相関関係
1.ある物理ファイルに、どんな論理ファイルが、ぶら下がっているか、の表示コマンド
(物理ファイル⇒論理ファイル)
DSPDBR 物理ファイル
2.ある論理ファイルが、どの物理ファイルに、くっついているのか、の表示コマンド
(論理ファイル⇒物理ファイル)
DSPFD 論理ファイル *ACCPTH
LEAVEとITERの動きの違い
LEAVEはDOループから、文字通り、Leave(去る)ですよね。これは割合よく使われていると思います。単語の意味もわかりやすいですね。
問題はITERです。語源となる英単語の意味としては、iterate(イタレイト)「反復する」、という意味です。
Dow-EndDoでは、最初に条件式を判定して、処理して、「ENDDO」文の命令で、DOWへ戻ります。たいていは、DOWに戻るのですが、ITERは、このENDDOへ飛びます。
これは、たとえば、
※()内の数字は実行順序です。
F3 DOWEQ PUSHED (4)
EXFMT FMT01 (5)
...
F21 IFEQ PUSHED
...
GOTO LOOP (1)
ENDIF
...
LOOP TAG (2)
ENDDO (3)
または、(変わったコーディングですが、理解のためのソースです)
F3 DOWNE PUSHED
REDSP TAG (2)
EXFMT FMT01 (3)
...
F21 IFEQ PUSHED
...
GOTO REDSP (1)
ENDIF
...
ENDDO
をITERを使うと、以下のようになります。
F3 DOWNE PUSHED (3)
EXFMT FMT01 (4)
...
F21 IFEQ PUSHED
...
ITER (1)
ENDIF
...
ENDDO (2)
ITERの次の実行ステップは、最後のENDDOにいったん飛んで、ENDDO文を実行して、その結果として、DOWEQに戻っています。結果だけ見ていると、あたかも、一番内側のDOループの先頭に戻っているかのようです。でも、ENDDOに飛んでいることを忘れずに。もし、ENDDOに標識がついていれば、それなりに動きますよ。このときの動きはLEAVEと同じになってしまいますね(下図)。
F3 DOWEQ PUSHED
EXFMT FMT01
...
F21 IFEQ PUSHED
...
MOVE *ON *IN90
ITER (1)
ENDIF
...
N90 ENDDO (2)
... (3) 参考マニュアル
RPGと数字の話 パック、ゾーン、2進数と符号
もう、皆さんご存知でしょうが、まあ、老婆心でお送りします、情報は、数字データのことです。
ゾーン10進数
-
RPGIII 最大整数桁は30、最大小数桁は 9までです。
-
RPGIV 最大整数桁は30、最大小数桁は30までです。
パック10進数
-
RPGIII 最大整数桁は30、最大小数桁は 9までです。
-
RPGIV 最大整数桁は30、最大小数桁は30までです。
2進数形式
RPGIII および RPGIV
-
2バイト長の場合、最大整数桁は4までです。(9,999まで)
-
4バイト長の場合、最大整数桁は9までです。(999,999,999まで)
符号
AS/400では、正符号はX'F'で、負符号はX'D'となります。また、文字フィールド内での数字もX'F'です。
ゾーン10進数+150は、X'F1F5F0' で、-150は X'F1F5D0' です。文字の150は、X'F1F5F0' です。
16進数'C'の概念はAS/400では出てきませんが、SAA環境の統一らしく、CをFの数字符号として、扱うようです。ただし、この16進数Cは、RPGのマニュアルには出てきません。
---------------------------------------------------------------
それから、いつもどこに出ていたっけなー、と探してしまう資料を偶然発見しましたので、備忘録として、URLを付けます。
付録1.1 付録A. データベース・ファイルのサイズ
OUTQ+DTAQ
CRTOUTQにて、DTAQを指定しておくと、そのOUTQにスプールが入ったときに、DTAQにそのスプール情報が入ります。したがって、どのタイミングでスプールができるかわからない場合に、そのスプールの生成監視をしたい場合は、DATAQを作成して、CRTOUTQ(CHGOUTQではDATAQを指定できないので、OUTQを新規作成時のみ指定可能です。)で、そのDATAQを指定することで、モニター可能です。
「3.5 プログラムとプロシージャー間の通信のためのデータ待ち行列の使用法」
を参考にして下さい。
CRTDUPOBJとCPYFの違い
CPYFは、ファイル間のレコード単位の複写です。したがって、FMTOPTで、*NOCHKや、 *CVTSRCや、*MAP, *DROPなど、レコード様式変換のオプションが使えます。レコードの入力と出力のプログラムが内部で起動するので、この程度のオプションはつけてもらえるのですね。それから、レコード別のプログラムなので、MBROPT(*ADD)や MBROPT(*REPLACE)、最近にいたっては、*UPDADDまでできるようになりました。
CRTDUPOBJは、その名のとおり、オブジェクトの複製をするだけです。つまり、レコード別ではなく、ファイル全体のディスク上のイメージをそのまま複製するわけです。ファイルに限らず、プログラムやその他、オブジェクトなら何でも複製
できます。
但し、CRTDUPOBJは、FROMLIBが必須入力なので、ライブラリー名をハードコードしてしまいます。もし、*LIBLで最初に見つかったオブジェクトのコピーならば、RTVOBJDを併用しましょう。
PGM
DCL &OBJLIB *CHAR ( 10 )
RTVOBJD OBJNAME *FILE RTNLIB(&OBJLIB)
CRTDUPOBJ OBJNAME &OBJLIB *FILE TOLIB
RETURN
ENDPGM |
こんな感じであれば、ライブラリー名をプログラム内にハードコードしないで済みます。
※ほんとだったら、CRTDUPOBJにこの機能を組み込んでほしいのだけどなあ>ロチェスタ
代替次ページ/代替前ページ
Roll Up/Downの代わりとして、F7/F8を使う場合、便利なキーワードが、
ALTPAGEUP, ALTPAGEDWN
です。これを指定すると、ロールアップでのコーディングをしておけば、特にF7,F8のコーディングは不要です。実際には、ロールアップダウンキーも使え、同時にF7,
F8も使えます。
0013.00 A ALTPAGEUP
0014.00 A ALTPAGEDWN
0015.00 A DSPSIZ(24 80 *DS3)
0016.00 A ERRSFL
0017.00 A PRINT
0018.00 A INDARA
0019.00 A CA03
0020.00 A CA12
0021.00 A CA23
|