场景:异常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,
    
  •    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,
    
  •    min         TYPE i,min_c       TYPE char100,"当前检查时间datum_check TYPE sy-datum,uzeit_check TYPE sy-uzeit,END OF gt_alv.
    

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-reaxservers_pname FOR tbtcp-progname.
    

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
    

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

  • –> 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.

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 INITIALOR 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报错ST22lv_head = '### 最后一次JOB报错ST22通知'.PERFORM frm_send_qywx USING lv_head."错误消息推送企业微信ENDIF.ENDIF.ENDIF.MODIFY gt_alv.

ENDLOOP.

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

ENDFORM.

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

  •   ALV展示
    

----------------------------------------------------------------------
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'    "状态
    
  • i_callback_user_command  = 'FRM_USER_COMMAND' "控制指令
    
  • it_event_exit      = gt_event_exit
    
  • i_grid_title       = ls_title
    
  • i_grid_settings    = i_grid_settings
    

    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设置
    

----------------------------------------------------------------------
----------------------------------------------------------------------
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字段设置
    

----------------------------------------------------------------------
----------------------------------------------------------------------
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 活动的(运行中)
    
  •     "Y 就绪的
    
  •     "P 已调度的
    
  •     "S 已释放
    
  •     "A 已取消(出错终止)
    
  •     "F 已完成(结束)
    
  •     "Z Released/Susp.(无中文)
    

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

  •  -->p_status   text
    

----------------------------------------------------------------------
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-jobnameAND authckman = @sy-mandtAND sdldate = (SELECT MAX( sdldate ) AS sdldateFROM tbtcoWHERE status = 'F'AND periodic = 'X'"周期性AND jobname = @gt_alv-jobnameAND authckman = @sy-mandtGROUP BY jobname)

.
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'EXPORTINGiv_date_beg = ls_alv_max_a-sdldateiv_time_beg = ls_alv_max_a-sdltimeiv_date_end = ls_alv_max_f-sdldateiv_time_end = ls_alv_max_f-sdltimeIMPORTINGev_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'EXPORTINGiv_date_beg = ls_alv_max_a-sdldateiv_time_beg = ls_alv_max_a-sdltimeiv_date_end = ls_alv_max_f-sdlstrtdtiv_time_end = ls_alv_max_f-sdlstrttmIMPORTINGev_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'EXPORTINGiv_date_beg  = gt_alv-sdldateiv_time_beg  = gt_alv-sdltimeiv_date_end  = ls_alv_max_f-sdlstrtdtiv_time_end  = ls_alv_max_f-sdlstrttmIMPORTINGev_message   = gt_alv-min_cev_message_i = lv_min_i.
  •  IF lv_min_i < p_mins * 60.
    
  •    CLEAR gt_alv-min_c.
    
  •  ENDIF.
    

    ENDIF.

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

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

  •   错误消息推送企业微信
    

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

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

  •    "推送企业微信格式
    
  •    lv_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 检查时间:"  }}'.
    

    “推送企业微信格式
    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 频率:<font color=“info”>‘&& gt_alv-pl &&’ \n ’ &&
    ‘距最后一次执行时间: <font color=“warning”>’ && 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.

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

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

    "推送企业微信格式lv_json = '{ "msgtype": "markdown", "markdown": ' && ...

  2. 后台nodejs程序如何主动推送数据给浏览器

    我们在浏览器里看到的下列数据都是从后台主动推送到浏览器的: 后台nodejs程序推送的数据: 通过一个无限循环每隔5秒推送一些随机数到前台: TCPClient发送数据给Orchestra,Orach ...

  3. 小程序消息主动推送php,微信小程序有几种推送消息的方式

    微信小程序有5种推送消息的方式,分别为:1.小票机订单提醒,实现对商家的消息提醒:2.短信提醒:3.模板消息,各种动态可及时掌握:4.公众号订单提醒:5.消息主动推送,商家主动出击.推销自己的最好手段 ...

  4. php socket主动推送消息,PHP使用WebSocket主动推送【微信小程序接收】

    WebSocket.jpeg Websocket是一种服务端和客户端可以持久连接的通信协议,我们可以利用WebSocket的特性实现服务器主动向客户端推送消息的功能. 这里我们用TP5.1框架结合Wo ...

  5. 公众号向特定用户主动推送消息_SAP系统和微信集成的系列教程之三:微信用户关注公众号之后,自动在SAP C4C系统创建客户主数据...

    这是Jerry 2020年的第84篇文章,也是汪子熙公众号总共第266篇原创文章. 本系列的英文版Jerry写作于2017年,这个教程总共包含十篇文章,发表在SAP社区上: https://blogs ...

  6. 微信公众号为指定openid用户推送消息

    微信公众号为指定openid用户推送消息 微信提供的开放接口中,有两个给指定openid的用户发送信息的接口,适用场景应该是向 预约用户或者中奖用户发送消息. 第一个接口:客服发送消息 请求方式: P ...

  7. gitlab推送企业微信机器人项目代码

    一.gitlab推送企业微信机器人项目代码 # coding=utf-8 """@Project :pachong-master@File :gitlab_wechat. ...

  8. 企业微信api接口调用-触发推送企业微信微信好友

    企业微信SDK接口API调用-触发推送企业微信微信好友 /*** 触发企业微信推送微信好友列表* @author wechat:happybabby110* @blog http://www.wlka ...

  9. 企业微信SDK接口API调用-触发推送企业微信微信好友

    企业微信SDK接口API调用-触发推送企业微信微信好友 /**      * 触发企业微信推送微信好友列表      * @author wechat:happybabby110      * @bl ...

最新文章

  1. 作为一名程序员为什么要用vim作为自己的IDE编辑器
  2. mv 重命名或移动文件
  3. java怎么读取word某一页内容_Word页码设置的3点技巧,提高排版效率,减少不必要烦恼...
  4. 【转】2010全球最值得模仿的230个网站
  5. html中怎么获取搜索框中的值,百度API 搜索框,获取相应的地点的uid
  6. 浅谈c++静态绑定、动态绑定
  7. OCF 试图为物联网建立标准,但它面临着不小的挑战
  8. PostSQL编写经验(利用坐标值,创建空间要素字段)
  9. 通过mtd读写flash_flash的读写与擦除
  10. 利用树莓派为HP LaserJet 1020配置无线打印功能
  11. jquery boxy插件
  12. 北斗时钟系统(子母钟系统)设计原理架构
  13. uni-app 小程序dom转img 生成海报插件Painter;解决引入网络图片真机显示空白问题;解决生成的图片模糊问题
  14. hadoop cgroup源码解读
  15. 内部排序 (四):选择排序 Selection Sorting (简单选择排序、堆排序)
  16. 使用Vivado生成ADI的ADC例程(以AD9680为例)
  17. 推荐几个我认为值得关注的公众号
  18. 2021安徽计算机二级报名时间,2021年安徽计算机二级考试时间
  19. 异地两个服务器延迟怎样降低,网络延迟怎么解决?教你两个有效的解决方法
  20. ZWAVE COMMAND_CLASS_HAIL, Aeotec doorbell notification

热门文章

  1. 苹果加内存-macbook pro 升级内存
  2. 中国集体经济杂志中国集体经济杂志社中国集体经济编辑部2023年第6期目录
  3. LeetCode 买卖股票的最佳时机 - 超详细讲解系列题
  4. influxdb配置说明
  5. 虽获滴滴投资,但我们依旧不看好ofo的未来
  6. ajax(面试重点)
  7. VR全景能给公司带来什么好处
  8. Windows Server 2012 将【我的电脑】添加到桌面图标
  9. 计算机音乐谱子薛之谦,薛之谦丑八怪歌词是什么意思 计算器谱子
  10. Runnable 注解注入