SAP 组织同步 发布程ws

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.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

gavin_gxh

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

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

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

打赏作者

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

抵扣说明:

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

余额充值