FUNCTION zfm_po_to_pega_token.
*"----------------------------------------------------------------------
*"*"本地接口:
*" IMPORTING
*" REFERENCE(I_TOKEN) TYPE CHAR10 DEFAULT 'TOKEN'
*" EXPORTING
*" REFERENCE(ES_TOKEN) TYPE ZPEGA_ES_TOKEN
*" REFERENCE(E_FLAG) TYPE CHAR1
*" REFERENCE(E_MESSAGE) TYPE STRING
*"----------------------------------------------------------------------
write_newlog 'I'."redmine #91438 请不要在本行之前增加代码
CLEAR:ls_zpega_ip_po,lv_url.
ty_token-app_id = 'FE719C1CE84E493F91146AD88F1A441B'.
CASE sy-sysid.
WHEN 'ED2'.
ty_token-app_secret = '2WLXPmZ71dgYKscmV41E'."dev
WHEN 'EQ1'.
* ty_token-app_secret = '2U4nI8QB6B2YMUJHF24S'."qas
ty_token-app_secret = 'Yu6eVaTS9uEAZ7ndPQM8'."uat
WHEN 'EP1'.
ty_token-app_secret = '7IHM7m8i3jMEzvNKUO1l'."prd
ENDCASE.
ty_token-grant_type = 'CREDENTIAL'.
SELECT SINGLE *
INTO ls_zpega_ip_po
FROM zpega_ip_po WHERE funcd = i_token AND sysid = sy-sysid AND zdeactive = ''.
ty_token-tgt_svc = 'it-pega-envservice'.
ty_token-user_id = 'SYS10031'.
ty_token-grant_type = 'CREDENTIAL'.
lv_json = /ui2/cl_json=>serialize( data = ty_token pretty_name = /ui2/cl_json=>pretty_mode-low_case ).
lv_len = strlen( lv_json ).
lv_url = ls_zpega_ip_po-url.
TRANSLATE lv_url TO LOWER CASE.
IF lv_url IS INITIAL.
e_flag = 'E'.
e_message = '请维护URL(ZPEGA_IP_PO)'.
write_newlog 'O'.
EXIT.
ENDIF.
CALL METHOD cl_http_client=>create_by_url
EXPORTING
url = lv_url
IMPORTING
client = http_client
EXCEPTIONS
argument_not_found = 1
plugin_not_active = 2
internal_error = 3
OTHERS = 4.
http_client->request->set_content_type( content_type = 'application/json; charset=utf-8' ).
http_client->request->set_method( if_http_entity=>co_request_method_post ).
http_client->request->set_header_field( name = 'Content-Type' value = 'application/json' ).
CALL METHOD http_client->request->set_cdata
EXPORTING
data = lv_json
offset = 0
length = lv_len.
http_client->send( EXCEPTIONS http_communication_failure = 1
http_invalid_state = 2 ).
IF sy-subrc NE 0.
http_client->get_last_error( IMPORTING message = DATA(lv_error_msg) ).
e_flag = 'E'.
e_message = lv_error_msg.
write_newlog 'O'.
EXIT.
ENDIF.
http_client->receive( EXCEPTIONS http_communication_failure = 1
http_invalid_state = 2
http_processing_failed = 3 ).
IF sy-subrc <> 0 .
http_client->get_last_error( IMPORTING message = DATA(lv_error_msg1)
code = DATA(lv_code) ).
e_flag = 'E'.
e_message = lv_error_msg1.
write_newlog 'O'.
EXIT.
ENDIF.
lv_body = http_client->response->get_cdata( ).
CALL METHOD /ui2/cl_json=>deserialize
EXPORTING
json = lv_body
CHANGING
data = es_token.
IF es_token IS NOT INITIAL.
e_flag = 'S'.
e_message = 'TOKEN获取成功'.
ENDIF.
IF es_token IS INITIAL AND e_flag IS INITIAL.
e_flag = 'E'.
e_message = 'TOKEN获取失败'.
ENDIF.
write_newlog 'O'.
ENDFUNCTION.
用token发送数据
FUNCTION zfm_po_to_pega.
*"----------------------------------------------------------------------
*"*"本地接口:
*" IMPORTING
*" REFERENCE(IS_TOKEN) TYPE ZPEGA_ES_TOKEN OPTIONAL
*" REFERENCE(IM_EKKO) TYPE EKKO OPTIONAL
*" VALUE(IM_STATUS) TYPE CHAR1 OPTIONAL
*" VALUE(IM_ZPTS) TYPE ZPTTYPE OPTIONAL
*" EXPORTING
*" REFERENCE(E_FLAG) TYPE CHAR1
*" REFERENCE(E_MESSAGE) TYPE STRING
*"----------------------------------------------------------------------
write_newlog 'I'."redmine #91438 请不要在本行之前增加代码
DATA: ls_access_token TYPE string.
DATA: lv_roomnum LIKE adcp-roomnumber.
DATA: lv_json TYPE string.
DATA:lr_data TYPE REF TO data.
DATA:ls_id TYPE string.
DATA:ls_nextpageid TYPE string.
DATA:ls_pxobjclass TYPE string.
DATA:lv_zterm TYPE zpymtinfo2-zterm.
FIELD-SYMBOLS :<data> TYPE data.
FIELD-SYMBOLS: <id> TYPE any.
FIELD-SYMBOLS: <nextpageid> TYPE any.
FIELD-SYMBOLS: <pxobjclass> TYPE any.
FIELD-SYMBOLS :<field_value> TYPE data.
* DATA:BEGIN OF ps_detail_s ,
* orderlinenumber TYPE string,
* materialcode TYPE string,
* END OF ps_detail_s.
DATA: BEGIN OF requestinfo_s,
searchordernumber TYPE string, "采购订单号
applicantno TYPE string, "申请人工号
ordertype TYPE string, "订单类型
companycode TYPE string, "公司编码
companydescription TYPE string, "公司描述
purchasingorganization TYPE string, "采购组织
purchasegroup TYPE string, "采购组
purchasegroupdescription TYPE string, "采购组描述
advancepaymentidentifier TYPE string , "预付款变更标识
END OF requestinfo_s.
DATA:BEGIN OF content_s,
requestinfo LIKE requestinfo_s,
END OF content_s.
DATA:BEGIN OF ty_data,
content LIKE content_s,
END OF ty_data.
DATA:ls_data LIKE ty_data.
ls_access_token = is_token-access_token.
SELECT SINGLE *
INTO ls_zpega_ip_po
FROM zpega_ip_po WHERE funcd = gs_ebeln AND sysid = sy-sysid AND zdeactive = ''.
lv_url = ls_zpega_ip_po-url.
TRANSLATE lv_url TO LOWER CASE.
CONDENSE lv_url NO-GAPS.
IF lv_url IS INITIAL.
e_flag = 'E'.
e_message = '请维护URL(ZPEGA_IP_PO)'.
write_newlog 'O'.
EXIT.
ENDIF.
CALL METHOD cl_http_client=>create_by_url
EXPORTING
url = lv_url
IMPORTING
client = http_client
EXCEPTIONS
argument_not_found = 1
plugin_not_active = 2
internal_error = 3
OTHERS = 4.
*Post
http_client->request->set_content_type( content_type = 'application/json; charset=utf-8' ).
http_client->request->set_method( if_http_entity=>co_request_method_post ).
http_client->request->set_header_field( name = 'X-ENP-AUTH' value = ls_access_token ).
*http body
SELECT SINGLE roomnumber
INTO lv_roomnum
FROM usr21 AS u
JOIN adcp AS p
ON u~addrnumber = p~addrnumber
AND u~persnumber = p~persnumber
WHERE u~bname = sy-uname.
ls_data-content-requestinfo-searchordernumber = im_ekko-ebeln."PO
ls_data-content-requestinfo-applicantno = lv_roomnum."员工变好
ls_data-content-requestinfo-ordertype = im_ekko-bsart."订单类型
ls_data-content-requestinfo-companycode = im_ekko-bukrs."公司代码
ls_data-content-requestinfo-purchasingorganization = im_ekko-ekorg."采购组织
IF im_ekko-bukrs IS NOT INITIAL.
SELECT SINGLE butxt INTO ls_data-content-requestinfo-companydescription FROM t001
WHERE bukrs = im_ekko-bukrs
AND spras = sy-langu.
ENDIF.
ls_data-content-requestinfo-purchasegroup = im_ekko-ekgrp."采购组
IF im_ekko-ekgrp IS NOT INITIAL.
SELECT SINGLE eknam INTO ls_data-content-requestinfo-purchasegroupdescription FROM t024
WHERE ekgrp = im_ekko-ekgrp.
ENDIF.
IF im_status = 'M'."修改PO时,预付款变更标识赋值
IF im_zpts = 'P1'.
ls_data-content-requestinfo-advancepaymentidentifier = 'Y'.
ENDIF.
ENDIF.
lv_json = /ui2/cl_json=>serialize( data = ls_data pretty_name = /ui2/cl_json=>pretty_mode-camel_case )."驼峰
REPLACE 'requestinfo' IN lv_json WITH 'RequestInfo'.
REPLACE 'searchordernumber' IN lv_json WITH 'SearchOrderNumber'.
REPLACE 'applicantno' IN lv_json WITH 'ApplicantNo'.
REPLACE 'ordertype' IN lv_json WITH 'OrderType'.
REPLACE 'companycode' IN lv_json WITH 'CompanyCode'.
REPLACE 'companydescription' IN lv_json WITH 'CompanyDescription'.
REPLACE 'purchasegroup' IN lv_json WITH 'PurchaseGroup'.
REPLACE 'purchasegroupdescription' IN lv_json WITH 'PurchaseGroupDescription'.
REPLACE 'purchasingorganization' IN lv_json WITH 'PurchasingOrganization'.
REPLACE 'advancepaymentidentifier' IN lv_json WITH 'AdvancePaymentIdentifier'.
lv_len = strlen( lv_json ).
CALL METHOD http_client->request->set_cdata
EXPORTING
data = lv_json
offset = 0
length = lv_len.
http_client->send( EXCEPTIONS http_communication_failure = 1
http_invalid_state = 2 ).
IF sy-subrc NE 0.
http_client->get_last_error( IMPORTING message = DATA(lv_error_msg) ).
e_flag = 'E'.
e_message = lv_error_msg.
write_newlog 'O'.
EXIT.
ENDIF.
http_client->receive( EXCEPTIONS http_communication_failure = 1
http_invalid_state = 2
http_processing_failed = 3 ).
IF sy-subrc <> 0 .
http_client->get_last_error( IMPORTING message = DATA(lv_error_msg1)
code = DATA(lv_code) ).
e_flag = 'E'.
e_message = lv_error_msg1.
write_newlog 'O'.
EXIT.
ENDIF.
lv_body = http_client->response->get_cdata( ).
CALL METHOD /ui2/cl_json=>deserialize
EXPORTING
json = lv_body
CHANGING
data = lr_data.
IF lr_data IS BOUND.
ASSIGN lr_data->* TO <data>.
ASSIGN COMPONENT 'ID' OF STRUCTURE <data> TO <id>.
IF <id> IS ASSIGNED.
lr_data = <id>.
ASSIGN lr_data->* TO <field_value>.
ls_id = <field_value>.
ENDIF.
ASSIGN COMPONENT 'NEXTPAGEID' OF STRUCTURE <data> TO <nextpageid>.
IF <nextpageid> IS ASSIGNED.
lr_data = <nextpageid>.
ASSIGN lr_data->* TO <field_value>.
ls_nextpageid = <field_value>.
ENDIF.
ASSIGN COMPONENT 'PXOBJCLASS' OF STRUCTURE <data> TO <pxobjclass>.
IF <pxobjclass> IS ASSIGNED.
lr_data = <pxobjclass>.
ASSIGN lr_data->* TO <field_value>.
ls_pxobjclass = <field_value>.
ENDIF.
ENDIF.
IF ls_nextpageid = 'Confirm'.
e_flag = 'S'.
e_message = 'RIGHT'.
ELSE.
e_flag = 'E'.
e_message = 'WRONG'.
ENDIF.
write_newlog 'O'.
ENDFUNCTION.