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.