備忘録です。順次追記しますが、何も知らない人間が思いつきで書いています。
逆に、便利なものがあれば教えてほしいです。コメント欄へお願いします。
- コマンド一覧
- コマンドの一覧を表示する SLTCMD
- 物理ファイルを指定して、そこから作られている論理ファイルの一覧(関連)を調べる DSPDBR
- 物理ファイルを指定して、その物理ファイルと関連する論理ファイルの、キーとレコード様式と表示する DSPKEY
- 物理ファイルを指定してフィールドの属性を調べる DSPFMT
- RPGやCLやDDSなどのメンバー一覧を取得する DSPFD
- CL内でオブジェクトの存在チェック CHKOBJ
- OS400のバージョンを調べる GO LICPGM
- CPFなどのメッセージ一覧を眺める WRKMSGF
- CPFなどのメッセージを番号指定で個別に調べる DSPMSGD
- オブジェクトの一覧を画面表示したり、ファイルに出力する DSPOBJD
- 全てのライブラリの全てのオブジェクトを見る
- (ソース)ファイルの削除 DLTF
- 物理ファイルメンバーの再編成 RGZPFM
- メンバー除去 RMVM
- メンバーのレコードを除去 CLRPFM
- ファイルのコピー CPYF
- ストリング検索 FNDSTRPDM
- ユーザープロファイルの処理 WRKUSRPRF
- ユーザーを作る CRTUSRPRF
- ユーザープロファイルの表示 DSPUSRPRF
- システム名を表示する DSPNETA
- システム値を表示する DSPSYSVAL
- OUTQを作る CRTOUTQ
- OUTQを見る WRKOUTQ
- ジョブ記述を作る CRTJOBD
- ジョブ記述を見る DSPJOBD
- ソースファイルを作成 CRTSRCPF
- ジョブのログを確認する
コマンド一覧
コマンドの一覧を表示する SLTCMD
SLTCMD CMD(*ALL)
これでコマンドの一覧が表示される。
だいたいDSPとかWRKとかCHKとかCRTとかの3文字で始まるので、こんな機能無いのかなと思う時、役割で調べることができる。
もしくは、WRKなら
WRK* + 「実行」キー
を打鍵すればWRKから始まるコマンドの一覧が表示できる。
物理ファイルを指定して、そこから作られている論理ファイルの一覧(関連)を調べる DSPDBR
DSPDBR ライブラリ名/物理ファイル名
指定されたファイルに従属するファイルという名目で、複数の論理ファイルが表示される。
ちなみに論理ファイルを指定しても特段変わった情報は表示されない。
もちろんViewを指定しても論理ファイルと同様。むしろファイルタイプが論理になっている。
画面表示がデフォルトなので、このまま実行すればいい。
物理ファイルを指定して、その物理ファイルと関連する論理ファイルの、キーとレコード様式と表示する DSPKEY
DSPKEY ライブラリ名/物理ファイル名 *
正直ソースを見ればいいと思ったが、オブジェクトから参照できるので信頼性は高い。
ちなみに論理ファイルを指定すると一切表示されない。
最後の*は画面表示の意味。デフォルトは*PRINT。
物理ファイルを指定してフィールドの属性を調べる DSPFMT
DSPFMT ライブラリ名/物理ファイル名 * ←こちらは罫線付で見やすいしカラムの詳細も見れる。オススメ。
DSPFFD ライブラリ名/物理ファイル名 ←DSPFMTと同じなので、使う必要なし。
出力されるのは、フィールド名・データタイプ(CHARとかZONEDとか)・フィールド長・バッファー長・バッファー長・フィールドの使用法・カラムの見出し。
見慣れないのはバッファ長とバッファ位置。バッファ長はフィールド長と同じ。バッファ位置は、ファイルレイアウトフォームやDSで切るときの、何桁目から何桁目のようなもの。
DSPFMTはデフォルトが*PRINT印刷なので、*を付けること。
RPGやCLやDDSなどのメンバー一覧を取得する DSPFD
要するにソースコードの一覧を取得できる。
QRPGSRCとかQCLSRCとかあると思うが、その中に入っているメンバーの一覧だ。どんな名前のソースコードがあるのか一覧で出力できる。
DSPFD FILE(調べたいライブラリ名/調べたいソースファイル名) TYPE(*MBRLIST) OUTPUT(*OUTFILE) OUTFILE(出力ライブラリ名/任意のファイル名)
OUTFILEでファイル出力ができる。出力したいライブラリを指定して、どういう名前で出力するか決める。
参考ソースは、
DSPFD FILE(CHECKLIB/QRPGSRC) TYPE(*MBRLIST) OUTPUT(*QPRINT) OUTFILE(MYLIB/QRPGSRCLIST)
出力できる情報は、
検索世紀・検索日・検索時刻・ファイル・ライブラリ・タイプ(PF/LF)・ファイル属性・未使用・ファイル属性・システム名・補助記憶域プール・未使用・メンバーの数・メンバー・現在のレコード数・削除済みレコード数・データ空間ND検索サイズ・S/38上でのS/38ビューのソース仕様タイプ・メンバー作成世紀・メンバー作成日・最終変更世紀・最終変更日付・最終変更時刻・テキスト記述・ソース仕様タイプ・最終使用世紀・最終使用日付・使用日数カウント・使用状況データリセット世紀・使用状況データリセット日付・データ空間および索引サイズ・メンバー記憶域解放
使えそうなフィールドは赤字のところくらい。
CL内でオブジェクトの存在チェック CHKOBJ
コマンドでオブジェクトの存在チェックはDSPFDやDSPOBJD、プログラムならDSPPGMを使えばいいが、CLの中で存在するか確認してから処理したいとき。
CHKOBJ OBJ(ライブラリ名/ファイル名) OBJTYPE(オブジェクトの種類)
MONMSG MSGID(CPF9801) EXEC(CLコマンド)
存在しなければCPF9801のメッセージ標識が返されるので、そこにその場合の処理を書けばよい。
OS400のバージョンを調べる GO LICPGM
コマンドラインから、
- GO LICPGM
- 10導入済みライセンスプログラムの表示を選択
- F11キーでリリースのフィールドが表示される。
- IBM I導入済みリリースがOSのレベル。その他プログラムも同様。
「V7R1MO」のような文字列がバージョンのこと。
V=バージョン大幅な機能の改訂
R=リリース中位の機能の改訂
M=モディフィケーション少しの機能の改訂
CPFなどのメッセージ一覧を眺める WRKMSGF
メッセージとは主にCPF〇〇〇〇しか使わない感じだが、実際には死ぬほどある。
その一覧を照会するには、
WRKMSGF MSGF(*ALL)
で一覧照会できる。ただメッセージはメッセージファイルという中にあり、このコマンドでは、そのファイルの一覧が照会されるだけ。
そのCPFのメッセージは、QCPFMSGファイルにあるが、CPF以外にも膨大にあるので探すのは実に大変。
噂のSQLのメッセージもこの中にある。ファイルはQSQLMSG。SQL〇〇〇〇というよく聞くメッセージも含まれている。
というか、ここからメッセージを探しに行くことなんかあるのだろうか。
CPFなどのメッセージを番号指定で個別に調べる DSPMSGD
AS400の場合はCLやバッチでエラーをぶっこいてメッセージが表示されることはあっても、自分からエラー番号を指定してその内容を見たいということはあまりないだろうが、そんなコマンド。
DSPMSGD CPF〇〇〇〇
表示された画面で1を選んで実行キーを押せば、メッセージ内容が確認できる。
オブジェクトの一覧を画面表示したり、ファイルに出力する DSPOBJD
ライブラリにあるオブジェクトの一覧を表示するコマンド
DSPOBJD OBJ(HOGELIB/*ALL) OBJTYPE(*ALL) OUTPUT(*OUTFILE) OUTFILE(HOGELIB/OBJLST)
こんな感じ。HOGELIBの全てのオブジェクトの一覧を、HOGELIBのなかにOBJLSTというファイルで作成する。
ちなみに、OBJTYPEを(*QRYDFN)にすればQRY定義だけを絞って取り出すこともできる。
出力のデフォルトは画面出力なので、画面表示をしたいだけなら下記だけでOK。
DSPOBJD OBJ(HOGELIB/*ALL) OBJTYPE(*ALL)
出力できる情報は、
表示世紀・表示日付・表示時刻・ライブラリ・オブジェクト・オブジェクトタイプ・オブジェクトの属性・記憶域解放・オブジェクトサイズ・テキスト記述・オブジェクトのロック・損傷オブジェクト・作成世紀・生成日付・作成時刻・オブジェクト所有者・保管世紀・保管日付・保管時刻・保管コマンド・保管されたサイズ・開始スロット・保管装置・保管ボリューム・継続ボリューム・復元世紀・復元日付・復元時刻・ソースファイル名・ソースファイルライブラリ・ソースファイルメンバ・ソース変更世紀・ソース変更日付・ソース変更時刻・コンパイラ名・コンパイラレベル・オブジェクトレベル・ユーザ変更・LICPGM名・LICPGMレベル・PTF番号・APARID・順序番号・変更世紀・変更日付・変更時刻・保管ファイル・保管ファイルのライブラリ・ASP番号・ファイルラベル・PTFID・システム名・作成ユーザー・作成したシステム・使用状況の更新・最終使用世紀・最終使用日付・使用日数カウント・リセット世紀・リセット時刻・オブジェクト定義域・システムバージョン・コンパイラバージョン・LICPGMバージョン・圧縮状況・オーバーフロー・API変更可能・APIによる変更・ユーザ定義の属性・保管活動世紀・保管活動日付・保管活動時刻・オブジェクト監査値・装置中のオブジェクトサイズ・装置あたりのバイト数・一次グループ・大順序番号・ディジタル署名・現在ジャーナル処理中・ジャーナル名・ジャーナルライブラリ・ジャーナルイメージ・除外ジャーナル項目・ジャーナル世紀・ジャーナル日付・ジャーナル時刻・保管サイズ単位数・保管サイズ乗数・オブジェクトASP番号・ライブラリASP番号・オブジェクトASP装置名・ライブラリASP装置名・トラステッドソースによる署名済・複数署名・関連スペースサイズ・最適スペース調整・オブジェクトASPグループ名・ライブラリASPグループ名・適用する開始ジャーナル・レシーバー名・開始ジャーナルレシーバーライブラリ・開始レシーバーライブラリASP装置・開始レシーバーライブラリASPグループ・リモートジャーナルフィルター
これだけ。見た感じプログラムで使えそうなデータは赤字の4つくらい。
ファイル名は指定できるけど、レコード様式はOLIDOBJDで決まっているみたい。
全てのライブラリの全てのオブジェクトを見る
A~Zまで順次ライブラリが切り替わり、すべてのオブジェクトが照会できる。5分以上時間がかかるので気長に待つこと。しかし全く管理していないと色々と無駄なライブラリがあるもんだ・・。
DSPOBJD OBJ(*ALL/*ALL) OBJTYPE(*ALL)
(ソース)ファイルの削除 DLTF
QRPGLESRCのRCDLENを短く作っていたせいか、ちゃんとしたQRPGLESRCからソースメンバーをコピーしようとしたら、短いから切るで!って怒られたので一旦ソースファイルを削除。そしてRPGLESRCのソースファイルを作成した。ちなみにCRTSRCPFでレコード長を指定しなかった場合はデフォルトの92になる。IGCDTA(*YES)を入れないとファイルに2バイト文字が入らない。必ず入れること。ちなみにRPGIVのソースファイル名はRPGLESRCが標準的な名前とテキストに書いてあった。私的にはRPGもRPGIVも一緒のソースファイルに入れて管理したいけど、そういうことならしょうがない。
DLTF FILE(ライブラリ名/QRPGLESRC)
CRTSRCPF FILE(ライブラリ名/QRPGLESRC) RCDLEN(112) IGCDTA(*YES) TEXT(‘MY QRPGLESRC’)
物理ファイルメンバーの再編成 RGZPFM
とあるログファイルを過去1年以前を削除するRPGを作って削除したのだが、DSPFDで見てみると見事に合計メンバーサイズが変わっていない。削除前と削除後で検証済。やはり再編成しなければいけないみたい。レコード数が37,998件でサイズが6,299,648あったのを、レコード数8,704まで削除したのに、サイズが変わらなかった。
RGZPFM FILE(ライブラリ/ファイル名)
ファイルが使用中でなければ大丈夫みたい。実行したらサイズが1,286,144まで減った。素晴らしい。ちなみに空のファイルに対して実行したらエラーになるらしい。もちろん残りのレコードは消えずにそのまま。CLRPFMと間違えたらえらいことだ。
メンバー除去 RMVM
STRPDMでメンバーを4の削除で消す行為と同じ。メンバーごと消える。
RMVM FILE(HOGELIB/QRPGSRC) MBR(HOGEHOGER)
メンバーのレコードを除去 CLRPFM
STRPDMでメンバーを4の削除で消すのとは違い、メンバー自体は残り、中のレコードが消える。
CLRPFM FILE(HOGELIB/QRPGSRC) MBR(HOGEHOGER)
ファイルのコピー CPYF
ファイルが存在していて CRTFILE(*YES)がない ⇒ 落ちない
ファイルが存在していて CRTFILE(*YES)がある ⇒ 落ちない
ファイルが存在せず CRTFILE(*YES)がない ⇒ 落ちる
ファイルが存在せず CRTFILE(*YES)がある ⇒ 落ちない
ストリング検索 FNDSTRPDM
いわゆるSTRPDMのオブジェクト処理からOPT25で行う検索のこと。これはコマンドでもできる。
F4を押してプロンプトで入力していった方が簡単だが、
FNDSTRPDM STRING(検索したい文字列) FILE(ライブラリ/ソースファイル) MBR(*ALL) OPTION(*DSP *NOPROMPT)
MBR(*ALL)にしておけば全ソースメンバーを対象に検索をかけることになる。
OPTION(*DSP)は表示する意味。OPTION(*EDT)にすれば編集可能画面で開いてくれる。
*NOPROMPTにしたら検索がヒットしたらそのソースコードをすぐ開くが、*PROMPTにすればSTRSEUのプロンプト画面を間に挟む。
これが便利に思ったのは印刷できること。
FNDSTRPDM STRING(検索したい文字列) FILE(ライブラリ/ソースファイル) MBR(*ALL) OPTION(*NONE *NOPROMPT) PRTMBRLIST(*YES)
にすれば、QPRINTかどこかに文字がヒットしたソースメンバー名を一覧で印刷してくれる。
いちいち手で控えていかなくてもいいので、とりあえず一覧化したい場合は、これはこれで便利。
OPTIONに*DLTとか*RNMとか*SAVEなど危険な臭いがするものもあるので、使用するときは注意したい。
ただ*SDAとか*RLUなどもあり、*PRTもあるので、色々できるのかも。
ちなみに*PRTにしたらヒットした各ソースメンバーが印刷された。ヒット件数が多かったらえらいことだ。
しかしPDMの2が編集、4が削除、5が表示、7が名前の変更、だというのは知っていたが、6が印刷だとは初めて知ったかも。
ユーザープロファイルの処理 WRKUSRPRF
ユーザプロファイルの処理。
いわゆるユーザIDですね。
それの変更や表示や削除ができる。
基本的にプロファイルを触るときはWRKUSRPRFを使えばいい。
ユーザーを作る CRTUSRPRF
研修で作ったプロファイル
CRTUSRPEF USRPRF(HOGE003) USRCLS(*PGMR) TEXT(HOGE) SPCAUT(*JOBCTL *SAVSYS) USROPT(*CLKWD)
USROPT(*CLKWD)にしておくと、F4でプロンプトを出した時にパラメータを最初からキーワードで表示してくれる(F11を打鍵した状態)
ユーザープロファイルの表示 DSPUSRPRF
基本はWRKUSRPRFでいいけど、ユーザープロファイルの一覧をファイル化したいときにDSPUSRPRFを使う。
コマンドは下記、ファイル化してしまえばこっちのもの。ダウンロードすればエクセルで作業もできる。
DSPUSRPRF USRPRF(*ALL) OUTPUT(*OUTFILE) OUTFILE(ライブラリ/ファイル)
システム名を表示する DSPNETA
最近研修があってシステム名は何ですかと聞かれた焦った。下記で画面に表示できる。
DSPNETA
システム値を表示する DSPSYSVAL
俗にいう環境変数のこと。表示するには複数ある変数から1つ指定する必要がある。
DSPSYSVAL QSYSLIBL
OUTQを作る CRTOUTQ
OUTQを作ってジョブ記述の中に入れる
CRTOUTQ OUTQ(HOGELIB/HOGEOUTQ)
OUTQを見る WRKOUTQ
全体を見るなら WRKOUTQ
一部を見るなら WRKOUTQ HOGEOUTQ
ジョブ記述を作る CRTJOBD
ユーザープロファイルで共通できる設定部分をジョブ記述として登録し、ユーザープロファイルの中で指定することで共通の設定とするもの。
下記はOUTQと初期ライブラリのセット。
CRTJOBD JOBD(HOGELIB/HOGEJOBD) OUTQ(HOGELIB/HOGEOUTQ) INLLIBL(HOGELIB QGPL QTEMP)
ジョブ記述を見る DSPJOBD
画面で見るぶんには2ページある。2ページ目が初期ライブラリリスト。
QDFTJOBDはデフォルトのジョブ記述みたい。システムの備わっているのかな?
DSPJOBD ジョブ記述名
DSPJOBD QDFTJOBD
ソースファイルを作成 CRTSRCPF
QRPGSRCやQDDSSRCをライブラリに作る。RCDLENはデフォルトの92でいいので指定無しでいいけど、QRPGLESRCの場合は112にする必要がある。
ファイルに2バイト文字を含みたい場合はIGCDATA(*YES)にすること。というか必須。
CRTSRCPF FILE(HOGE003/QFILESRC) IGCDATA(*YES)
ジョブのログを確認する
端末でプログラムメッセージが出たのに実行で進んでしまって何があったかわからなくなる時でも、ログは残っています。
WRKOUTQ QEZJOBLOG
コメント