SAP获取企业微信打开记录并更新HR相关数据

FUNCTION zfm_zhrrxxx.
*“----------------------------------------------------------------------
"“本地接口:
*” IMPORTING
*” VALUE(IV_BEG_DATUM) TYPE SY-DATUM
*" VALUE(IV_BEG_UZEIT) TYPE SY-UZEIT
*" VALUE(IV_END_DATUM) TYPE SY-DATUM
*" VALUE(IV_END_UZEIT) TYPE SY-UZEIT
*" EXPORTING
*" VALUE(EV_STATUS) TYPE CHAR1
*" VALUE(EV_RESPONSE) TYPE STRING
*" VALUE(EV_RESULTMSG) TYPE STRING
*" VALUE(EV_RESULTCODE) TYPE I
*" VALUE(EV_DATASTR) TYPE STRING
*" TABLES
*" ET_ZHRT008_I STRUCTURE ZHRT008_I OPTIONAL


DATA:lv_url TYPE string.
DATA:lv_http_client TYPE REF TO if_http_client.

"获取ztip配置表地址
PERFORM frm_get_ztip USING lv_url
ev_status
ev_response.

CHECK ev_status IS INITIAL.

"初始化HTTP
PERFORM frm_http_create USING lv_http_client
lv_url.

"传入参数转JSON
PERFORM frm_get_json USING iv_beg_datum
iv_beg_uzeit
iv_end_datum
iv_end_uzeit
ev_datastr.

"数据传递HTTP
PERFORM frm_send_data USING lv_http_client
ev_resultmsg
ev_resultcode
ev_datastr.

"返回参数JSON解析
PERFORM frm_parse_json TABLES et_zhrt008_i
USING ev_status
ev_response
ev_resultmsg
ev_resultcode
.

"解析后数据处理
PERFORM frm_processing_data TABLES et_zhrt008_i
USING ev_status
ev_response.

"关闭接口HTTP
PERFORM frm_http_close USING lv_http_client.

ENDFUNCTION.

----------------------------------------------------------------------
***INCLUDE LZFG_ZHR044F02.
----------------------------------------------------------------------
&---------------------------------------------------------------------
*& Form fmr_get_ztip
&---------------------------------------------------------------------
*& 获取ztip配置表地址
&---------------------------------------------------------------------
*& --> pv_url
*& --> pv_status
*& --> pv_response
&---------------------------------------------------------------------
FORM frm_get_ztip USING pv_url TYPE string
pv_status TYPE char1
pv_response TYPE string.

SELECT SINGLE
url
INTO pv_url
FROM ztip
WHERE proname = ‘ZFM_ZHRR072’.
IF sy-subrc <> 0.
pv_status = ‘E’.
pv_response = ‘ZTIP配置表没有地址’.
ENDIF.

ENDFORM.
&---------------------------------------------------------------------
*& Form frm_get_json
&---------------------------------------------------------------------
*& 传入参数转JSON
&---------------------------------------------------------------------
*& --> IV_BEG_DATUM
*& --> IV_BEG_UZEIT
*& --> IV_EDN_DATUM
*& --> IV_END_UZEIT
*& --> LV_JSON
&---------------------------------------------------------------------
FORM frm_get_json USING iv_beg_datum TYPE sy-datum
iv_beg_uzeit TYPE sy-uzeit
iv_end_datum TYPE sy-datum
iv_end_uzeit TYPE sy-uzeit
lv_json TYPE string.
TYPES: BEGIN OF ty_json,
starttime TYPE string,
endtime TYPE string,
END OF ty_json.

DATA:ls_json TYPE ty_json.

DATA(lv_beg_datum) = |{ iv_beg_datum DATE = ISO }| .
DATA(lv_beg_uzeit) = |{ iv_beg_uzeit TIME = ISO }| .
DATA(lv_edn_datum) = |{ iv_end_datum DATE = ISO }| .
DATA(lv_end_uzeit) = |{ iv_end_uzeit TIME = ISO }| .

CONCATENATE lv_beg_datum lv_beg_uzeit INTO ls_json-starttime SEPARATED BY space.
CONCATENATE lv_edn_datum lv_end_uzeit INTO ls_json-endtime SEPARATED BY space.

lv_json = /ui2/cl_json=>serialize( data = ls_json )."内表转JSON

TRANSLATE lv_json TO LOWER CASE.

ENDFORM.
&---------------------------------------------------------------------
*& Form frm_http_create
&---------------------------------------------------------------------
*& 初始化HTTP
&---------------------------------------------------------------------
*& --> PV_HTTP_CLIENT
*& --> PV_URL
&---------------------------------------------------------------------
FORM frm_http_create USING pv_http_client TYPE REF TO if_http_client
pv_url TYPE string.

"URL接连
CALL METHOD cl_http_client=>create_by_url
EXPORTING
url = pv_url
IMPORTING
client = pv_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 pv_http_client IS NOT INITIAL.

pv_http_client->propertytype_logon_popup = pv_http_client->co_disabled.

CALL METHOD pv_http_client->request->set_header_field
EXPORTING
name = ‘~request_method’
value = ‘POST’.

CALL METHOD pv_http_client->request->set_header_field
EXPORTING
name = ‘~server_protocol’
value = ‘HTTP/1.1’.

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

ENDFORM.

&---------------------------------------------------------------------
*& Form frm_send_data
&---------------------------------------------------------------------
*& 数据传递
&---------------------------------------------------------------------
*& --> PV_JSON
*& --> PV_HTTP_CLIENT
*& --> EV_STATUS
*& --> EV_RESPONSE
*& --> EV_RESULTMSG
*& --> EV_RESULTCODE
*& --> EV_DATASTR
&---------------------------------------------------------------------
FORM frm_send_data USING pv_http_client TYPE REF TO if_http_client
pv_resultmsg TYPE string
pv_resultcode TYPE i
pv_datastr TYPE string.

DATA(lv_len) = strlen( pv_datastr ).

CALL METHOD pv_http_client->request->set_cdata
EXPORTING
data = pv_datastr
offset = 0
length = lv_len.

"发送请求
pv_http_client->send( EXCEPTIONS http_communication_failure = 1
http_invalid_state = 2 ).
IF sy-subrc <> 0.
"操作失败,获取失败原因
pv_http_client->get_last_error( IMPORTING message = pv_resultmsg ).

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

ENDIF.

ENDFORM.
&---------------------------------------------------------------------
*& Form frm_parse_json
&---------------------------------------------------------------------
*& 返回参数JSON解析
&---------------------------------------------------------------------
*& --> PT_ZHRT008_I
*& --> PV_DATASTR
*& --> PV_STATUS
*& --> PV_RESPONSE
&---------------------------------------------------------------------
FORM frm_parse_json TABLES pt_zhrt008_i STRUCTURE zhrt008_i
USING pv_status TYPE char1
pv_response TYPE string
pv_resultmsg TYPE string
pv_resultcode TYPE i.

DATA:ls_zhrt008_i TYPE zhrt008_i.

TYPES: BEGIN OF t_items,
ename TYPE string,
checktime TYPE string,
pin TYPE string,
verify TYPE string,
deptnumber TYPE string,
photograph TYPE string,
alias TYPE string,
state TYPE string,
sn TYPE string,
stateno TYPE string,
deptname TYPE string,
id TYPE string,
END OF t_items.
TYPES: tt_items TYPE STANDARD TABLE OF t_items WITH DEFAULT KEY.

TYPES: BEGIN OF t_data,
count TYPE string,
items TYPE tt_items,
END OF t_data.

TYPES: BEGIN OF t_json,
msg TYPE string,
data TYPE t_data,
ret TYPE string,
END OF t_json.

DATA:lv_begda TYPE string.
DATA:lv_beguz TYPE string.

DATA:es_json TYPE t_json.

IF pv_resultcode = ‘200’.

"解析异常捕捉
TRY.
    CALL METHOD /ui2/cl_json=>deserialize
      EXPORTING
        json = pv_resultmsg
      CHANGING
        data = es_json.

    pv_response = es_json-msg.

    REFRESH pt_zhrt008_i.

    IF es_json-data-items[] IS NOT INITIAL.

      LOOP AT es_json-data-items INTO DATA(ls_items).
        CLEAR:ls_zhrt008_i.
  •        ls_zhrt008_i-seqnr = ls_items-."序号
    
  •        ls_zhrt008_i-guid  = ls_items-."GUID
          ls_zhrt008_i-zausw = ls_items-pin."SAP工号
    
  •        ls_zhrt008_i-zkqkh = ls_items-."考勤卡号
    
  •        checktime
          SPLIT ls_items-checktime AT space INTO lv_begda lv_beguz.
    
  •        ls_zhrt008_i-begda = ls_items-."打卡日期
          ls_zhrt008_i-begda = lv_begda+0(4) && lv_begda+5(2) && lv_begda+8(2)."打卡日期
    
  •        ls_zhrt008_i-beguz = ls_items-."打卡时间
          ls_zhrt008_i-beguz = lv_beguz+0(2) && lv_beguz+3(2) && lv_beguz+6(2)."打卡时间
    
          APPEND ls_zhrt008_i TO pt_zhrt008_i.
        ENDLOOP.
    
      ENDIF.
    
    CATCH cx_sy_move_cast_error.
      pv_response = pv_resultmsg.
    

    ENDTRY.

    ELSE.

    ENDIF.

ENDFORM.
&---------------------------------------------------------------------
*& Form frm_processing_data
&---------------------------------------------------------------------
*& 解析后数据处理
&---------------------------------------------------------------------
*& --> PT_ZHRT008_I
*& --> PV_STATUS
*& --> PV_RESPONSE
&---------------------------------------------------------------------
FORM frm_processing_data TABLES pt_zhrt008_i STRUCTURE zhrt008_i
USING pv_status TYPE char1
pv_response TYPE string.

DATA: lv_seqnr TYPE zeseqnr .
DATA: lv_guid TYPE guid_32 .

IF pt_zhrt008_i[] IS NOT INITIAL.

SELECT
  zkqkh,
  pernr,
  endda
  FROM pa0050
  INTO TABLE @DATA(lt_pa0050)
  FOR ALL ENTRIES IN @pt_zhrt008_i
  WHERE pernr = @pt_zhrt008_i-zausw.

SORT lt_pa0050 BY pernr endda DESCENDING.
DELETE ADJACENT DUPLICATES FROM lt_pa0050 COMPARING pernr.

CALL FUNCTION 'BRF_GUID_CREATE'
  IMPORTING
    ev_guid_32 = lv_guid.

ENDIF.

LOOP AT pt_zhrt008_i INTO DATA(ls_zhrt008_i).

READ TABLE lt_pa0050 INTO DATA(ls_pa0050) WITH KEY pernr = ls_zhrt008_i-zausw BINARY SEARCH.
IF sy-subrc = 0.
  ls_zhrt008_i-zkqkh = ls_pa0050-zkqkh.
ENDIF.

ls_zhrt008_i-guid = lv_guid.

"获取序号流水号
CLEAR lv_seqnr.
PERFORM frm_get_seqnr USING lv_seqnr.

ls_zhrt008_i-seqnr = lv_seqnr.

MODIFY pt_zhrt008_i FROM ls_zhrt008_i.

ENDLOOP.

IF pt_zhrt008_i[] IS NOT INITIAL.
MODIFY zhrt008_i FROM TABLE pt_zhrt008_i.
IF sy-subrc = 0.
COMMIT WORK AND WAIT .
pv_status = ‘S’.

ELSE.
  ROLLBACK WORK.
  pv_status = 'E'.

ENDIF.

ELSE.
pv_status = ‘E’.

ENDIF.

ENDFORM.
&---------------------------------------------------------------------
*& Form frm_http_close
&---------------------------------------------------------------------
*& 关闭接口
&---------------------------------------------------------------------
*& --> LV_HTTP_CLIENT
&---------------------------------------------------------------------
FORM frm_http_close USING pv_http_client TYPE REF TO if_http_client.

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

ENDFORM.
&---------------------------------------------------------------------
*& Form FRM_GET_SEQNR
&---------------------------------------------------------------------
*& 获取序号流水号
&---------------------------------------------------------------------
*& --> PV_SEQNR
&---------------------------------------------------------------------
FORM frm_get_seqnr USING pv_seqnr TYPE zeseqnr.

CALL FUNCTION ‘NUMBER_RANGE_ENQUEUE’
EXPORTING
object = ‘ZSEQNR_KQ’
EXCEPTIONS
foreign_lock = 1
object_not_found = 2
system_failure = 3
OTHERS = 4.
IF sy-subrc = 0.
*获取下个数字
CALL FUNCTION ‘NUMBER_GET_NEXT’
EXPORTING
nr_range_nr = ‘M1’ "在编号范围中分配的序列号
object = ‘ZSEQNR_KQ’ "编码对象名称
IMPORTING
number = pv_seqnr "输出生成的流水号
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.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ELSE.
*解锁
CALL FUNCTION ‘NUMBER_RANGE_DEQUEUE’
EXPORTING
object = ‘ZSEQNR_KQ’
EXCEPTIONS
object_not_found = 1
OTHERS = 2.
ENDIF.

ENDIF.
ENDFORM.

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

放弃幻想_

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

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

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

打赏作者

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

抵扣说明:

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

余额充值