Quantcast
Channel: SCN: Message List - Service-Oriented Architecture (SOA) and SAP
Viewing all articles
Browse latest Browse all 1056

Re: Unable to connect to Salesforce using webservices (SOAP protocol)

$
0
0

Hi Deepak,

 

We have called the Sales force application in two parts:

1. Login to the salesforce using port that is created using standard salesforce WSDL. Pass the user id and password (We maintained userid and password in custom table). The output of this is session ID.

2. We used the session ID from above and pass the required custom data to our salesforce object

 

Even if there is an extra space or instead of lower case if there is upper case letter or vice versa it doesnot work.

Here is the code:

 

Part1 : TO call the standard salesforce login. 

 

  DATA : lo_object          TYPE REF TO zfi_co_soap,

         ls_input           TYPE        zfi_login_request1,

         ls_output          TYPE        zfi_login_response1,

         ls_sys_exception   TYPE REF TO cx_ai_system_fault,

         lv_message         TYPE        bapiret2-message,

         ls_ztfi_sfdc_login TYPE        ty_ztfi_sfdc_login,

         ls_appln_exception TYPE REF TO cx_ai_application_fault,

         lv_msgid           TYPE        string,

         lv_string          TYPE        string,

*  Get message manager

         lo_api_controller  TYPE REF TO if_wd_controller,

         lo_message_manager TYPE REF TO if_wd_message_manager.

 

 

  lo_api_controller ?= wd_this->wd_get_api( ).

 

 

  IF NOT lo_api_controller IS INITIAL.

* get the instance of message manager

    CALL METHOD lo_api_controller->get_message_manager

      RECEIVING

        message_manager = lo_message_manager.

  ENDIF.

 

 

* Create Instance for logical port ZXX_SFDC_PORT

  TRY.

      CREATE OBJECT lo_object

        EXPORTING

          logical_port_name = 'ZXX_SFDC_PORT'.

    CATCH cx_ai_system_fault INTO ls_sys_exception.

  ENDTRY.

 

 

*  report error message if exception raised.

  IF ls_sys_exception IS  NOT INITIAL.

    lv_message = ls_sys_exception->errortext.

* report message

    CALL METHOD lo_message_manager->report_error_message

      EXPORTING

        message_text = lv_message

      RECEIVING

        message_id   = lv_msgid.

    EXIT.

  ENDIF.

 

 

* Get SFDC Login credentials from table -

  SELECT SINGLE zzuser_id

    zzpassword FROM zXXXX_sfdc_login

    INTO ls_zXXXx_sfdc_login

    WHERE zzsysid = sy-sysid.

 

 

  IF sy-subrc = 0.

    ls_input-username = ls_zxxxx_sfdc_login-zzuser_id.

    ls_input-password = ls_zxxxx_sfdc_login-zzpassword.

  ELSE.  " No SFDC login data maintained

*    Report error message : Please maintain SFDC Login Credentials

    wd_this->report_err_msg('056').

    EXIT.

  ENDIF.

 

 

  CLEAR : ls_sys_exception,

  ls_appln_exception.

* Call method to Login & get Session ID from SFDC

  TRY.

      CALL METHOD lo_object->login

        EXPORTING

          input  = ls_input

        IMPORTING

          output = ls_output.

 

 

    CATCH cx_ai_application_fault INTO ls_appln_exception.

    CATCH cx_ai_system_fault INTO ls_sys_exception .

  ENDTRY.

 

 

*  report error message if exception raised.

  IF ls_sys_exception IS  NOT INITIAL.

    lv_message = ls_sys_exception->errortext.

* report message

    CALL METHOD lo_message_manager->report_error_message

      EXPORTING

        message_text = lv_message

      RECEIVING

        message_id   = lv_msgid.

    EXIT.

  ENDIF.

 

 

*  report error message if application exception raised.

  IF ls_appln_exception IS  NOT INITIAL.

* report message  : Invalid SFDC Login Username or Password

    wd_this->report_err_msg('057').

    EXIT.

  ENDIF.

*  Check session ID

  IF ls_output-result-session_id IS NOT INITIAL.

    MOVE ls_output-result-session_id TO wd_this->gv_session_id.

*    raise_alert( ).   " raise alert

  ENDIF.

 

 

 

Part 2 : To call the custom salesforce app

IF wd_this->gv_session_id IS NOT INITIAL.

    TRY.

        CREATE OBJECT lo_object1

          EXPORTING

            logical_port_name = 'ZXXXX_SFDC_OBJECT_PORT'.

 

 

      CATCH cx_ai_system_fault INTO ls_sys_exception.

    ENDTRY.

 

 

    IF ls_sys_exception IS  NOT INITIAL.

      lv_message = ls_sys_exception->errortext.

* report message

      CALL METHOD lo_message_manager->report_error_message

        EXPORTING

          message_text = lv_message

        RECEIVING

          message_id   = lv_msgid.

      CLEAR lv_message.

      EXIT.

    ENDIF.

 

 

** get ws_header protocol

    TRY.

        ls_header ?= lo_object1->get_protocol(

'IF_WSPROTOCOL_WS_HEADER').

      CATCH cx_ai_system_fault INTO ls_sys_exception.

    ENDTRY.

 

 

    CONCATENATE

'<Soap:Header xmlns:Soap="http://schemas.xmlsoap.org/soap/envelope/">'

'<urn:SessionHeader xmlns:urn="urn:enterprise.soap.sforce.com">'

    '<urn:sessionId>' wd_this->gv_session_id '</urn:sessionId>'

    '</urn:SessionHeader>'

    '</Soap:Header>'

     INTO lv_string.

 

 

    lv_xstring = cl_proxy_service=>cstring2xstring( lv_string ).

 

 

    IF NOT lv_xstring IS INITIAL.

* create ixml dom document from xml xstring

      CALL FUNCTION 'SDIXML_XML_TO_DOM'

        EXPORTING

          xml           = lv_xstring

        IMPORTING

          document      = lr_xml_document

        EXCEPTIONS

          invalid_input = 1

          OTHERS        = 2.

      IF sy-subrc = 0 AND NOT lr_xml_document IS INITIAL.

        lr_xml_root = lr_xml_document->get_root_element( ).

        lr_xml_element ?= lr_xml_root->get_first_child( ).

* add header element by element to soap header

        WHILE NOT lr_xml_element IS INITIAL.

          lv_name = lr_xml_element->get_name( ).

          lv_namespace = lr_xml_element->get_namespace_uri( ).

          ls_header->set_request_header( name = lv_name

                                         namespace = lv_namespace

                                         dom = lr_xml_element ).

          lr_xml_element ?= lr_xml_element->get_next( ).

        ENDWHILE.

      ENDIF.

    ENDIF.

  ELSE.  " No session ID created

    EXIT.

  ENDIF.

 

 

* Call the required methods

  TRY.

      CALL METHOD lo_object1->view_latest_dispute_cases

        EXPORTING

          input  = ls_input_latest

        IMPORTING

          output = ls_output_latest.

    CATCH cx_ai_system_fault INTO ls_sys_exception.

    CATCH cx_ai_application_fault INTO ls_appln_exception.

  ENDTRY.


Viewing all articles
Browse latest Browse all 1056

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>