SAP后台任务状态监控

后台抓取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>&nbsp;&nbsp;&nbsp;&nbsp;| && |<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.


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值