FUNCTION z_acc_document_id_post.
*"----------------------------------------------------------------------
*"*"本地接口:
*" IMPORTING
*" VALUE(I_REQUEST) TYPE STRING OPTIONAL
*" EXPORTING
*" VALUE(E_RESPONSE) TYPE STRING
*"----------------------------------------------------------------------
TABLES :Zoas_log.
TYPES:BEGIN OF Freturnid_data,
success TYPE string,
content TYPE string,
END OF Freturnid_data.
* TYPES:BEGIN OF Base_data,
* i_status TYPE char01,
* i_oaid TYPE string,
* i_type1 TYPE string,
* i_type2 TYPE string,
* i_type3 TYPE string,
* END OF Base_data.
* DATA :lt_data type TABLE OF Base_data,
* ls_data type Base_data.
DATA:lv_time TYPE string,
str_in TYPE string,
lt_oalog TYPE TABLE OF zoas_log,
ls_oalog TYPE zoas_log,
lt_Freturn TYPE TABLE OF Freturnid_data,
ls_oachange TYPE zstru_acc_document_post_output,
lW_RETURN TYPE zstru_acc_document_post_output,
ls_Freturn TYPE Freturnid_data.
TYPES:BEGIN OF baseinfo,
type1 TYPE char10,
type2 TYPE char20,
type3 TYPE char20,
username TYPE char20,
useracount TYPE char20,
id TYPE char40,
status TYPE char1,
END OF baseinfo.
DATA : lv_taskname TYPE char30,
i_type1 TYPE char10,
i_type2 TYPE char20,
i_type3 TYPE char20,
i_username TYPE char20,
i_useracount TYPE char20,
i_oaid TYPE char40,
i_status TYPE char1.
DATA : l_encoding(20),
lt_base TYPE TABLE OF baseinfo,
ls_base TYPE baseinfo.
IF i_request IS INITIAL .
STOP.
ENDIF.
*INCLUDE zhs_log_start.
CALL METHOD cl_http_utility=>unescape_url
EXPORTING
escaped = i_request
RECEIVING
unescaped = str_in.
REPLACE ALL OCCURRENCES OF 'type3' IN str_in WITH '"type3"'.
REPLACE ALL OCCURRENCES OF 'type2' IN str_in WITH '"type2"'.
REPLACE ALL OCCURRENCES OF 'id' IN str_in WITH '"id"'.
REPLACE ALL OCCURRENCES OF 'type1' IN str_in WITH '"type1"'.
REPLACE ALL OCCURRENCES OF 'username' IN str_in WITH '"username"'.
REPLACE ALL OCCURRENCES OF 'useracount' IN str_in WITH '"useracount"'.
REPLACE ALL OCCURRENCES OF 'status' IN str_in WITH '"status"'.
REPLACE ALL OCCURRENCES OF '&' IN str_in WITH ','.
REPLACE ALL OCCURRENCES OF '=' IN str_in WITH ':'.
str_in ='[{'&& str_in &&'}]'.
/ui2/cl_json=>deserialize( EXPORTING json = str_in
pretty_name = /ui2/cl_json=>pretty_mode-camel_case
CHANGING data = lt_base ).
LOOP AT lt_base INTO ls_base.
i_type1 = ls_base-type1.
i_type2 = ls_base-type2.
i_type3 = ls_base-type3.
i_username = ls_base-username.
i_useracount = ls_base-useracount.
i_oaid = ls_base-id.
i_status = ls_base-status.
* SEARCH str_in FOR '{'.
* IF sy-subrc =0.
* DATA(str1)= sy-fdpos.
* ENDIF.
* SEARCH str_in FOR '}'.
* IF sy-subrc =0.
* DATA(str2)= sy-fdpos.
* ENDIF.
* DATA(str3)= str2 - str1.
* str_in = str_in+str1(str3).
*
* str_in ='['&& str_in+5 &&']'.
* CALL METHOD /ui2/cl_json=>deserialize
* EXPORTING
* json = str_in
* CHANGING
* data = lt_base[].
* IF lt_base[] IS NOT INITIAL.
* READ TABLE lt_base INTO ls_base INDEX 2.
* i_oaid = ls_base-id.
* i_status = ls_base-status.
* i_type1 = ls_base-type.
* i_type2 = ls_base-type2.
* i_type3 = ls_base-type3.
* ENDIF.
SELECT oaid,status INTO TABLE @DATA(lt_oaid) FROM zoas_log WHERE oaid EQ @i_oaid AND status EQ '0' AND resultcode EQ 'S'.
lv_time = sy-datum && sy-uzeit.
ls_oalog-mandt = sy-mandt.
ls_oalog-oaid = i_oaid.
ls_oalog-trantime = lv_time.
ls_oalog-status = i_status.
ls_oalog-username = i_USERNAME.
ls_oalog-useracount = i_useracount.
ls_oalog-type1 = i_TYPE1.
ls_oalog-type2 = i_TYPE2.
ls_oalog-type3 = i_TYPE3.
IF lt_oaid IS INITIAL.
APPEND ls_oalog TO lt_oalog.
CLEAR ls_oalog.
CLEAR ls_Freturn.
IF lt_oalog IS NOT INITIAL.
MODIFY zoas_log FROM TABLE lt_oalog.
COMMIT WORK AND WAIT.
ls_Freturn-success ='true'."abap_true .
ls_Freturn-content = '传入ID='&& i_oaid.
ELSE.
ROLLBACK WORK.
ls_Freturn-success = 'false'."abap_false .
ls_Freturn-content ='接收失败,请检查ID重试'.
ENDIF.
DATA(has_entries)= xsdbool( lt_oalog IS NOT INITIAL ).
CLEAR lt_oalog.
e_response = /ui2/cl_json=>serialize( ls_Freturn ).
lv_taskname = sy-uname && sy-datum && sy-uzeit.
CALL FUNCTION 'Z_ACC_DOCUMENT_INFO_POST' STARTING NEW TASK lv_taskname
EXPORTING
lv_oaid = i_oaid
lv_status = i_status
lv_username = i_username
lv_useracount = i_useracount
lv_type1 = i_type1
lv_type2 = i_type2
lv_type3 = i_type3
* TABLES
* ET_RETURN =.
ELSE.
LOOP AT lt_oaid INTO DATA(ls_oas).
" oaid1 = ls_oas-oaid.
"status1 = ls_oas-status.
IF i_status EQ '0'.
ls_Freturn-success ='false'."abap_false .
ls_Freturn-content ='该id已成功制定凭证,请勿重复'.
e_response = /ui2/cl_json=>serialize( ls_Freturn ).
ELSE .
APPEND ls_oalog TO lt_oalog.
CLEAR ls_oalog.
IF lt_oalog IS NOT INITIAL.
MODIFY zoas_log FROM TABLE lt_oalog.
COMMIT WORK AND WAIT.
lv_taskname = sy-uname && sy-datum && sy-uzeit.
CALL FUNCTION 'Z_ACC_DOCUMENT_INFO_POST' STARTING NEW TASK lv_taskname
EXPORTING
lv_oaid = i_oaid
lv_status = i_status
lv_username = i_username
lv_useracount = i_useracount
lv_type1 = i_type1
lv_type2 = i_type2
lv_type3 = i_type3.
.
ENDIF.
ENDIF.
ENDLOOP.
ENDIF.
ENDLOOP.
IF ls_Freturn-success ='false'.
*-- rfc log - last phase
* INCLUDE zhs_log_end_e.
ELSE.
*-- rfc log - last phase
* INCLUDE zhs_log_end_s.
ENDIF.
ENDFUNCTION.