重要なファイルにレコードが追加されたらメールで通知したい!
Question
アプリケーションがエラーになった際に、アプリケーション固有のエラーメッセージを物理ファイルに書き出しています。
しかしエラーが発覚してから、その内容を確認するのにタイムラグがあるため、エラーがあった旨をメールで送ることはできないでしょうか。
出来ればその内容を添付できると尚助かります。
Answer
今回の要件ではトリガープログラムを用いれば実現できるかもしれません。
物理ファイルにデータが書き込まれた時にプログラムを動かす、といった処理は、IBM i (AS/400)の標準機能「物理ファイル・トリガーの追加 (ADDPFTRG)」を用いて簡単に実現することが可能です。
参考ドキュメント:
https://www.ibm.com/docs/ja/i/7.5?topic=ssw_ibm_i_75/cl/addpftrg.html
例:EBELLTEST/EBELL_PFに新規レコードが追加された場合、EBELLTEST/SNDMAIL_Pを動かすトリガー設定
ADDPFTRG FILE(EBELLTEST/EBELL_PF)
TRGTIME(*AFTER)
TRGEVENT(*INSERT)
PGM(EBELLTEST/SNDMAIL_P)
RPLTRG(*YES)
ALWREPCHG(*YES)
これで、トリガーの設定は完了です。
さて、順番が前後してしまいましたが、もちろん上記設定のためには先に動作させるプログラムが必要です。
プログラムの内容は非常にシンプルです。
PGM
CPYTOIMPF FROMFILE(EBELL_PF) +
TOSTMF('/EBELLTEST/EBELL_PF.TXT') +
STMFCCSID(943) RCDDLM(*CRLF)
SNDSMTPEMM RCP((user@BELLDATA.CO.JP)) +
SUBJECT('error occured') +
NOTE('エラーが発生しました添付を確認して+
ください。') +
ATTACH(('/EBELLTEST/EBELL_PF.TXT'))
RMVLNK OBJLNK('/EBELLTEST/EBELL_PF.TXT')
ENDPGM
今回は添付もつけたいというお話でしたので、まずSNDSMTPEMMの添付作成のためにCPYTOIMPFを実行します。
後は実際にメールを送るSNDSMTPEMMを入れるだけです。
コーディングが終わってコンパイルされる前に注意が必要です。
プログラムをCLPではなくCLLEとしてコンパイルいただく必要がございます。
今回は詳しいエラー原因は省きますが、CLPでコンパイルいただきDFU等で入力すると、パラメーターの引き渡しエラーによってロールバックが発生しファイル更新そのものがされません。
では改めてCLLEとしてプログラムがコンパイルされました。
ADDPFTRGも実行したところで、レコードを挿入してみましょう。
お客様環境のエラーメッセージをファイルに挿入するプログラムは当方で用意がないので、DFUのレコード追加で試してみましょう。
問題なく追加できましたね。CLPでコンパイルしてしまうとここでエラーになりレコード挿入が失敗してしまいます。
さてレコード挿入が完了してから数秒待つと・・・
無事メールが届きました。
添付ファイルもレコードの内容になっています。
書き込まれているレコードの内容によってはCPYTOIMPFのパラメーターが変わりますが、概ね希望の動作は確認いただけたかと存じます。
実際の運用に合わせてカスタマイズしてください。
by 大熊猫橋