8.3.7 LANSA電子メール関数のサンプル
LANSAの関数のこの例は、一般的に、IBM iのスプール・ファイル(つまり、レポート)をコピーして、指定のアドレスにそれを電子メールで送信します。Visual LANSAを持っている場合は、この例をシステムに直接カット・アンド・ペーストして、IBM iで確認することができます。
FUNCTION OPTIONS(*DIRECT);
********** COMMENT();
********** COMMENT(Fields that the caller can optionally exchange in);
********** COMMENT(which should really be defined in the dictionary);
********** COMMENT();
DEFINE FIELD(#EMSPLFN) TYPE(*CHAR) LENGTH(010) DESC('Report AS/400 Spooled File Name') DEFAULT(O@PRTF1);
DEFINE FIELD(#EMSPLFD) TYPE(*CHAR) LENGTH(001) DESC('Delete Spooled File at Completion') DEFAULT(N);
DEFINE FIELD(#EMORIGIN) TYPE(*CHAR) LENGTH(060) DESC('Email Originator Name') DEFAULT(*FUNCTION);
DEFINE FIELD(#EMRECPNT) TYPE(*CHAR) LENGTH(060) DESC('Email Recpient Name') DEFAULT(*BLANKS);
DEFINE FIELD(#EMSUBJECT) TYPE(*CHAR) LENGTH(060) DESC('Email Subject') DEFAULT(*BLANKS);
********** COMMENT();
********** COMMENT(Local Fields for this function);
********** COMMENT();
DEFINE FIELD(#EMLINE) TYPE(*CHAR) LENGTH(132) DESC('Line of the report');
DEFINE FIELD(#EMRETC) TYPE(*CHAR) LENGTH(002) DESC('Return code');
********** COMMENT();
********** COMMENT(Create the holding file SPOOLDTA in QTEMP);
********** COMMENT();
EXEC_OS400 COMMAND('CRTPF QTEMP/SPOOLDTA RCDLEN(132) AUT(*ALL)') IF_ERROR(*NEXT);
USE BUILTIN(CLR_MESSAGES);
EXEC_OS400 COMMAND('CPYSPLF FILE(#EMSPLFN) TOFILE(QTEMP/SPOOLDTA) SPLNBR(*LAST)');
********** COMMENT();
********** COMMENT(Start the mail and read and send all lines in report);
********** COMMENT();
USE BUILTIN(MAIL_START) TO_GET(#EMRETC);
EXECUTE SUBROUTINE(CHECKERROR);
USE BUILTIN(MAIL_ADD_RECIPIENT) WITH_ARGS(TO #EMRECPNT) TO_GET(#EMRETC);
EXECUTE SUBROUTINE(CHECKERROR);
IF COND('#EMORIGIN *NE *BLANKS');
USE BUILTIN(MAIL_ADD_ORIGINATOR) WITH_ARGS(#EMORIGIN) TO_GET(#EMRETC);
EXECUTE SUBROUTINE(CHECKERROR);
ENDIF;
IF COND('#EMSUBJECT *NE *BLANKS');
USE BUILTIN(MAIL_SET_SUBJECT) WITH_ARGS(#EMSUBJECT) TO_GET(#EMRETC);
EXECUTE SUBROUTINE(CHECKERROR);
ENDIF;
USE BUILTIN(ACCESS_FILE) WITH_ARGS(OPEN SPOOLDTA QTEMP) TO_GET(#EMRETC);
EXECUTE SUBROUTINE(CHECKERROR);
USE BUILTIN(ACCESS_FILE) WITH_ARGS(READ SPOOLDTA QTEMP) TO_GET(#EMRETC #EMLINE);
EXECUTE SUBROUTINE(CHECKERROR);
DOWHILE COND('#EMRETC = OK');
USE BUILTIN(MAIL_ADD_TEXT) WITH_ARGS(#EMLINE) TO_GET(#EMRETC);
EXECUTE SUBROUTINE(CHECKERROR);
USE BUILTIN(ACCESS_FILE) WITH_ARGS(READ SPOOLDTA QTEMP) TO_GET(#EMRETC #EMLINE);
EXECUTE SUBROUTINE(CHECKERROR);
ENDWHILE;
********** COMMENT();
********** COMMENT(Close the temporary file and send the mail);
********** COMMENT();
USE BUILTIN(ACCESS_FILE) WITH_ARGS(CLOSE SPOOLDTA QTEMP) TO_GET(#EMRETC);
EXECUTE SUBROUTINE(CHECKERROR);
USE BUILTIN(MAIL_SEND) TO_GET(#EMRETC);
EXECUTE SUBROUTINE(CHECKERROR);
********** COMMENT();
********** COMMENT(Delete the spool file if required);
********** COMMENT();
IF COND('#EMSPLFD = Y');
EXEC_OS400 COMMAND('DLTSPLF FILE(#EMSPLFN) SPLNBR(*LAST)');
ENDIF;
********** COMMENT(Finished);
RETURN;
********** COMMENT();
********** COMMENT(Error checking subroutine);
********** COMMENT();
SUBROUTINE NAME(CHECKERROR);
IF COND('(#EMRETC *NE OK) *AND (#EMRETC *NE EF)');
ABORT MSGTXT('Fatal error detected during Email transfer. See previous messages for cause.');
ENDIF;
ENDROUTINE;
IBM i上でこのファンクションをコンパイルした後は、新規または既存のレポート・プログラムの末尾に以下のようなコードを追加できます。
<< PRODUCE THE REPORT >>>
ENDPRINT
CHANGE FIELD(#EMRECPNT) TO('name.user@site');
EXCHANGE FIELDS(#EMRECPNT);
CALL PROCESS(*DIRECT) FUNCTION(<email function name>);
この例では、レポートのコピーをname.user@site宛てに送信します。
同様に以下の例では、
CHANGE FIELD(#EMRECPNT) TO('name.user@site');
CHANGE FIELD(#EMSUBJECT) TO('YTD Budget Report');
EXCHANGE FIELDS(#EMRECPNT #EMSUBJECT);
CALL PROCESS(*DIRECT) FUNCTION(MAILRPT);
「YTD予算レポート」という件名でレポートのコピーを送信します。