($title_img_alt)

こちらからの投稿は、先頭に表示されているコメントへの返信になります。
*SYSRPYL を使用しないメッセージの自動応答について TK さん [ 2月4日(火) 18時5分 ]
システムの自動応答リストを使用しないで、
特定のエスケープメッセージに対する自動応答を行おうとしているのですが、
うまくいきません。

以下のようなコードで、自動応答を"I"で行おうとしています。

(Main-CL:MSGMAIN)
PGM

DLTMSGF    MSGF(QTEMP/QCPFMSG)
MONMSG     MSGID(CPF2105)
CRTMSGF    MSGF(QTEMP/QCPFMSG)
OVRMSGF    MSGF(QCPFMSG) TOMSGF(QTEMP/QCPFMSG) SECURE(*YES)
ADDMSGD    MSGID(CPF2110) MSGF(QTEMP/QCPFMSG) MSG('Auto +
             reply for CPF2110') DFT(I)
CHGJOB     INQMSGRPY(*DFT)
CALL       PGM(MSGSUB1)

ENDPGM

(Sub-CL:MSGSUB1) ※ライブラリー"XXXLIB"は存在しない。
PGM
DLTF       FILE(XXXLIB/XXXFILE)
ENDPGM

ログは以下のように出ています。

  Auto reply for CPF2110
  CPF2110 received by procedure MSGSUB1. (C D I R)
? C
  CPF2110 received by procedure MSGMAIN. (C D I R)
? C
  Application error.  CPF2110 unmonitored by MSGSUB1 at statement
    0000000300, instruction X'0000'.

自動応答は出来ているようですが、自動応答を"I"で行いたいにもかかわらず、
"C"で処理されているようです。

ADDMSGD のパラメーターをいろいろ変えてやってみましたが、
望む結果は得られていません。

どこが問題なのかお分かりの方がいらしたら解決策をご教授ください。
OS/400 Ver5.4 です。

よろしくお願いいたします。
自動応答は不要  SDF さん [ 2月4日(火) 21時13分 ]
DLTF       FILE(XXXLIB/XXXFILE)
MONMSG          CPF0000
結果はどうあれ、続行します。

分岐したいなら
DLTF       FILE(XXXLIB/XXXFILE)
MONMSG          CPF2110   GOTO XX2110
MONMSG          CPF0000
こんな感じにする。
RE:自動応答は不要  TK さん [ 2月5日(水) 10時26分 ]
早速のご回答ありがとうございます。

説明不足で大変申し訳ありません。

上の話は簡略化していますが、実際の状況としましては、

PGMA  CALL -> PGMB CALL -> PGMC (いずれも CLP)
という階層の呼び出しで、

PGMA = 今回当方作成中のプログラム(上記 MSGMAIN にあたる)、
PGMB、PGMC = 他社作成のプログラム(オブジェクトのみ提供)、

実行時のログから、
PGMC はその中で、DSPFD *OUTFILE のリストを順次読んで
CLRPFM を行っていると思われます。
ただし、そこでエラー処理をしていないらしく、
「メンバーロック中でクリアできない」などのエラーが出た時点で
PGMB (これはメッセージモニタしているようです)
に制御が戻って PGMB が次のステップを実行してしまいます。

今回、PGMA 自身は MONMSG するとしまして、
PGMC の CLRPFM がエラーを受け取った場合に
"C" でなく "I" で自動応答し、
PGMC がリストの次のファイルの処理を継続するように、
PGMB、PGMC を変更せずに、PGMA から制御したいのです。

このような事は出来ますでしょうか?

よろしくお願いいたします。
できそうな感じだが SDF さん [ 2月5日(水) 14時21分 ]
だめもとで。
JOBD より USRPRF が 優先します。
DLVRY   *NOTIFY になってますか。


 


RE:できそうな感じだが TK さん [ 2月5日(水) 16時45分 ]
ご回答ありがとうございます。

確認しましたところ、*NOTIFY となっていました。

HELP に「MSGQ が他で使用されていた場合云々・・・」とありましたので、
念のため、誰も使用していない別ユーザーで試してみましたが、
結果は同様でした。

何か別の設定(環境設定など)が欠けているのでしょうか・・・
制限事項 SDF さん [ 2月5日(水) 20時35分 ]
OVR するときに、FROM と TO のファイル名が同じだと、
動作に問題が 発生します。

もしかしたら、という部分は、外してテストしたほうが、早道です。
(君子あやうきに 近寄らず) 


CPF2110  SDF さん [ 2月6日(木) 10時14分 ]
自動応答はしてるらしいが、別のメッセージIDにこたえてる。
CPA0701への応答 koma さん [ 2月5日(水) 21時58分 ]
CPF2110には応答は返せませんので、CPA0701に対して「I」を自動応答させてはどうでしょうか?
RE:CPA0701への応答 (うまくいきました、なぜかCPA0702) TK さん [ 2月6日(木) 13時36分 ]
ご回答ありがとうございます。

みなさんのご指摘をもとに、CPA0702(ログには CPA0702 が送信されていましたので)
をチェックするように変更したところ、

テストプログラムのログでは、応答が"I"で返され、かつ、
下位プログラムに追加したエラー発生箇所の次のステップ SNDPGMMSG の処理も
実行されていました。

CPA0702 の内容についてはもう少しチェックしてみたいと思いますが、
要件に照らして、当初の目的は達成できそうです。

ご指摘を下さいました皆様、ありがとうございました。

お名前

パスワード

メールアドレス

タイトル

ホームページ

アドレス

項目