プログラムでDSPPGMコマンドを使用して表示される詳細の意味を理解しようとしています。IBM iのDSPPGMコマンドの理解
と仮定コマンドは以下の通りです:MODULEは以下の通りです*として
DSPPGM PGM(SE046R) DETAIL(*ALL)
情報は、詳細のために示した:
Program . . . . . . . : SE046R Library . . . . . . . : HGBASQUA
Owner . . . . . . . . : QPGMR
Program attribute . . : RPGLE
Detail . . . . . . . . : *MODULE
Type options, press Enter.
5=Display description 6=Print description
Creation Optimization Debug
Opt Module Library Attribute Date Level Data
SE046R QTEMP RPGLE 06/28/17 *NONE *YES
私はここで理解していない何SE046Rとして現れる理由ですモジュール。 MODULE型のこの名前のオブジェクトがないためです。
次はサービスプログラムの詳細です。以下のものはプログラムに結び付けられたサービスプログラムのリストですか? SE045RSを除いて、すべてのものは何らかのシステム定義のものと思われますか?
Service
Program Library Activation Signature
QC2SYS QSYS *IMMED 000000000000000000009485A3A2A8A2
SE045RS *LIBL *IMMED A584A90E326C57B523D38F7C6803F7C4
QRNXIE QSYS *IMMED D8D9D5E7C9C540404040404040404040
QRNXUTIL QSYS *IMMED D8D9D5E7E4E3C9D34040404040404040
QRNXDUMP QSYS *IMMED D8D9D5E7C4E4D4D74040404040404040
QLEAWI QSYS *IMMED 44F70FABA08585397BDF0CF195F82EC1
また、SE045RSはDSPSRVPGMコマンドを行う上で、私は、サービスプログラムが名前SE045RMでMODULEからなることを意味を推測SE045RMを表示するサービスプログラムです。
SE046Rには、SE045RMで定義された手順にプロシージャコールがあります。私は完全にそれに打ち勝っていますが、他の方法では可能でしょうか?つまり、SE046R内で定義されたプロシージャがあるのですが、SE045RMモジュール内で定義されたプロシージャ内で使用できますか?
アップデート - 1:
オーケー決定はSE045RMとどのような手順の中で使用されていたローカル変数は、現在のパラメータとして渡さなければならないための手順を移動するために行われているようにします。それはかなり下の意味になります。
LongMsg = 'Program ' + %Trim(P_Program) +
' encountered a SQL error code ' +
%Char(P_SQLError01) + ' while trying to ' + %Trim(P_ActText) + ' for ' +
%char(Input_Company) + ':' + %trim(Input_Int_Hdr) + ':' +
%trim(Input_Order) + ':' + %char(Input_Line_Itm_Seq) + ':' +
%char(Input_Rel_Seq) + ':' + %trim(Input_VIN);
上記のすべてのフィールドはSE046Rに対してローカルであり、その内部で完全に働いているだろうが、今、これらはプロシージャにパラメータとして渡さなければなりません。質問は上記のように多くのパラメータを渡しており、約4つより良い方法があります。これは、SQLSoftErrorのプロシージャー呼び出しに約13のパラメーターになります。これは良いことですか?
私の会社のコーディング標準はポインタテクニックを試してもらえませんが、答えはMurphです。 SE045RMのSE046R内で定義された手順を実際に使用する必要があるのは、シニアリソースによる命令ポストコードレビューです。したがって、SQL文(Sqlcodがゼロでないか100ではない)の実行後にSE045RMにSQLエラーが存在する場合は、常にSE046Rですでに定義されているSQLErrorプロシージャを使用します。しかし、あなたが上で定義した方法以外の方法を使用することによってこれは可能ではないでしょう、と私は理解していますか?代わりに、SQLErrorディフィニションをSE045RMの作業に移すのでしょうか? –
新しいコメントをchar limitとして追加すると、上記の値に達しました.. SE046R内のSQLErrorの呼び出しは、SRVPGM SE045SによってバインドされているSE045RMのプロシージャ定義を検索するように機能するはずです。私が従ったアプローチは、SE045RMでSQLエラーを処理するための新しいプロシージャを定義することでした。しかし、これは明らかにフラグとして提起され、私は既存のコードを再利用するよう求められました。考えてください –
この場合、コールバックは本当に適切ではありません。 SQLErrorプロシージャを共通のサービスプログラムモジュールにリファクタリングすることが最善です。あなたはおそらく将来他の場所でそれを必要とするでしょう。 SE046RでグローバルなものはSE045RMではグローバルではないので、グローバル変数をパラメータに移動するためにいくつかの変更が必要な場合があります。 – jmarkmurphy