FUNCTION zhrf_qw_remind.
*"----------------------------------------------------------------------
*"*"本地接口:
*" IMPORTING
*" REFERENCE(IV_REQUEST_TYPE) TYPE STRING DEFAULT 'POST'
*" REFERENCE(IV_ZIF_ID) TYPE ZHRT_0001-ZIF_ID
*" REFERENCE(IV_QWID) TYPE STRING
*" REFERENCE(IV_MESSAGE) TYPE STRING
*" REFERENCE(IV_MSGTYPE) TYPE ZEHR_MSGTYPE OPTIONAL
*" REFERENCE(IV_MESSAGE2) TYPE STRING OPTIONAL
*" REFERENCE(IV_MESSAGE3) TYPE STRING OPTIONAL
*" REFERENCE(IV_MESSAGE4) TYPE STRING OPTIONAL
*" EXPORTING
*" REFERENCE(E_RESPOND) TYPE STRING
*" REFERENCE(E_RETURN) TYPE BAPIRETURN
*"----------------------------------------------------------------------
/afl/log_init.
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,
ls_return TYPE bapireturn.
DATA:lv_data TYPE REF TO data.
DATA:lv_msgtype TYPE zehr_msgtype.
DATA:lv_msgtype_text TYPE string.
DATA:lv_token TYPE string.
"取提醒类型
SELECT * INTO TABLE @DATA(lt_dd07t) FROM dd07t WHERE domname EQ 'ZDHR_MSGTYPE' AND ddlanguage EQ @sy-langu .
SORT lt_dd07t BY domvalue_l.
lv_msgtype = iv_msgtype.
IF lv_msgtype IS INITIAL.
lv_msgtype = '1'.
ENDIF.
READ TABLE lt_dd07t ASSIGNING FIELD-SYMBOL(<ls_msgtype>) WITH KEY domvalue_l = lv_msgtype BINARY SEARCH.
IF sy-subrc EQ 0.
lv_msgtype_text = <ls_msgtype>-ddtext.
ENDIF.
"POST
lv_http_method = if_http_request=>co_request_method_post.
DATA:e_data TYPE string.
DATA:ls_data TYPE REF TO data.
FIELD-SYMBOLS:<fs_return> TYPE any,
<fs_value> TYPE any.
DATA:lv_field_symbols_string TYPE string.
DATA:lv_id TYPE zhrt_0001-zif_id.
IF iv_zif_id EQ 'HR00000052'.
lv_id = 'HR00000053'.
ELSE.
lv_id = 'HR00000047'.
ENDIF.
CALL FUNCTION 'ZZF_QW_TOKEN'
EXPORTING
iv_zif_id = lv_id
iv_request_type = 'GET'
IMPORTING
e_data = e_data
e_return = e_return.
ls_data = /ui2/cl_json=>generate( json = e_data ).
IF ls_data IS NOT INITIAL.
ASSIGN ls_data->* TO <fs_return>.
lv_field_symbols_string = '<FS_RETURN>-access_token->*'.
ASSIGN (lv_field_symbols_string) TO <fs_value>.
ENDIF.
CHECK <fs_value> IS ASSIGNED.
SELECT SINGLE *
INTO @DATA(ls_zhrt_0001)
FROM zhrt_0001
WHERE client EQ @sy-mandt
AND zif_id EQ @iv_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.
lv_service = ls_zhrt_0001-zurl .
REPLACE 'ACCESS_TOKEN' IN lv_service WITH <fs_value>.
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'.
CASE lv_msgtype.
WHEN '1'."文本消息
lv_msg =
'{' &&
'"touser":"' && iv_qwid && '",' &&
'"msgtype": ' && '"' && lv_msgtype_text && '"' && ','&&
'"agentid": ' && ls_zhrt_0001-zpara1_str && ',' &&
'"text": {' &&
'"content": ' && '"' && iv_message && '"' && '},'&&
'"safe":0,' &&
'"enable_id_trans":0,' &&
'"enable_duplicate_check":0,' &&
'"duplicate_check_interval":0' &&
'}'.
WHEN '2'."图片消息
WHEN '3'."语音消息
WHEN '4'."视频消息
WHEN '5'."文件消息
WHEN '6'."文本卡片消息
WHEN '7'."图文消息
lv_msg =
'{'
&&
'"touser":"' && iv_qwid && '",' &&
'"msgtype": ' && '"' && lv_msgtype_text && '"' && ',' &&
'"agentid": ' && ls_zhrt_0001-zpara1_str && ',' &&
'"news": {' &&
'"articles" : [' &&
'{' &&
'"title" : ' && '"' && iv_message && '"' && ',' &&
'"description" : ' && '"' && iv_message2 && '"' && ',' &&
'"url" : ' && '"' && iv_message3 && '"' && ',' &&
'"picurl" : ' && '"' && iv_message4 && '"' && ',' &&
'}' &&
']' &&
'}' &&
'}'.
WHEN '8'."图文消息(mpnews)
WHEN '9'."markdown消息
lv_msg =
'{' &&
'"touser":"' && iv_qwid && '",' &&
'"msgtype": ' && '"' && lv_msgtype_text && '"' && ','&&
'"agentid": ' && ls_zhrt_0001-zpara1_str && ',' &&
'"markdown": {' &&
'"content": ' && '"' && iv_message && '"' && '}' &&
'}'.
WHEN '10'."小程序通知消息
WHEN '11'."模板卡片消息
ENDCASE.
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( ).
e_respond = lv_result_string.
CALL FUNCTION 'ZHTTP_UNICODE_TO_ZH'
EXPORTING
iv_string = lv_result_string
iv_flag = '\u'
IMPORTING
rv_string = lv_result_string.
lv_data = /ui2/cl_json=>generate( json = lv_result_string ).
IF lv_data IS NOT INITIAL.
ASSIGN lv_data->* TO <fs_return>.
ASSIGN ('<FS_RETURN>-errcode->*') TO FIELD-SYMBOL(<fs_code>).
ASSIGN ('<FS_RETURN>-errmsg->*') TO FIELD-SYMBOL(<fs_msg>).
IF <fs_code> IS ASSIGNED AND <fs_msg> IS ASSIGNED.
IF <fs_code> EQ 0.
e_return-type = 'S'.
e_return-message = <fs_msg>.
ELSE.
e_return-type = 'E'.
e_return-message = <fs_msg>.
ENDIF.
ENDIF.
ENDIF.
ENDIF.
/afl/save 'HR' 'QW' iv_qwid.
ENDFUNCTION.
用ABAP 企微应用推送消息样例
最新推荐文章于 2024-05-20 12:50:25 发布
1408

被折叠的 条评论
为什么被折叠?



