sap調用webservice修改代理類中的http header信息


SAP調WebService接口,以XML格式進行傳輸,添加用戶名和密碼校驗 

webservice 直接生成代理類,驗證信息在SOAMANAGER中配置。
驗證信息需要額外放在http header 中,查找相關資料后,對於sap自動生成的代理類,還是有一定的自定義空間 。
 
代碼示例:
  "轉換XML
  DATA: lv_xml1 TYPE xstring.
  DATA: lv_xml2 TYPE string.
  DATA: lt_itab TYPE TABLE OF zsd_dms_sales .
  DATA: lv_oref    TYPE REF TO cx_st_error,
        lv_message TYPE string,
        lv_msg     TYPE string.

  DATA obj_exception TYPE REF TO cx_ai_system_fault.

  "定義接口傳輸接口
  DATA:ls_input  TYPE zsap_update_order_info_soap_in,
       ls_output TYPE zsap_update_order_info_soap_in.

  "調用DMS接口
  DATA:lv_service       TYPE REF TO zco_sap_interface_soap.
  DATA:lv_sys_exception TYPE REF TO cx_ai_system_fault,
       lv_app_exception TYPE REF TO cx_ai_application_fault.

  DATA:ixml         TYPE REF TO if_ixml,
       xml_document TYPE REF TO if_ixml_document,
       xml_root     TYPE REF TO if_ixml_element,
       xml_element  TYPE REF TO if_ixml_element,
       xml_node     TYPE REF TO if_ixml_node.
  DATA l_xstring TYPE xstring.
  DATA l_string TYPE string.

  DATA: name      TYPE string,
        namespace TYPE string.

  DATA: lr_header TYPE REF TO if_wsprotocol_ws_header.

  DATA:lr_ex_system TYPE REF TO cx_ai_system_fault.
  
  "內表賦值
  
  "將XML轉化為內表
  TRY .
      CALL TRANSFORMATION zsd_dms_0001
                    OPTIONS xml_header = 'no'
                    SOURCE zsd_dms_sales = lt_itab
                    RESULT XML lv_xml1.
      "2進制轉換XML字符串不亂碼
      CALL FUNCTION 'ECATT_CONV_XSTRING_TO_STRING'
        EXPORTING
          im_xstring  = lv_xml1 "二進制字符串
          im_encoding = 'UTF-8'
        IMPORTING
          ex_string   = lv_xml2. "返回的xml字符串
    CATCH cx_st_error INTO lv_oref.
      "傳輸XML轉換錯誤
      lv_message  = lv_oref->get_text( ) .
      "報錯日志保存
  ENDTRY.

  "賦值 XML 文件
  CLEAR:ls_input,ls_output .
  ls_input-xml = lv_xml2 .

  "$. Region BY  添加http herder 驗證信息
  TRY.
      CREATE OBJECT lv_service
        EXPORTING
          logical_port_name = 'ZSD01'        "邏輯端(SOAMANAGER)
        EXCEPTIONS
          OTHERS            = 1.
      lr_header ?= lv_service->get_protocol( if_wsprotocol=>ws_header ).
    CATCH cx_ai_system_fault INTO lr_ex_system.
  ENDTRY.

  CLEAR l_string .
  CONCATENATE
  '<soap:Header>'
  '<ser:AuthHeader xmlns:ser="https://testdms.bscwin.com/services">'
  '<ser:User>用戶名</ser:User>'
  '<ser:Password>密碼</ser:Password>'
  '</ser:AuthHeader>'
  '</soap:Header>'
  INTO l_string.

  "convert to xstring
  CLEAR l_xstring .
  l_xstring = cl_proxy_service=>cstring2xstring( l_string ).
  IF l_string IS NOT INITIAL.
    "create ixml dom document from xml xstring
    CALL FUNCTION 'SDIXML_XML_TO_DOM'
      EXPORTING
        xml           = l_xstring
      IMPORTING
        document      = xml_document
      EXCEPTIONS
        invalid_input = 1
        OTHERS        = 2.
    IF sy-subrc = 0 AND NOT xml_document IS INITIAL.
      xml_root ?= xml_document->get_root_element( ).
      xml_element ?= xml_root->get_first_child( ).

      "add header element by element to soap header
      WHILE xml_element IS NOT INITIAL.
        name = xml_element->get_name( ).
        namespace = xml_element->get_namespace_uri( ).
        lr_header->set_request_header( name = name
                                       namespace = namespace
                                       dom = xml_element  ).
        xml_element ?= xml_element->get_next( ).
      ENDWHILE.
    ENDIF.
  ENDIF.
  "$. Endregion BY 添加http herder 驗證信息

  TRY.
      CALL METHOD lv_service->sap_update_order_info
        EXPORTING
          input  = ls_input
        IMPORTING
          output = ls_output.

    CATCH cx_ai_system_fault INTO lv_sys_exception .
      WRITE lv_sys_exception->errortext.
    CATCH cx_ai_application_fault INTO lv_app_exception .

*        WRITE lv_app_exception->textid.

  ENDTRY.

 

參考鏈接:https://wiki.scn.sap.com/wiki/display/Java/Consume+SOAP+WebService+by+SAP+and+add+custom+Header


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM