• SAP-ABAP-企业微信:ZCSM37-后台JOB异常检查主动推送企业微信群


    场景:异常JOB主动推送企业微信群 (企业微信机器人可百度创建,注意群不能有企业外的人员,否则接口无效)

    报错提示场景:(报错图片如下)
    1.JOB异常导致任务消失
    2.通JOB多个任务同时执行
    3.最后一次执行JOB处于取消状态

    在这里插入图片描述
    在这里插入图片描述

    源码如下:


    • 事务代码:ZSM37_CHECK
    • 程序名称:ZSM37_CHECK
    • 程序目的: ZCSM37-后台JOB异常检查
    • 自建表:
    • 开发人员:
      *(修改日志)--------------------------------------------------------
    • 日志号 修改人 修改时间 修改说明 传输号码

    • 001

    REPORT zsm37_check.

    ======================================================================

    • INCLUDE
      ======================================================================
      INCLUDE zsm37_check_top.
      INCLUDE zsm37_check_f01.

    ======================================================================

    • AT SELECTION-SCREEN.
      ======================================================================
      AT SELECTION-SCREEN OUTPUT.

    ======================================================================

    • INITIALIZATION
      ======================================================================
      INITIALIZATION.

    ======================================================================

    • START-OF-SELECTION.
      ======================================================================
      START-OF-SELECTION.

    IF p_mins IS INITIAL.
    p_mins = 3.
    ENDIF.

    PERFORM pfm_get_data.
    PERFORM pfr_display_alv.

    ======================================================================

    • END-OF-SELECTION.
      ======================================================================
      END-OF-SELECTION.

    &---------------------------------------------------------------------
    *& 包含 ZSM37_CHECK_TOP
    &---------------------------------------------------------------------

    TABLES:tbtco,tbtcp.

    DATA: BEGIN OF gt_alv OCCURS 0,
    light(4) TYPE c, " 标识
    jobname TYPE tbtco-jobname,
    progname TYPE progname,
    variant TYPE variant,
    sdluname TYPE tbtco-sdluname,
    sdldate TYPE tbtco-sdldate,
    sdltime TYPE tbtco-sdltime,

    •    date        TYPE tbtco-sdldate,
      
      • 1
    •    time        TYPE tbtco-sdltime,
      
        prdmins     TYPE tbtco-prdmins,
        prdhours    TYPE tbtco-prdhours,
        prddays     TYPE tbtco-prddays,
        prdweeks    TYPE tbtco-prdweeks,
        prdmonths   TYPE tbtco-prdmonths,
        pl          TYPE char100,
        flag1       TYPE c,
        flag2       TYPE c,
        flag3       TYPE c,
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
    •    min         TYPE i,
        min_c       TYPE char100,
      
        "当前检查时间
        datum_check TYPE sy-datum,
        uzeit_check TYPE sy-uzeit,
      
      END OF gt_alv.
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8

    DATA gv_alv_r_count TYPE i .
    DATA:gv_zuserid TYPE ztxnth-zuserid. "二级账号
    DATA:it_raw TYPE truxs_t_text_data.
    DATA: gs_layout TYPE lvc_s_layo,
    gs_fieldcat TYPE lvc_s_fcat,
    gt_fieldcat TYPE lvc_t_fcat,
    stylelin TYPE lvc_s_styl,
    alv_grid TYPE REF TO cl_gui_alv_grid.
    CONSTANTS:cos_green_light LIKE dv70a-statusicon VALUE ‘@08@’, "绿灯
    cos_yellow_light LIKE dv70a-statusicon VALUE ‘@09@’, "黄灯
    cos_red_light LIKE dv70a-statusicon VALUE ‘@0A@’. "红灯
    DATA: gt_events TYPE slis_t_event, "事件
    gs_events LIKE LINE OF gt_events.

    DATA:lv_s TYPE i,
    lv_e TYPE i.

    RANGES:r_date FOR sy-datum,
    r_time FOR sy-uzeit.

    DEFINE add_field.
    gs_fieldcat-fieldname = &1.
    gs_fieldcat-scrtext_l = &2.
    gs_fieldcat-edit = &3.
    gs_fieldcat-hotspot = &4.
    gs_fieldcat-checkbox = &5.
    gs_fieldcat-ref_field = &6.
    gs_fieldcat-ref_table = &7.
    gs_fieldcat-icon = &8.
    APPEND gs_fieldcat TO gt_fieldcat.
    CLEAR gs_fieldcat.
    END-OF-DEFINITION.

    SELECTION-SCREEN BEGIN OF BLOCK b2 WITH FRAME TITLE text-002 .
    SELECT-OPTIONS:s_job FOR tbtco-jobname ,
    s_uname FOR tbtco-sdluname,
    " s_date FOR tbtco-sdlstrtdt ,

    •           s_ser FOR tbtco-reaxserver
               s_pname FOR tbtcp-progname
               .
      
      • 1
      • 2
      • 3

    PARAMETERS:p_mins TYPE n LENGTH 5 DEFAULT ‘3’.

    PARAMETERS:p_sed AS CHECKBOX.
    PARAMETERS:p_e AS CHECKBOX.

    SELECTION-SCREEN END OF BLOCK b2.

    &---------------------------------------------------------------------
    *& 包含 ZSM37_CHECK_F01
    &---------------------------------------------------------------------
    &---------------------------------------------------------------------
    *& Form PFM_GET_DATA
    &---------------------------------------------------------------------

    •   text
      
      • 1

    ----------------------------------------------------------------------

    • –> p1 text
    • <-- p2 text
      ----------------------------------------------------------------------
      FORM pfm_get_data .

    REFRESH gt_alv.

    "R 活动的(运行中)
    "Y 就绪的
    "P 已调度的
    "S 已释放
    "A 已取消(出错终止)
    "F 已完成(结束)
    "Z Released/Susp.(无中文)

    DATA:lv_datum_check TYPE sy-datum.
    DATA:lv_uzeit_check TYPE sy-uzeit.

    "当前检查时间
    lv_datum_check = sy-datum.
    lv_uzeit_check = sy-uzeit.

    DO 30 TIMES.

    WAIT UP TO 1 SECONDS.

    "获取当前已释放状态的JOB
    SELECT
    sdldate,
    sdltime,
    sdlstrtdt,
    sdlstrttm,
    jobname,
    sdluname,
    prdmins,
    prdhours,
    prddays,
    prdweeks,
    prdmonths,
    status
    INTO TABLE @DATA(lt_job_s)
    FROM tbtco
    WHERE status IN ( ‘S’ , ‘R’ ) "S 已释放
    AND periodic = ‘X’"周期性
    AND authckman = @sy-mandt
    AND jobname IN @s_job
    AND sdluname IN @s_uname.

    ENDDO.

    SORT lt_job_s BY jobname.
    DELETE ADJACENT DUPLICATES FROM lt_job_s COMPARING jobname.

    "获取历史已释放JOB
    DATA:lt_ztsm37 TYPE TABLE OF ztsm37,
    ls_ztsm37 TYPE ztsm37.

    SELECT
    *
    FROM ztsm37
    INTO CORRESPONDING FIELDS OF TABLE @lt_ztsm37
    WHERE jobname IN @s_job
    AND sdluname IN @s_uname.

    IF lt_job_s[] IS NOT INITIAL.
    "获取JOB名称对应的程序和变式
    SELECT DISTINCT
    jobname,
    progname,
    variant
    FROM tbtcp
    INTO TABLE @DATA(lt_tbtcp)
    FOR ALL ENTRIES IN @lt_job_s
    WHERE jobname = @lt_job_s-jobname.
    SORT lt_tbtcp BY jobname.
    ENDIF.

    "检查已释放状态是否存在
    LOOP AT lt_ztsm37 INTO ls_ztsm37.

    CLEAR gt_alv.
    MOVE-CORRESPONDING ls_ztsm37 TO gt_alv.
    
    READ TABLE lt_tbtcp INTO DATA(ls_tbtcp) WITH KEY jobname = ls_ztsm37-jobname BINARY SEARCH.
    IF sy-subrc = 0.
      gt_alv-progname = ls_tbtcp-progname.
      gt_alv-variant = ls_tbtcp-variant.
    ENDIF.
    
    READ TABLE lt_job_s INTO DATA(ls_job_s) WITH KEY jobname = ls_ztsm37-jobname BINARY SEARCH.
    IF sy-subrc <> 0.
      gt_alv-light = cos_red_light.
      gt_alv-flag1 = 'X'.
    ELSE.
      gt_alv-light = cos_green_light.
    ENDIF.
    
    APPEND gt_alv.
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    ENDLOOP.

    "刷新JOB已释放状态日志自荐表

    • DELETE FROM ztsm37.
      MOVE-CORRESPONDING lt_job_s TO lt_ztsm37.
      IF lt_ztsm37[] IS NOT INITIAL.
      MODIFY ztsm37 FROM TABLE lt_ztsm37.
      IF sy-subrc = 0.
      COMMIT WORK AND WAIT.
      ELSE.
      ROLLBACK WORK.
      ENDIF.
      ENDIF.

    "R 活动的(运行中)
    "Y 就绪的
    "P 已调度的
    "S 已释放
    "A 已取消(出错终止)
    "F 已完成(结束)
    "Z Released/Susp.(无中文)
    LOOP AT gt_alv .

    "频率显示
    IF gt_alv-prdmonths IS NOT INITIAL.
      IF gt_alv-prdmonths = '1'.
        gt_alv-pl = '每月'.
      ELSE.
        gt_alv-pl = gt_alv-pl && gt_alv-prdmonths && '月'.
      ENDIF.
    ENDIF.
    
    IF gt_alv-prdweeks IS NOT INITIAL.
      IF gt_alv-prdweeks = '1'.
        gt_alv-pl = '每周'.
      ELSE.
        gt_alv-pl = gt_alv-pl && gt_alv-prdweeks && '周'.
      ENDIF.
    ENDIF.
    
    IF gt_alv-prddays IS NOT INITIAL .
      IF gt_alv-prddays = '1'.
        gt_alv-pl = '每天'.
      ELSE.
        gt_alv-pl = gt_alv-pl && gt_alv-prddays && '天'.
      ENDIF.
    ENDIF.
    
    IF gt_alv-prdhours IS NOT INITIAL.
      IF gt_alv-prdhours = '1'.
        gt_alv-pl = '每小时'.
      ELSE.
        gt_alv-pl = gt_alv-pl && gt_alv-prdhours && '小时'.
      ENDIF.
    ENDIF.
    
    IF gt_alv-prdmins IS NOT INITIAL.
      IF gt_alv-prdmins = '1'.
        gt_alv-pl = '每分钟'.
      ELSE.
        gt_alv-pl = gt_alv-pl && gt_alv-prdmins && '分钟'.
      ENDIF.
    ENDIF.
    
    PERFORM frm_get_job."最后一次JOB状态
    
    IF gt_alv-flag2 IS NOT INITIAL
      OR gt_alv-flag3 IS NOT INITIAL.
      gt_alv-light = cos_red_light.
    ENDIF.
    
    "检查时间
    gt_alv-datum_check = lv_datum_check.
    gt_alv-uzeit_check = lv_uzeit_check.
    
    IF p_sed = 'X'.
    
      IF gt_alv-light = cos_red_light.
    
        DATA lv_head     TYPE  char100.
    
        IF gt_alv-flag1 = 'X'."JOB消失
          lv_head = '### JOB消失通知'.
          PERFORM frm_send_qywx USING lv_head."错误消息推送企业微信
    
        ENDIF.
    
        IF gt_alv-flag2 = 'X'."多JOB同时执行
          lv_head = '### 多JOB同时执行通知' && '(数量:' && gv_alv_r_count && ')'.
          PERFORM frm_send_qywx USING lv_head."错误消息推送企业微信
    
        ENDIF.
    
        IF gt_alv-flag3 = 'X'."最后一次JOB报错ST22
          lv_head = '### 最后一次JOB报错ST22通知'.
          PERFORM frm_send_qywx USING lv_head."错误消息推送企业微信
    
        ENDIF.
    
      ENDIF.
    
    ENDIF.
    
    MODIFY gt_alv.
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81

    ENDLOOP.

    IF p_e = ‘X’.
    DELETE gt_alv WHERE flag2 <> ‘X’ AND flag1 <> 'X’AND flag3 <> ‘X’ .
    ENDIF.

    ENDFORM.

    &---------------------------------------------------------------------
    *& Form PFR_DISPLAY_ALV
    &---------------------------------------------------------------------

    •   ALV展示
      
      • 1

    ----------------------------------------------------------------------
    FORM pfr_display_alv .

    PERFORM frm_set_layout.
    PERFORM frm_fieldcat.

    CALL FUNCTION ‘REUSE_ALV_GRID_DISPLAY_LVC’
    EXPORTING
    i_callback_program = sy-repid "当前程序
    is_layout_lvc = gs_layout “界面格式”
    it_fieldcat_lvc = gt_fieldcat “字段属性”

    • i_callback_pf_status_set = 'FRM_SET_PF_STATUS'    "状态
      
      • 1
    • i_callback_user_command  = 'FRM_USER_COMMAND' "控制指令
      
      • 1
    • it_event_exit      = gt_event_exit
      
      • 1
    • i_grid_title       = ls_title
      
      • 1
    • i_grid_settings    = i_grid_settings
      
      • 1
      TABLES
      t_outtab = gt_alv
      EXCEPTIONS
      program_error = 1
      OTHERS = 2.
      IF sy-subrc <> 0.
      MESSAGE ID sy-msgid TYPE ‘S’ NUMBER sy-msgno WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4 DISPLAY LIKE ‘E’.
      LEAVE LIST-PROCESSING.
      ENDIF.
      ENDFORM.

    &---------------------------------------------------------------------
    *& Form FRM_SET_LAYOUT_
    &---------------------------------------------------------------------

    •   ALV设置
      
      • 1

    ----------------------------------------------------------------------
    ----------------------------------------------------------------------
    FORM frm_set_layout .
    CLEAR gs_layout.

    gs_layout-zebra = ‘X’ . " 使ALV界面呈现颜色交替
    " GS_LAYOUT-SEL_MODE = ‘A’ . " 选择模式,"A"在最左端有选择按钮
    gs_layout-cwidth_opt = ‘X’ . " 自动优化列宽
    ENDFORM.

    &---------------------------------------------------------------------
    *& Form FRM_FIELDCAT
    &---------------------------------------------------------------------

    •  整单删除ALV字段设置
      
      • 1

    ----------------------------------------------------------------------
    ----------------------------------------------------------------------
    FORM frm_fieldcat.

    add_field ‘LIGHT’ ‘状态灯’ ‘’ ‘’ ‘’ ‘’ ‘’ ‘X’.
    add_field ‘JOBNAME’ ‘作业名’ ‘’ ‘’ ‘’ ‘’ ‘’ ‘’.
    add_field ‘PROGNAME’ ‘程序名称’ ‘’ ‘’ ‘’ ‘’ ‘’ ‘’.
    add_field ‘VARIANT’ ‘变式名称’ ‘’ ‘’ ‘’ ‘’ ‘’ ‘’.
    add_field ‘SDLUNAME’ ‘作业创建者’ ‘’ ‘’ ‘’ ‘’ ‘’ ‘’.
    add_field ‘SDLDATE’ ‘最后一次完成日期’ ‘’ ‘’ ‘’ ‘’ ‘’ ‘’.
    add_field ‘SDLTIME’ ‘最后一次完成时间’ ‘’ ‘’ ‘’ ‘’ ‘’ ‘’.

    • add_field ‘DATE’ ‘下次执行开始’ ‘’ ‘’ ‘’ ‘’ ‘’ ‘’.
    • add_field ‘TIME’ ‘下次执行时间’ ‘’ ‘’ ‘’ ‘’ ‘’ ‘’.

    add_field ‘MIN_C’ ‘距最后一次执行时间’ ‘’ ‘’ ‘’ ‘’ ‘’ ‘’.

    add_field ‘PL’ ‘频率’ ‘’ ‘’ ‘’ ‘’ ‘’ ‘’.
    add_field ‘PRDMINS’ ‘频率:分钟’ ‘’ ‘’ ‘’ ‘’ ‘’ ‘’.
    add_field ‘PRDHOURS’ ‘频率:小时’ ‘’ ‘’ ‘’ ‘’ ‘’ ‘’.
    add_field ‘PRDDAYS’ ‘频率:天’ ‘’ ‘’ ‘’ ‘’ ‘’ ‘’.
    add_field ‘PRDWEEKS’ ‘频率:周’ ‘’ ‘’ ‘’ ‘’ ‘’ ‘’.
    add_field ‘PRDMONTHS’ ‘频率:月’ ‘’ ‘’ ‘’ ‘’ ‘’ ‘’.
    add_field ‘FLAG1’ ‘JOB消失检查’ ‘’ ‘’ ‘’ ‘’ ‘’ ‘’.
    add_field ‘FLAG2’ ‘多JOB执行检查’ ‘’ ‘’ ‘’ ‘’ ‘’ ‘’.
    add_field ‘FLAG3’ ‘最后一次JOB失败检查’ ‘’ ‘’ ‘’ ‘’ ‘’ ‘’.

    add_field ‘DATUM_CHECK’ ‘检查日期’ ‘’ ‘’ ‘’ ‘’ ‘’ ‘’.
    add_field ‘UZEIT_CHECK’ ‘检查时间’ ‘’ ‘’ ‘’ ‘’ ‘’ ‘’.

    ENDFORM.
    &---------------------------------------------------------------------
    *& Form FRM_GET_JOB
    &---------------------------------------------------------------------

    •     "R 活动的(运行中)
      
      • 1
    •     "Y 就绪的
      
      • 1
    •     "P 已调度的
      
      • 1
    •     "S 已释放
      
      • 1
    •     "A 已取消(出错终止)
      
      • 1
    •     "F 已完成(结束)
      
      • 1
    •     "Z Released/Susp.(无中文)
      
      • 1

    ----------------------------------------------------------------------

    •  -->p_status   text
      
      • 1

    ----------------------------------------------------------------------
    FORM frm_get_job.

    "获取最后一次执行时间-A 已取消(出错终止)-当天的报错的JOB
    SELECT SINGLE
    MAX( sdltime ) AS sdltime,
    sdldate
    FROM tbtco
    INTO @DATA(ls_alv_max_a)
    WHERE status = ‘A’"A 已取消(出错终止)
    AND periodic = ‘X’"周期性
    AND jobname = @gt_alv-jobname
    AND authckman = @sy-mandt
    AND sdldate = (
    SELECT MAX( sdldate ) AS sdldate
    FROM tbtco
    WHERE status = ‘A’
    AND periodic = ‘X’"周期性
    AND jobname = @gt_alv-jobname
    AND authckman = @sy-mandt
    AND sdldate = @sy-datum
    GROUP BY jobname
    )
    GROUP BY sdltime,sdldate,jobname
    .

    "获取最后一次执行时间-R 活动的(运行中)
    CLEAR gv_alv_r_count.
    SELECT COUNT( * )
    FROM tbtco
    INTO @gv_alv_r_count
    WHERE status = ‘R’"R 活动的(运行中)
    AND periodic = ‘X’"周期性
    AND jobname = @gt_alv-jobname
    AND authckman = @sy-mandt
    AND sdldate = (
    SELECT MAX( sdldate ) AS sdldate
    FROM tbtco
    WHERE status = ‘R’
    AND periodic = ‘X’"周期性
    AND jobname = @gt_alv-jobname
    AND authckman = @sy-mandt
    GROUP BY jobname
    )
    .

    "获取最后一次执行时间-F 已完成(结束)
    SELECT
    jobname,
    jobcount,
    sdltime,
    sdldate,
    sdlstrtdt,
    sdlstrttm,
    enddate,
    endtime
    FROM tbtco
    INTO TABLE @DATA(lt_alv_max_f)
          WHERE status = 'F'"F 已完成(结束)
          AND periodic = 'X'"周期性
          AND jobname = @gt_alv-jobname
          AND authckman = @sy-mandt
          AND sdldate = (
          SELECT MAX( sdldate ) AS sdldate
          FROM tbtco
          WHERE status = 'F'
          AND periodic = 'X'"周期性
          AND jobname = @gt_alv-jobname
          AND authckman = @sy-mandt
          GROUP BY jobname
          )
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25

    .
    IF sy-subrc = 0.
    SORT lt_alv_max_f BY jobcount DESCENDING.
    DELETE ADJACENT DUPLICATES FROM lt_alv_max_f COMPARING jobname.
    READ TABLE lt_alv_max_f INTO DATA(ls_alv_max_f) INDEX 1.
    ENDIF.

    IF ls_alv_max_a IS NOT INITIAL.
      IF ls_alv_max_a-sdldate > ls_alv_max_f-sdldate.
        CALL FUNCTION 'ZFM_DATE_DIFFERENCE'
          EXPORTING
            iv_date_beg = ls_alv_max_a-sdldate
            iv_time_beg = ls_alv_max_a-sdltime
            iv_date_end = ls_alv_max_f-sdldate
            iv_time_end = ls_alv_max_f-sdltime
          IMPORTING
            ev_message  = gt_alv-min_c.
    
        gt_alv-flag3 = 'X'.
    
      ELSEIF ls_alv_max_a-sdldate = ls_alv_max_f-sdldate.
        IF ls_alv_max_a-sdltime > ls_alv_max_f-sdltime.
          CALL FUNCTION 'ZFM_DATE_DIFFERENCE'
            EXPORTING
              iv_date_beg = ls_alv_max_a-sdldate
              iv_time_beg = ls_alv_max_a-sdltime
              iv_date_end = ls_alv_max_f-sdlstrtdt
              iv_time_end = ls_alv_max_f-sdlstrttm
            IMPORTING
              ev_message  = gt_alv-min_c.
    
          gt_alv-flag3 = 'X'.
    
        ENDIF.
      ENDIF.
    
    ENDIF.
    
    IF gv_alv_r_count > p_mins.
      gt_alv-flag2 = 'X'.
    ENDIF.
    
    IF ls_alv_max_f IS NOT INITIAL.
      DATA:lv_min_i TYPE int4.
      CALL FUNCTION 'ZFM_DATE_DIFFERENCE'
        EXPORTING
          iv_date_beg  = gt_alv-sdldate
          iv_time_beg  = gt_alv-sdltime
          iv_date_end  = ls_alv_max_f-sdlstrtdt
          iv_time_end  = ls_alv_max_f-sdlstrttm
        IMPORTING
          ev_message   = gt_alv-min_c
          ev_message_i = lv_min_i.
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    •  IF lv_min_i < p_mins * 60.
      
      • 1
    •    CLEAR gt_alv-min_c.
      
      • 1
    •  ENDIF.
      
      • 1

      ENDIF.

      "最后一次执行成功时间
      gt_alv-sdldate = ls_alv_max_f-enddate.
      gt_alv-sdltime = ls_alv_max_f-endtime.

    ENDFORM.
    &---------------------------------------------------------------------
    *& Form FRM_SEND_QYWX
    &---------------------------------------------------------------------

    •   错误消息推送企业微信
      
      • 1

    ----------------------------------------------------------------------
    FORM frm_send_qywx USING lv_head.

    DATA:lv_json TYPE string,
    lv_message TYPE char100,
    lv_status_c TYPE char1.

    •    "推送企业微信格式
      
      • 1
    •    lv_json = '{ "msgtype": "markdown", "markdown": {  "content": "### 异常JOB通知\n >JOB名称:' &&
      
      • 1
    •    'XXXXXX \n 程序名称:XXXXXX \n 最后一次执行时间:\n 频率:**5分钟** \n ' &&
      
      • 1
    •    '距最后一次执行时间: **50分钟** \n 检查时间:"  }}'.
      
      • 1

      “推送企业微信格式
      lv_json = ‘{ “msgtype”: “markdown”, “markdown”: ’ &&
      ‘{ “content”: " ’ && lv_head && ‘\n >JOB名称:’ && gt_alv-jobname &&
      ’ \n 程序名称:’ && gt_alv-progname &&
      ’ \n 变式名称:’ && gt_alv-variant &&
      ’ \n 最后一次执行完成时间:’
      && gt_alv-sdldate+0(4) &&‘/’&& gt_alv-sdldate+4(2) &&‘/’&& gt_alv-sdldate+6(2) && ‘,’
      && gt_alv-sdltime+0(2) &&‘:’&& gt_alv-sdltime+2(2) &&‘:’&& gt_alv-sdltime+4(2) &&
      ’ \n 频率:‘&& gt_alv-pl &&’ \n ’ &&
      ‘距最后一次执行时间: ’ && gt_alv-min_c && ' ‘&&
      ’ \n 检查时间:’
      && gt_alv-datum_check+0(4) &&’/‘&& gt_alv-datum_check+4(2) &&’/‘&& gt_alv-datum_check+6(2) && ‘,’
      && gt_alv-uzeit_check+0(2) &&’:‘&& gt_alv-uzeit_check+2(2) &&’:'&& gt_alv-uzeit_check+4(2) &&
      '” }}'.

      CALL FUNCTION ‘ZFM_SEND_CHECK_JOB’
      EXPORTING
      iv_json = lv_json
      IMPORTING
      ev_message = lv_message
      ev_status_c = lv_status_c.

      IF lv_status_c = ‘S’.
      MESSAGE ‘异常JOB推送企业微信成功’ TYPE ‘S’.
      ELSE.
      MESSAGE ‘异常JOB推送企业微信失败:’&& lv_message TYPE ‘S’ DISPLAY LIKE ‘E’.

      ENDIF.

    ENDFORM.

  • 相关阅读:
    Office Online Server Windows Server 2016 部署
    VB.net:VB.net编程语言学习之ADO.net基本名称空间与类的简介、案例应用(实现与SQL数据库编程案例)之详细攻略
    力扣刷题 数据结构与算法(十)
    ora-00439 未启用 bit-mapped indexes
    【java毕业设计源码】基于ssm/springboot的果蔬农产品微信小程序商城
    【Java 进阶篇】MySQL 数据控制语言(DCL):管理用户权限
    中南林业科技大学Java实验报告十二:数据库系统设计 - 从0到1搭建java可视化学生管理系统源代码
    Web前端面试题目及答案汇总
    Selenium的使用
    freeswitch-1.10.7性能测试
  • 原文地址:https://blog.csdn.net/FQHX_116/article/details/128150866