后台抓取SM37每日执行情况。针对执行失败“已取消”或超时太久的job自动触发邮件提醒给IT人员分析。主要获取SAP标准job表tbtco数据
*&---------------------------------------------------------------------*
*& Report ZXXX
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT zXX.
DATA: gt_data TYPE TABLE OF solisti1.
PARAMETERS: p_uzeit TYPE sy-uzeit OBLIGATORY DEFAULT '090000'.
START-OF-SELECTION.
PERFORM frm_get_data CHANGING gt_data.
CHECK gt_data[] IS NOT INITIAL.
PERFORM frm_send_email TABLES gt_data.
*&---------------------------------------------------------------------*
*& Form FRM_GET_DATA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* <--P_GT_DATA text
*----------------------------------------------------------------------*
FORM frm_get_data CHANGING ct_data LIKE gt_data.
DATA: lt_tbtco TYPE TABLE OF tbtco,
ls_tbtco TYPE tbtco,
ls_data TYPE solisti1,
lv_strtdate TYPE string,
lv_strttime TYPE string,
lv_enddate TYPE string,
lv_endtime TYPE string,
lv_status TYPE btcstatus VALUE 'A'. "已取消
DATA: lv_begda TYPE sy-datum,
lv_endda TYPE sy-datum,
lv_btime TYPE sy-uzeit,
lv_etime TYPE sy-uzeit.
lv_endda = sy-datum."截至日期
lv_etime = p_uzeit. "截至时间
*获取12个小时内的数据
CALL FUNCTION 'C14Z_CALC_DATE_TIME'
EXPORTING
i_add_seconds = -43200
i_uzeit = lv_etime
i_datum = lv_endda
IMPORTING
e_datum = lv_begda "开始日期
e_uzeit = lv_btime. "开始时间
SELECT * FROM tbtco INTO TABLE lt_tbtco
WHERE ( ( sdlstrtdt = lv_begda AND sdlstrttm GE lv_btime )
OR ( sdlstrtdt = lv_endda AND sdlstrttm LE lv_etime ) )
AND status = lv_status.
CHECK lt_tbtco[] IS NOT INITIAL.
APPEND VALUE #( line = |<table>| ) TO ct_data.
APPEND VALUE #( line = |<tbody>| ) TO ct_data.
ls_data-line = |<tr>| &&
|<th>作业名</th>| &&
|<th>作业创建者</th>| &&
|<th>状态</th>| &&
|<th>开始日期</th>| &&
|<th>开始时间</th>| &&
|<th>结束日期</th>| &&
|<th>结束时间</th>| &&
|</tr>|.
APPEND ls_data TO ct_data.
LOOP AT lt_tbtco INTO ls_tbtco.
CLEAR: lv_strtdate,
lv_strttime,
lv_enddate,
lv_endtime.
TRY.
CALL METHOD cl_abap_datfm=>conv_date_int_to_ext
EXPORTING
im_datint = ls_tbtco-strtdate
im_datfmdes = '6'
IMPORTING
ex_datext = lv_strtdate.
CALL METHOD cl_abap_timefm=>conv_time_int_to_ext
EXPORTING
time_int = ls_tbtco-strttime
* without_seconds = abap_true "output in short time format
* format_according_to = ENVIRONMENT
IMPORTING
time_ext = lv_strttime.
CALL METHOD cl_abap_datfm=>conv_date_int_to_ext
EXPORTING
im_datint = ls_tbtco-enddate
im_datfmdes = '6'
IMPORTING
ex_datext = lv_enddate.
CALL METHOD cl_abap_timefm=>conv_time_int_to_ext
EXPORTING
time_int = ls_tbtco-endtime
* without_seconds = abap_true "output in short time format
* format_according_to = ENVIRONMENT
IMPORTING
time_ext = lv_endtime.
CATCH cx_abap_datfm_format_unknown.
ENDTRY.
ls_data-line = |<tr>| &&
|<th>{ ls_tbtco-jobname }</th>| &&
|<th>{ ls_tbtco-sdluname }</th>| &&
|<th>已取消</th>| &&
|<th>{ lv_strtdate }</th>| &&
|<th>{ lv_strttime }</th>| &&
|<th>{ lv_enddate }</th>| &&
|<th>{ lv_endtime }</th>| &&
|</tr>|.
APPEND ls_data TO ct_data.
ENDLOOP.
APPEND VALUE #( line = |</table>| ) TO ct_data.
APPEND VALUE #( line = |</tbody>| ) TO ct_data.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_SEND_EMAIL
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_GT_DATA text
*----------------------------------------------------------------------*
FORM frm_send_email TABLES tt_data LIKE gt_data.
DATA:
ls_docdata TYPE sodocchgi1,
lt_paclist TYPE STANDARD TABLE OF sopcklsti1,
lwa_paclist LIKE LINE OF lt_paclist,
lt_context TYPE STANDARD TABLE OF solisti1,
lwa_conttxt LIKE LINE OF lt_context,
lt_receivers TYPE STANDARD TABLE OF somlreci1,
lwa_receivers LIKE LINE OF lt_receivers,
lv_email_dn TYPE string,
lt_9014 TYPE STANDARD TABLE OF p9014,
lwa_9014 LIKE LINE OF lt_9014,
lv_email TYPE p9131-email,
lv_objid TYPE hrobjid,
lv_count TYPE i.
DATA: ls_data TYPE solisti1,
ls_mesg TYPE zshr_message,
lv_datum TYPE string.
TRY.
CALL METHOD cl_abap_datfm=>conv_date_int_to_ext
EXPORTING
im_datint = sy-datum
im_datfmdes = '6'
IMPORTING
ex_datext = lv_datum.
CATCH cx_abap_datfm_format_unknown.
ENDTRY.
lv_email_dn = zhrcl_base_utility=>get_email_dn( ). "add yisz 2025/2/25
" 收件人邮箱
lv_email = 'XX'.
CLEAR lwa_receivers.
lwa_receivers-receiver = lv_email && lv_email_dn.
lwa_receivers-rec_type = 'U'.
* lwa_receivers-copy = 'X'.
APPEND lwa_receivers TO lt_receivers.
lv_email = 'YY'.
CLEAR lwa_receivers.
lwa_receivers-receiver = lv_email && lv_email_dn.
lwa_receivers-rec_type = 'U'.
APPEND lwa_receivers TO lt_receivers.
" 邮件标题
ls_docdata-obj_descr = '后台任务状态监控'.
" 邮件内容(HTML格式)
CLEAR lt_context.
lwa_conttxt-line = '<HTML><BODY>'.
APPEND lwa_conttxt TO lt_context.
CLEAR lwa_conttxt.
APPEND VALUE #( line = |<span>您好:</span>| ) TO lt_context.
lwa_conttxt-line = |<div> | && |<strong>{ lv_datum }</strong>日失败的后台任务如下:</div>|.
APPEND lwa_conttxt TO lt_context.
LOOP AT tt_data INTO lwa_conttxt.
APPEND lwa_conttxt TO lt_context.
lv_count = lv_count + 1.
ENDLOOP.
CLEAR lwa_conttxt.
CONCATENATE lwa_conttxt-line '</BODY></HTML>'
INTO lwa_conttxt-line.
APPEND lwa_conttxt TO lt_context.
lv_count = lv_count + 2.
CLEAR lt_paclist.
lwa_paclist-head_start = 1.
lwa_paclist-body_start = 1.
lwa_paclist-body_num = lv_count.
lwa_paclist-doc_type = 'HTM'.
lwa_paclist-doc_size = lv_count * 255.
ls_docdata-doc_size = lv_count * 255.
APPEND lwa_paclist TO lt_paclist.
CALL FUNCTION 'SO_NEW_DOCUMENT_ATT_SEND_API1'
EXPORTING
document_data = ls_docdata
put_in_outbox = 'X'
commit_work = 'X'
TABLES
packing_list = lt_paclist
contents_txt = lt_context
receivers = lt_receivers
EXCEPTIONS
too_many_receivers = 1
document_not_sent = 2
document_type_not_exist = 3
operation_no_authorization = 4
parameter_error = 5
x_error = 6
enqueue_error = 7
OTHERS = 8.
IF sy-subrc <> 0.
ls_mesg-msgty = 'E'.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
INTO ls_mesg-msgtx
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
EXIT.
ENDIF.
ENDFORM.