SAP 接口主动推送企业微信异常消息

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

    "推送企业微信格式
    lv_json = '{ "msgtype": "markdown", "markdown": ' &&
    '{  "content": "### 异常JOB通知\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 频率:<font color=\"info\">**'&& gt_alv-pl &&'**</font> \n ' &&
    '距最后一次执行时间: <font color=\"warning\">**' && gt_alv-min_c && '**</font> '&&
    ' \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) &&
    '"  }'.

源码
FUNCTION zfm_send_check_job.
*“----------------------------------------------------------------------
"“本地接口:
*” IMPORTING
*” VALUE(IV_JSON) TYPE STRING OPTIONAL
*" EXPORTING
*" VALUE(EV_RESULTMSG) TYPE STRING
*" VALUE(EV_STATUS) TYPE I
*" VALUE(EV_MESSAGE) TYPE CHAR100
*" VALUE(EV_STATUS_C) TYPE CHAR1
*"----------------------------------------------------------------------
DATA:lv_url TYPE string.
DATA:lv_http_client TYPE REF TO if_http_client.
DATA:lv_http_method TYPE string.

  • iv_json = ‘{ “msgtype”: “markdown”, “markdown”: { “content”: "### 异常JOB通知\n >JOB名称:’ &&

  •        'XXXXXX \n 程序名称:XXXXXX \n 最后一次执行时间:\n 频率:<font color=\"info\">**5分钟**</font> \n ' &&
    
  •        '距最后一次执行时间: <font color=\"warning\">**50分钟**</font> \n 检查时间:"  }'.
    

    SELECT SINGLE url
    INTO lv_url
    FROM ztip
    WHERE proname = ‘ZFM_SEND_CHECK_JOB’.
    IF sy-subrc <> 0.
    MESSAGE ‘ZTIP配置表没有地址’ TYPE ‘E’ DISPLAY LIKE ‘S’.
    RETURN.
    ENDIF.

    "记录日志使用
    DATA: ls_log_tab TYPE zcat_log_info.
    DATA: lv_nr_range_nr TYPE inri-nrrangenr,
    lv_object TYPE inri-object.

  • *写入日志信息。
    lv_object = ‘ZCANR001’.
    lv_nr_range_nr = ‘01’.
    CALL FUNCTION ‘NUMBER_GET_NEXT’
    EXPORTING
    nr_range_nr = lv_nr_range_nr
    object = lv_object
    quantity = ‘1’
    IMPORTING
    number = ls_log_tab-zlogn "日志编号。
    EXCEPTIONS
    interval_not_found = 1
    number_range_not_intern = 2
    object_not_found = 3
    quantity_is_0 = 4
    quantity_is_not_1 = 5
    interval_overflow = 6
    buffer_overflow = 7
    OTHERS = 8.
    CALL TRANSFORMATION id
    SOURCE
    lv_url = lv_url
    iv_json = iv_json
    RESULT XML ls_log_tab-reque .
    ls_log_tab-zsyss = ‘企业微信消息’ .
    ls_log_tab-funco = ‘ZFM_SEND_CHECK_JOB’.
    ls_log_tab-intern = ‘后台JOB检查结果自动推送企业微信’ .
    ls_log_tab-ernam = sy-uname .
    ls_log_tab-erdat = sy-datum .
    ls_log_tab-ertim = sy-uzeit .
    ls_log_tab-ftype = ‘SOAP’ .
    MODIFY zcat_log_info FROM ls_log_tab .
    COMMIT WORK AND WAIT .

"URL接连
CALL METHOD cl_http_client=>create_by_url
EXPORTING
url = lv_url
IMPORTING
client = lv_http_client
EXCEPTIONS
argument_not_found = 1
plugin_not_active = 2
internal_error = 3
OTHERS = 4.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno WITH
sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.

CHECK lv_http_client IS NOT INITIAL.

lv_http_method = if_http_request=>co_request_method_post.
lv_http_client->request->set_method( lv_http_method ).

lv_http_client->propertytype_logon_popup = lv_http_client->co_disabled.

CALL METHOD lv_http_client->request->set_header_field
EXPORTING
name = ‘Content-Type’
value = ‘application/json’.

DATA(lv_len) = strlen( iv_json ).

CALL METHOD lv_http_client->request->set_cdata
EXPORTING
data = iv_json
offset = 0
length = lv_len.

"发送请求
lv_http_client->send( EXCEPTIONS http_communication_failure = 1
http_invalid_state = 2 ).

IF sy-subrc <> 0.
"操作失败,获取失败原因
lv_http_client->get_last_error( IMPORTING message = ev_resultmsg ).

ELSE.
"读取远程服务返回的处理过结果。
lv_http_client->receive( EXCEPTIONS http_communication_failure = 1
http_invalid_state = 2
http_processing_failed = 3 ).
IF sy-subrc <> 0 .
lv_http_client->get_last_error( IMPORTING message = ev_resultmsg ).
ELSE.
"读取返回返回内容
ev_resultmsg = lv_http_client->response->get_cdata( ).
"获取HTTP返回值
lv_http_client->response->get_status( IMPORTING code = ev_status ).
ENDIF.
ENDIF.

IF lv_http_client IS NOT INITIAL.
CALL METHOD lv_http_client->close.
ENDIF.

"{“errcode”:0,“errmsg”:"ok. WARNING: json missing last curly brackets. "}
TYPES:BEGIN OF ty_json,
errcode TYPE string,
errmsg TYPE string,
END OF ty_json.

DATA:ls_json TYPE ty_json.
"解析异常捕捉
TRY.
CALL METHOD /ui2/cl_json=>deserialize
EXPORTING
json = ev_resultmsg
CHANGING
data = ls_json.

  IF ls_json-errcode = '0'.
    ev_message = ls_json-errmsg.
    ev_status_c = 'S'.

  ELSE.
    ev_message = ev_resultmsg.
    ev_status_c = 'E'.

  ENDIF.

CATCH cx_sy_move_cast_error.
  ev_message = ev_resultmsg.
  ev_status_c = 'E'.

ENDTRY.

*调用日志。
CALL TRANSFORMATION id
SOURCE
ev_message = ev_message
ev_status_c = ev_status_c
ev_resultmsg = ev_resultmsg
ev_status = ev_status
RESULT XML ls_log_tab-respo .
REPLACE FIRST OCCURRENCE OF ‘/’ IN ls_log_tab-innid WITH space .
CONDENSE ls_log_tab-innid .

UPDATE zcat_log_info
SET respo = ls_log_tab-respo
innid = ls_log_tab-innid
ifmsg = ev_status_c
WHERE zlogn = ls_log_tab-zlogn.
IF sy-subrc = 0 .
COMMIT WORK AND WAIT .
ENDIF .

ENDFUNCTION.

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

放弃幻想_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值