* 变量定义
DATA:
SEND_REQUEST TYPE REF TO CL_BCS,
DOCUMENT TYPE REF TO CL_DOCUMENT_BCS,
FAIL TYPE REF TO CX_BCS,
RECIPIENT TYPE REF TO IF_RECIPIENT_BCS.
DATA:
LS TYPE STRING,
MAILTO TYPE AD_SMTPADR,
MAIN_TEXT TYPE BCSY_TEXT,
TITLE TYPE SO_OBJ_DES.
DATA LO_SENDER TYPE REF TO IF_SENDER_BCS.
DATA: LV_DATE TYPE C LENGTH 10.
DATA: LT_EMAIL TYPE TABLE OF ZTIF_EMAIL,
LS_EMAIL TYPE ZTIF_EMAIL.
DATA: LT_SEND TYPE TABLE OF TY_OUTPUT,
LS_SEND TYPE TY_OUTPUT.
LV_DATE = SY-DATUM+0(4) && '-' && SY-DATUM+4(2) && '-' && SY-DATUM+6(2).
LT_SEND[] = GT_OUTPUT[].
DELETE LT_SEND WHERE SLBOX EQ ''.
IF LT_SEND IS NOT INITIAL.
SELECT *
INTO TABLE LT_EMAIL
FROM ZTIF_EMAIL
FOR ALL ENTRIES IN LT_SEND
WHERE GP EQ LT_SEND-GP.
SORT LT_SEND BY GP.
ENDIF.
CLEAR TITLE.
* TITLE
CONCATENATE 'SAP系统过账错误日志-' SY-DATUM INTO TITLE.
DATA: LV_STR1 TYPE STRING.
DATA: LV_STR2 TYPE STRING.
DATA: LV_STR3 TYPE STRING.
LOOP AT LT_EMAIL ASSIGNING FIELD-SYMBOL(<LW_EMAIL>).
AT NEW GP.
CLEAR MAIN_TEXT[].
LOOP AT LT_SEND INTO LS_SEND WHERE GP EQ <LW_EMAIL>-GP.
CLEAR: LV_STR1,LV_STR2,LV_STR3,LS.
LV_STR1 = '接口编号:' && LS_SEND-IN_NO.
LV_STR2 = '接口描述:' && LS_SEND-IF_NM.
LV_STR3 = '错误条目数:' && LS_SEND-ERR_ROWS && ';'.
CONCATENATE LV_STR1 LV_STR2 LV_STR3 INTO LS SEPARATED BY SPACE.
APPEND LS TO MAIN_TEXT.
CLEAR LS_SEND.
ENDLOOP.
TRY.
* 第一步: 创建发送请求
SEND_REQUEST = CL_BCS=>CREATE_PERSISTENT( ).
* 第二步: 创建整理发送内容
DOCUMENT = CL_DOCUMENT_BCS=>CREATE_DOCUMENT(
I_TYPE = 'RAW'
I_TEXT = MAIN_TEXT
I_SUBJECT = TITLE ).
* 第三步: 添加邮件内容到发送请求
SEND_REQUEST->SET_DOCUMENT( DOCUMENT ).
CATCH CX_BCS INTO FAIL.
MESSAGE S001(00) WITH FAIL->ERROR_TYPE FAIL->ERROR_TEXT.
ENDTRY.
ENDAT.
TRY .
CLEAR MAILTO.
"收件人
IF <LW_EMAIL>-SEND EQ 'X'.
MAILTO = <LW_EMAIL>-E_EMAIL.
SHIFT MAILTO LEFT DELETING LEADING SPACE.
TRANSLATE MAILTO TO LOWER CASE.
RECIPIENT = CL_CAM_ADDRESS_BCS=>CREATE_INTERNET_ADDRESS( MAILTO ).
CALL METHOD SEND_REQUEST->ADD_RECIPIENT
EXPORTING
I_RECIPIENT = RECIPIENT
I_EXPRESS = 'X'
I_COPY = ''
I_BLIND_COPY = ' '
I_NO_FORWARD = ' '.
ENDIF.
CLEAR MAILTO.
"抄送人
IF <LW_EMAIL>-COPY EQ 'X'.
MAILTO = <LW_EMAIL>-E_EMAIL.
SHIFT MAILTO LEFT DELETING LEADING SPACE.
TRANSLATE MAILTO TO LOWER CASE.
RECIPIENT = CL_CAM_ADDRESS_BCS=>CREATE_INTERNET_ADDRESS( MAILTO ).
CALL METHOD SEND_REQUEST->ADD_RECIPIENT
EXPORTING
I_RECIPIENT = RECIPIENT
I_EXPRESS = 'X'
I_COPY = 'X'
I_BLIND_COPY = ' '
I_NO_FORWARD = ' '.
ENDIF.
CATCH CX_BCS INTO FAIL.
* MESSAGE ixxx(xx) WITH fail->error_type.
ENDTRY.
AT END OF GP.
TRY.
* 第四步: 邮件地址转换
* RECIPIENT = CL_CAM_ADDRESS_BCS=>CREATE_INTERNET_ADDRESS( MAILTO ).
* SEND_REQUEST->ADD_RECIPIENT( RECIPIENT ).
* 第五步: 添加邮件地址到发送请求
"设置邮件发送账号和地址
TRY .
CALL METHOD CL_CAM_ADDRESS_BCS=>CREATE_INTERNET_ADDRESS
EXPORTING
I_ADDRESS_STRING = '发送的邮箱'
* I_ADDRESS_NAME = 'scn team'
RECEIVING
RESULT = LO_SENDER.
CATCH CX_ADDRESS_BCS.
CATCH CX_ROOT.
ENDTRY.
TRY.
SEND_REQUEST->SET_SENDER( I_SENDER = LO_SENDER ).
CATCH CX_SEND_REQ_BCS.
CATCH CX_ROOT.
ENDTRY.
* 第六步: 正式发送并提交作业
SEND_REQUEST->SEND( I_WITH_ERROR_SCREEN = 'X' ).
COMMIT WORK AND WAIT.
CATCH CX_BCS INTO FAIL.
MESSAGE S001(00) WITH FAIL->ERROR_TYPE FAIL->ERROR_TEXT.
ENDTRY.
IF FAIL IS INITIAL.
GS_OUTPUT-LIGHT = ICON_GREEN_LIGHT.
GS_OUTPUT-MESSAGE = '发送邮件成功'.
MODIFY GT_OUTPUT FROM GS_OUTPUT TRANSPORTING LIGHT MESSAGE
WHERE GP EQ <LW_EMAIL>-GP.
* MESSAGE S001(00) WITH '发送邮件成功'.
ELSE.
GS_OUTPUT-LIGHT = ICON_RED_LIGHT.
GS_OUTPUT-MESSAGE = '发送邮件失败'.
MODIFY GT_OUTPUT FROM GS_OUTPUT TRANSPORTING LIGHT MESSAGE
WHERE GP EQ <LW_EMAIL>-GP.
ENDIF.
FREE: SEND_REQUEST,DOCUMENT,LO_SENDER,RECIPIENT,FAIL.
ENDAT.
ENDLOOP.
OVER……