SOAP

Sales force inbound soap web service to create the Account record.

Sales force inbound soap web service to capture the account request details from source org and create a record in current destination org.

Create below apex class in one org and generate wsdl for this class and generate wsdl for partner and use these wsdls to create soap outbound web service.

SOAP Inbound Web service class name:

global class AccountCreationWebServiceUsingSoap {
    global class AccountRequestDetails {
        webservice String accountName;
        webservice String accountDescription;
    }
    
    global class AccountResponseDetails {
        webservice String accountCreationStatus;
        webservice String accountName;
    }
    
    private static AccountResponseDetails requiredFieldValidation(AccountRequestDetails accountRequest) {
        AccountResponseDetails accountResponse = new  AccountResponseDetails();
        if(accountRequest.accountDescription == NULL || accountRequest.accountDescription == '' ) {
            accountResponse.accountCreationStatus = 'Please enter description';
        }
        return accountResponse;
    }
    
    private static AccountResponseDetails insertAccount(AccountRequestDetails accRequest) {
        AccountResponseDetails accResponse = new AccountResponseDetails();
        accResponse = requiredFieldValidation(accRequest);
        if(accResponse.accountCreationStatus == NULL || accResponse.accountCreationStatus == '') {
            Account acc = new Account();
            acc.Name = accRequest.accountName;
            acc.Description = accRequest.accountDescription;
            try{
                insert acc;
                accResponse.accountCreationStatus = 'Account is created. Account Id is: '+acc.Id;
                accResponse.accountName = acc.Name;
                return accResponse;
            }
            catch(Exception e) {
                String msg = 'Error occurred' +e.getMessage();
                accResponse.accountCreationStatus = msg;
                return accResponse;
            }
        }
        return accResponse;
    }
    
    webservice static AccountResponseDetails createAccount(AccountRequestDetails accReq) {
        AccountResponseDetails accResponse =  insertAccount(accReq);
        return accResponse;
    }
}

Sales force outbound web service:

Before writing apex web service call out, we will have to generate apex classes for two wsdls which we mentioned above. 

Go to apex classes and click on button – “Generate from WSDL” and select partner wsdl  click “parse wsdl”.

Here partner wsdl is of destination org not the current org.

The following generated class(es) compiled successfully with no errors:
faultPartnerSoapSforceCom
partnerSoapSforceCom
AsyncPartnerSoapSforceCom
sobjectPartnerSoapSforceCom

>> Click on “done”. If it throws any error like “anytype”, then edit partner wsdl and replace “anytype” with “string” and save it and upload it again to generate classes.
Now generate apex classes for AccountCreationWebServiceUsingSoap wsdl.  parse wsdl  
The following generated class(es) compiled successfully with no errors:
soapSforceComSchemasClassAccountcre

AsyncSoapSforceComSchemasClassAccountcre

 And write the code as shown below to send the account details to destination org via visual force page.

Sales force outbound soap web service to send account details to destination org and create account in destination org.


public class SOAP_Outbound_Account_Creation3 {
    public String destinationAccountStatus {get; set;}
    public String accName {get; set;}
    public String accDescription {get; set;}
    public SOAP_Outbound_Account_Creation3(){
        destinationAccountStatus = '';
        accName = '';
        accDescription = '';
    }   
    
    public PageReference doSave(){
        partnerSoapSforceCom.Soap sp = new partnerSoapSforceCom.Soap();
        partnerSoapSforceCom.LoginResult log = sp.login('sohel@sf.com', 'so123');
        
        soapSforceComSchemasClassAccountcre.SessionHeader_element SessionHeader = new soapSforceComSchemasClassAccountcre.SessionHeader_element();
        SessionHeader.sessionId = log.sessionId;
        
        soapSforceComSchemasClassAccountcre.AccountCreationWebServiceUsingSoap AccountCreationWebService = new soapSforceComSchemasClassAccountcre.AccountCreationWebServiceUsingSoap();
        AccountCreationWebService.SessionHeader = SessionHeader;
        
        soapSforceComSchemasClassAccountcre.AccountRequestDetails AccountRequest = new soapSforceComSchemasClassAccountcre.AccountRequestDetails();
        AccountRequest.accountName = accName;
        AccountRequest.accountDescription = accDescription ;
        
        
        soapSforceComSchemasClassAccountcre.AccountResponseDetails response = new soapSforceComSchemasClassAccountcre.AccountResponseDetails();
        response = AccountCreationWebService.createAccount(AccountRequest);
        destinationAccountStatus = 'Destination Org: '+response.accountCreationStatus;
        return null;
    }
}

Visualforce page:

<apex:page controller="SOAP_Outbound_Account_Creation3">
 <apex:sectionHeader title="Create" subtitle="Account"/>
 <apex:form >
 <apex:pageBlock title="Response" rendered="{!IF(destinationAccountStatus !=NULL, true, false)}">     
 <apex:outputText value="{!destinationAccountStatus }" style="color:green; font-weighte:bold;" />
 </apex:pageBlock>
     <apex:pageBlock title="Account Info">
         <apex:pageBlockSection >
             <apex:inputText value="{!accName}" label="Account Name" required="true"/>
             <apex:inputText value="{!accDescription}" label="Description"/>
         </apex:pageBlockSection>
         <apex:pageBlockButtons >
             <apex:commandButton value="Save" action="{!doSave}"/>
         </apex:pageBlockButtons>
     </apex:pageBlock>
 </apex:form>
</apex:page>


No comments:

Post a Comment