class ZCL_IF_ORGINFO_SYNC definition
public
final
create public .
public section.
interfaces IF_HTTP_EXTENSION .
protected section.
private section.
ENDCLASS.
CLASS ZCL_IF_ORGINFO_SYNC IMPLEMENTATION.
* <SIGNATURE>---------------------------------------------------------------------------------------+
* | Instance Public Method ZCL_IF_ORGINFO_SYNC->IF_HTTP_EXTENSION~HANDLE_REQUEST
* +-------------------------------------------------------------------------------------------------+
* | [--->] SERVER TYPE REF TO IF_HTTP_SERVER
* +--------------------------------------------------------------------------------------</SIGNATURE>
method IF_HTTP_EXTENSION~HANDLE_REQUEST.
*author gavin
*date 20220322
*组织同步
DATA: LV_JSON_STRING TYPE STRING, "传入和传出JSON格式数据所用到的变量
lv_method TYPE string,
lv_parameter TYPE string,
lv_result TYPE string,
lv_request TYPE string,
lv_status TYPE ze_status VALUE '200',
lv_message TYPE msgtxt,
lv_rsnum TYPE caufv-rsnum,
lv_response TYPE string,
lv_json TYPE string,
lv_content_type TYPE string,
lvobj TYPE string.
data:lt_return TYPE TABLE OF ZSTRU_ORGINFO,
ls_return TYPE ZSTRU_ORGINFO.
DATA error TYPE REF TO cx_transformation_error.
DATA err_text TYPE string.
data:LOBJID TYPE HRP1000-OBJID.
DATA:lsobjid TYPE hrp1001-SOBID.
DATA json_writer TYPE REF TO cl_sxml_string_writer.
json_writer = cl_sxml_string_writer=>create( TYPE = if_sxml=>co_xt_json ).
DATA writer TYPE REF TO if_sxml_writer.
DATA:LTDATE TYPE TABLE OF BAPI_RANGESAUDAT.
DATA:LSDATE TYPE BAPI_RANGESAUDAT.
DATA:LTOBJ TYPE TABLE OF OBJEC .
DATA:LSOBJ TYPE OBJEC .
DATA:LTSTRUCT TYPE TABLE OF STRUC .
DATA:LSSTRUCT TYPE STRUC .
writer ?= json_writer.
CLEAR: lv_method, lv_content_type, lv_parameter, lv_result , lv_json.
lv_method = server->request->get_header_field( '~request_method' ). " 调用方式(POST/GET)
IF lv_method = 'GET'.
lv_parameter = server->request->get_header_field( name = '~query_string' ).
lv_result = '不允许GET调用方式,仅支持POST' .
server->response->set_cdata( lv_result ).
server->response->set_content_type( content_type = 'text/html; charset=utf-8' ).
ELSEIF lv_method = 'POST'.
lv_content_type = server->request->get_header_field( 'Content-Type' ).
CALL METHOD server->request->get_cdata
RECEIVING
DATA = lv_parameter.
CHECK lv_parameter IS NOT INITIAL.
lv_json = lv_parameter .
lv_request = lv_json.
TRY.
CALL TRANSFORMATION ID
SOURCE XML LV_JSON
RESULT
LOBJID = LOBJID
LTDATE = LTDATE[].
CATCH CX_TRANSFORMATION_ERROR INTO ERROR.
ERR_TEXT = ERROR->GET_TEXT( ).
LV_STATUS = '500'.
LV_MESSAGE = ERR_TEXT.
ENDTRY.
LOOP AT LTDATE INTO lSDATE.
CALL FUNCTION 'RH_STRUC_GET'
EXPORTING
ACT_OTYPE = 'O'
ACT_OBJID = LOBJID
ACT_WEGID = 'O-O_DOWN'
ACT_BEGDA = lSDATE-LOW
ACT_ENDDA = lSDATE-HIGH
* ACT_TDEPTH = PLEVEL
ACT_TFLAG = 'X'
ACT_VFLAG = 'X'
AUTHORITY_CHECK = 'X'
TABLES
* RESULT_TAB = LT_RESULT
RESULT_OBJEC = LTOBJ
RESULT_STRUC = LTSTRUCT
EXCEPTIONS
NO_PLVAR_FOUND = 1
NO_ENTRY_FOUND = 2
OTHERS = 3.
LOOP AT LTSTRUCT INTO LSSTRUCT.
MOVE-CORRESPONDING LSSTRUCT TO LS_RETURN.
LOOP AT LTOBJ INTO LSOBJ WHERE OBJID = LSSTRUCT-OBJID.
LS_RETURN-STEXT = LSOBJ-STEXT.
ENDLOOP.
clear lsobjid.
SELECT SINGLE SOBID into lsobjid from hrp1001
where ENDDA >= sy-datum and BEGDA <= sy-datum and
OTYPE = 'O' and OBJID = LSSTRUCT-OBJID and
SUBTY = 'B012' and RSIGN = 'B' and RELAT = '012'.
IF lsobjid IS NOT INITIAL.
SELECT SINGLE PA0001~PERNR SNAME INTO (LS_RETURN-PMNGR,LS_RETURN-PMNNM) FROM HRP1001
JOIN PA0001 ON PA0001~PERNR = HRP1001~SOBID AND PA0001~ENDDA >= SY-DATUM AND PA0001~BEGDA <= SY-DATUM
WHERE HRP1001~ENDDA >= SY-DATUM AND HRP1001~BEGDA <= SY-DATUM AND
HRP1001~OTYPE = 'S' AND HRP1001~OBJID = lsobjid AND
HRP1001~SUBTY = 'A008' AND HRP1001~RSIGN = 'A' AND HRP1001~RELAT = '008'.
ENDIF.
if LS_RETURN-PMNGR is not INITIAL.
select SINGLE USRID into LS_RETURN-OASTR
from PA0105 where PERNR = LS_RETURN-PMNGR and ENDDA >= SY-DATUM and BEGDA <= SY-DATUM and SUBTY = '1008'.
if LS_RETURN-OASTR is INITIAL.
LS_RETURN-OASTR = LS_RETURN-PMNGR.
endif.
endif.
APPEND LS_RETURN TO LT_RETURN.
ENDLOOP.
ENDLOOP.
TRY.
CALL TRANSFORMATION ID
SOURCE
lt_return = lt_return[]
RESULT XML json_writer.
CATCH cx_transformation_error INTO error.
err_text = error->get_text( ).
ENDTRY.
DATA json TYPE xstring.
json = json_writer->get_output( ).
CALL FUNCTION 'ECATT_CONV_XSTRING_TO_STRING'
EXPORTING
im_xstring = json
im_encoding = 'UTF-8'
IMPORTING
ex_string = lv_json.
server->response->set_cdata( lv_json ).
server->response->set_content_type( content_type = 'text/html; charset=utf-8' ).
ENDIF.
endmethod.
ENDCLASS.
SAP 组织同步 发布程ws
于 2022-03-23 16:28:06 首次发布