参数说明

参数

是否必填

说明

msgtype

消息类型,此时固定为template_card

template_card

具体的模版卡片参数

template_card的参数说明

参数

是否必填

说明

card_type

模版卡片的模版类型,文本通知模版卡片的类型为text_notice

source

卡片来源样式信息,不需要来源样式可不填写

source.icon_url

来源图片的url

source.desc

来源图片的描述,建议不超过13个字

main_title

模版卡片的主要内容,包括一级标题和标题辅助信息

main_title.title

一级标题,建议不超过26个字

main_title.desc

标题辅助信息,建议不超过30个字

emphasis_content

关键数据样式

emphasis_content.title

关键数据样式的数据内容,建议不超过10个字

emphasis_content.desc

关键数据样式的数据描述内容,建议不超过15个字

sub_title_text

二级普通文本,建议不超过112个字

horizontal_content_list

二级标题+文本列表,该字段可为空数组,但有数据的话需确认对应字段是否必填,列表长度不超过6

horizontal_content_list.type

链接类型,0或不填代表是普通文本,1 代表跳转url,2 代表下载附件

horizontal_content_list.keyname

二级标题,建议不超过5个字

horizontal_content_list.value

二级文本,如果horizontal_content_list.type是2,该字段代表文件名称(要包含文件类型),建议不超过26个字

horizontal_content_list.url

链接跳转的url,horizontal_content_list.type是1时必填

horizontal_content_list.media_id

附件的media_id,horizontal_content_list.type是2时必填

jump_list

跳转指引样式的列表,该字段可为空数组,但有数据的话需确认对应字段是否必填,列表长度不超过3

jump_list.type

跳转链接类型,0或不填代表不是链接,1 代表跳转url,2 代表跳转小程序

jump_list.title

跳转链接样式的文案内容,建议不超过13个字

jump_list.url

跳转链接的url,jump_list.type是1时必填

jump_list.appid

跳转链接的小程序的appid,jump_list.type是2时必填

jump_list.pagepath

跳转链接的小程序的pagepath,jump_list.type是2时选填

card_action

整体卡片的点击跳转事件,text_notice模版卡片中该字段为必填项

card_action.type

卡片跳转类型,0或不填代表不是链接,1 代表跳转url,2 代表打开小程序。text_notice模版卡片中该字段取值范围为[1,2]

card_action.url

跳转事件的url,card_action.type是1时必填

card_action.appid

跳转事件的小程序的appid,card_action.type是2时必填

card_action.pagepath

跳转事件的小程序的pagepath,card_action.type是2时选填

效果展示

ABAP推送企业微信机器人6-模版卡片类型_字段

Demo Code

*  PARAMETERS:P_FILE TYPE STRING.

DATA:LV_TX_ROBOT_WEBHOOK TYPE STRING VALUE 'https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=50d640d9-9ad6-4d39-98aa-c94c2002e6d4'.
DATA:LV_ZIF_ID LIKE ZHRT_0001-ZIF_ID,
LO_HTTP_CLIENT TYPE REF TO IF_HTTP_CLIENT,
LV_SERVICE TYPE STRING,
LV_RESULT_STRING TYPE STRING,
LV_LEN TYPE I,
LV_MSG TYPE STRING,
LV_MESSAGE TYPE STRING,
LV_HTTP_METHOD TYPE STRING,
LV_MEDIA_ID TYPE STRING,
LV_JSON_DATA TYPE STRING,
LV_BASE64 TYPE STRING, "BASE64
LV_BASE64_MD5 TYPE STRING, "BASE64
LV_BASE64_MD5_DECODE TYPE STRING, "BASE64
LS_RETURN TYPE BAPIRETURN.

*AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_file. "弹出选择文件对话框
* PERFORM FRM_GET_FILE.

START-OF-SELECTION.

LV_ZIF_ID = 'HR00000032'.
LV_HTTP_METHOD = IF_HTTP_REQUEST=>CO_REQUEST_METHOD_POST.

SELECT SINGLE *
INTO @DATA(LS_ZHRT_0001)
FROM ZHRT_0001
WHERE CLIENT EQ @SY-MANDT
AND ZIF_ID EQ @LV_ZIF_ID.
IF SY-SUBRC NE 0.
LS_RETURN-TYPE = 'E'.
LS_RETURN-MESSAGE = TEXT-E01."接口未配置
RETURN.
ENDIF.

IF LS_ZHRT_0001-ZIF_OPEN EQ SPACE.
LS_RETURN-TYPE = 'E'.
LS_RETURN-MESSAGE = TEXT-E01."接口启用
RETURN.
ENDIF.
* IF ET_TABLE[] IS NOT INITIAL.
*
* CALL FUNCTION 'ZZF_HR_TX_ROBOT_POST_FILE'
* EXPORTING
* IV_FIELD_NAME = IV_FIELD_NAME
* IMPORTING
* EV_MEDIA_ID = LV_MEDIA_ID
* TABLES
* ET_TABLE = ET_TABLE
* .
*
* ENDIF.

* PERFORM FRM_GET_BASE64 CHANGING LV_BASE64 LV_BASE64_MD5.
* PERFORM FRM_GET_BASE64_MD5 USING LV_BASE64 CHANGING LV_BASE64_MD5 .


LV_SERVICE = LS_ZHRT_0001-ZURL && LS_ZHRT_0001-ZPARA1 .
REPLACE 'HR_PARA1' IN LV_SERVICE WITH LS_ZHRT_0001-ZPARA1_STR.


CL_HTTP_CLIENT=>CREATE_BY_URL(
EXPORTING
URL = LV_SERVICE
IMPORTING
CLIENT = LO_HTTP_CLIENT
EXCEPTIONS
ARGUMENT_NOT_FOUND = 1
PLUGIN_NOT_ACTIVE = 2
INTERNAL_ERROR = 3
OTHERS = 4 ).

LO_HTTP_CLIENT->request->set_method( LV_HTTP_METHOD ).

* "设置字符类别
CALL METHOD LO_HTTP_CLIENT->request->set_header_field
EXPORTING
name = 'content-type'
value = 'application/json'.
LV_MSG =

'{' &&
'"msgtype": "template_card",' &&
'"template_card": {' &&
'"card_type":"text_notice",' &&
'"source":{' &&
'"icon_url":"https://wework.qpic.cn/wwpic/252813_jOfDHtcISzuodLa_1629280209/0",' &&
'"desc":"企业微信"' &&
'},' &&
'"main_title":{' &&
'"title":"欢迎使用企业微信",' &&
'"desc":"您的好友正在邀请您加入企业微信"' &&
'},' &&
'"emphasis_content":{' &&
'"title":"100",' &&
'"desc":"数据含义"' &&
'},' &&
'"sub_title_text":"下载企业微信还能抢红包!",' &&
'"horizontal_content_list":[' &&
'{' &&
'"keyname":"邀请人",' &&
'"value":"张三"' &&
'},' &&
'{' &&
'"keyname":"企微官网",' &&
'"value":"点击访问",' &&
'"type":1,' &&
'"url":"https://work.weixin.qq.com/?from=openApi"' &&
'}' &&
* '{' &&
* '"keyname":"企微下载",' &&
* '"value":"企业微信.apk",' &&
* '"type":2,' &&
* '"media_id":"MEDIAID"' &&
* '}' &&
'],' &&
'"jump_list":[' &&
'{' &&
'"type":1,' &&
'"url":"https://work.weixin.qq.com/?from=openApi",' &&
'"title":"企业微信官网"' &&
'}' &&
* '{' &&
* '"type":2,' &&
* '"appid":"APPID",' &&
* '"pagepath":"PAGEPATH",' &&
* '"title":"跳转小程序"' &&
* '}' &&
'],' &&
'"card_action":{' &&
'"type":1,' &&
'"url":"https://work.weixin.qq.com/?from=openApi"' &&
* '"appid":"APPID",' &&
* '"pagepath":"PAGEPATH"' &&
'}' &&
'}' &&
'}'.

LV_LEN = STRLEN( LV_MSG ).
CALL METHOD LO_HTTP_CLIENT->REQUEST->SET_CDATA
EXPORTING
DATA = LV_MSG
OFFSET = 0
LENGTH = LV_LEN.

"设置待传输内容
CALL METHOD LO_HTTP_CLIENT->SEND
EXCEPTIONS
HTTP_COMMUNICATION_FAILURE = 1
HTTP_INVALID_STATE = 2.
IF SY-SUBRC <> 0.
"操作失败,获取失败原因
LO_HTTP_CLIENT->GET_LAST_ERROR( IMPORTING MESSAGE = LV_MESSAGE ).
LS_RETURN-MESSAGE = LV_MESSAGE.
LS_RETURN-TYPE = 'E'.
RETURN..
ENDIF.

"读取远程服务返回的处理过结果。
CALL METHOD LO_HTTP_CLIENT->RECEIVE
EXCEPTIONS
HTTP_COMMUNICATION_FAILURE = 1
HTTP_INVALID_STATE = 2
HTTP_PROCESSING_FAILED = 3.
IF SY-SUBRC <> 0 .
LO_HTTP_CLIENT->GET_LAST_ERROR( IMPORTING MESSAGE = LV_MESSAGE ).
LS_RETURN-MESSAGE = LV_MESSAGE.
LS_RETURN-TYPE = 'E'.
RETURN.
ELSE.
LV_RESULT_STRING = LO_HTTP_CLIENT->RESPONSE->GET_CDATA( ).
CALL FUNCTION 'ZHTTP_UNICODE_TO_ZH'
EXPORTING
IV_STRING = LV_RESULT_STRING
IV_FLAG = '\u'
IMPORTING
RV_STRING = LV_RESULT_STRING.
LV_JSON_DATA = LV_RESULT_STRING.

ENDIF.

**&---------------------------------------------------------------------*
**& Form FRM_GET_FILE
**&---------------------------------------------------------------------*
**& text
**&---------------------------------------------------------------------*
**& --> p1 text
**& <-- p2 text
**&---------------------------------------------------------------------*
*FORM FRM_GET_FILE .
*
* DATA: IT_FILE TYPE FILETABLE WITH HEADER LINE,
* l_obj TYPE REF TO cl_gui_frontend_services,
* g_rc TYPE i.
*
* CREATE OBJECT L_OBJ.
* CALL METHOD L_OBJ->FILE_OPEN_DIALOG
* EXPORTING
* FILE_FILTER = '*.bmp;*.jpg;*.jpeg'
* INITIAL_DIRECTORY = 'C:\DATA'
* CHANGING
* FILE_TABLE = IT_FILE[]
* RC = G_RC.
* READ TABLE IT_FILE INDEX 1.
* P_FILE = IT_FILE-FILENAME.
*
*ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_GET_BASE64
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& <-- LV_BASE64
*&---------------------------------------------------------------------*
*FORM FRM_GET_BASE64 CHANGING P_LV_BASE64 P_LV_BASE64_MD5.
* DATA: LT_BIN_DATA TYPE STANDARD TABLE OF CHAR1024.
* DATA: LV_FILE_LENGTH TYPE I,
* LV_XSTRING TYPE XSTRING,
* LV_HASH TYPE MD5_FIELDS-HASH.
*
* CALL FUNCTION 'GUI_UPLOAD'
* EXPORTING
* FILENAME = P_FILE
* FILETYPE = 'BIN'
** HAS_FIELD_SEPARATOR = ' '
** HEADER_LENGTH = 0
** READ_BY_LINE = 'X'
** DAT_MODE = ' '
** CODEPAGE = ' '
** IGNORE_CERR = ABAP_TRUE
** REPLACEMENT = '#'
** CHECK_BOM = ' '
** VIRUS_SCAN_PROFILE =
** NO_AUTH_CHECK = ' '
* IMPORTING
* FILELENGTH = LV_FILE_LENGTH
** HEADER =
* TABLES
* DATA_TAB = LT_BIN_DATA
* EXCEPTIONS
* FILE_OPEN_ERROR = 1
* FILE_READ_ERROR = 2
* NO_BATCH = 3
* GUI_REFUSE_FILETRANSFER = 4
* INVALID_TYPE = 5
* NO_AUTHORITY = 6
* UNKNOWN_ERROR = 7
* BAD_DATA_FORMAT = 8
* HEADER_NOT_ALLOWED = 9
* SEPARATOR_NOT_ALLOWED = 10
* HEADER_TOO_LONG = 11
* UNKNOWN_DP_ERROR = 12
* ACCESS_DENIED = 13
* DP_OUT_OF_MEMORY = 14
* DISK_FULL = 15
* DP_TIMEOUT = 16
* OTHERS = 17
* .
* IF SY-SUBRC <> 0.
** MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
** WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
* ENDIF.
*
* CALL FUNCTION 'SCMS_BINARY_TO_XSTRING'
* EXPORTING
* INPUT_LENGTH = LV_FILE_LENGTH
* IMPORTING
* BUFFER = LV_XSTRING
* TABLES
* BINARY_TAB = LT_BIN_DATA
* EXCEPTIONS
* FAILED = 1
* .
*
* DATA: LV_JS TYPE REF TO CL_JAVA_SCRIPT,
* LV_JAVASCRIPT TYPE STRING,
* LV_RETURN TYPE STRING.
* LV_JS = cl_java_script=>create( ).
*
*
** CONCATENATE
** INTO LV_JAVASCRIPT.
** LV_JAVASCRIPT = 'var oXstring = "' && LV_XSTRING && '";'.
** CONCATENATE LV_JAVASCRIPT
** 'function xStringToBase64(xString) {'
** ' var encode = encodeURI(xString);'
** ' var base64 = btoa(encode);'
** ' return base64;'
** ' }'
** 'xStringToBase64(oXstring);'
** INTO LV_JAVASCRIPT SEPARATED BY cl_abap_char_utilities=>cr_lf.
*
*
**GET THE RETURN VALUE
** LV_RETURN = LV_JS->EVALUATE( LV_JAVASCRIPT ).
** P_LV_BASE64_MD5 = LV_RETURN.
*
*
*
* CALL FUNCTION 'SCMS_BASE64_ENCODE_STR'
* EXPORTING
* INPUT = LV_XSTRING
** INPUT_LENGTH = LV_FILE_LENGTH
* IMPORTING
* OUTPUT = P_LV_BASE64.
**
** DATA HASH TYPE MD5_FIELDS-HASH.
**
** CALL FUNCTION 'CALCULATE_HASH_FOR_CHAR'
** EXPORTING
** ALG = 'MD5'
** DATA = LV_XSTRING
** LENGTH = LV_FILE_LENGTH
** IMPORTING
** HASH = HASH.
**
** CALL FUNCTION 'MD5_CALCULATE_HASH_FOR_RAW'
*** EXPORTING
*** DATA = DATA
*** LENGTH = 0
*** VERSION = 1
** IMPORTING
** HASH = HASH
** TABLES
** DATA_TAB = LT_BIN_DATA
** EXCEPTIONS
** INTERNAL_ERROR = 1
** .
*
*
*
* CALL FUNCTION 'MD5_CALCULATE_HASH_FOR_CHAR'
* EXPORTING
* DATA = P_LV_BASE64
* LENGTH = 0
* VERSION = 1
* IMPORTING
* HASH = LV_HASH
** TABLES
** DATA_TAB = LT_BIN_DATA
* EXCEPTIONS
* NO_DATA = 1
* INTERNAL_ERROR = 2
* .
* P_LV_BASE64_MD5 = LV_HASH.
*
*
*ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_GET_BASE64_MD5
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> LV_BASE64
*& <-- LV_BASE64_MD5
*&---------------------------------------------------------------------*
FORM FRM_GET_BASE64_MD5 USING P_LV_BASE64
CHANGING P_LV_BASE64_MD5.
DATA HASH TYPE MD5_FIELDS-HASH.

CALL FUNCTION 'MD5_CALCULATE_HASH_FOR_CHAR'
EXPORTING
DATA = P_LV_BASE64
LENGTH = 0
VERSION = 1
IMPORTING
HASH = HASH
EXCEPTIONS
NO_DATA = 1
INTERNAL_ERROR = 2
.
P_LV_BASE64_MD5 = HASH.
ENDFORM.