In this article, i will explain the code which can be used for connecting and getting the records from different or multiple salesforce organization using Apex and REST Service.
To start first we will need to authorize below two URL which can be accessed from salesforce environment.
This can be done from “Setup | Administration Setup | Security Controls | Remote Site Settings”
This can be done from “Setup | Administration Setup | Security Controls | Remote Site Settings”
This application will prompt for the Username and Password of the other salesforce account and display the 10 records of the Account.
Apex Code:
1 | public with sharing class FetchAccount { |
2 |
3 | //Login Domain May be test, prerellogin.pre |
4 | String LOGIN_DOMAIN = 'www' ; |
5 | public String pwd{get;set;} |
6 | public String userName{get;set;} |
7 | public List<Account> acc{get;set;} |
8 | public String errMsg{get;set;} |
9 | public String displayError{get;set;} |
10 |
11 | public FetchAccount() |
12 | { |
13 | displayError = 'none' ; |
14 | } |
15 |
16 | public void fetch() |
17 | { |
18 | errMsg = 'Some error occurred, please try again' ; |
19 | try |
20 | { |
21 | //----------------------------------- |
22 | // Login via SOAP/XML web service api |
23 | //----------------------------------- |
24 | HttpRequest request = new HttpRequest(); |
25 | request.setEndpoint( 'https://' + LOGIN_DOMAIN + '.salesforce.com/services/Soap/u/22.0' ); |
26 | request.setMethod( 'POST' ); |
27 | request.setHeader( 'Content-Type' , 'text/xml;charset=UTF-8' ); |
28 | request.setHeader( 'SOAPAction' , '""' ); |
29 | //not escaping username and password because we're setting those variables above |
30 | //in other words, this line "trusts" the lines above |
31 | //if username and password were sourced elsewhere, they'd need to be escaped below |
32 | request.setBody( '<Envelope xmlns="http://schemas.xmlsoap.org/soap/envelope/"><Header/><Body><login xmlns="urn:partner.soap.sforce.com"><username>' + userName+ '</username><password>' + pwd+ '</password></login></Body></Envelope>' ); |
33 | Dom.XmlNode resultElmt = ( new Http()).send(request).getBodyDocument().getRootElement() |
34 | .getChildElement( 'Body' , 'http://schemas.xmlsoap.org/soap/envelope/' ) |
35 | .getChildElement( 'loginResponse' , 'urn:partner.soap.sforce.com' ) |
36 | .getChildElement( 'result' , 'urn:partner.soap.sforce.com' ); |
37 |
38 | //------------------------------- |
39 | // Grab session id and server url |
40 | //-------------------------------- |
41 | final String SERVER_URL = resultElmt.getChildElement( 'serverUrl' , 'urn:partner.soap.sforce.com' ) .getText().split( '/services' )[ 0 ]; |
42 | final String SESSION_ID = resultElmt.getChildElement( 'sessionId' , 'urn:partner.soap.sforce.com' ) .getText(); |
43 |
44 | //---------------------------------- |
45 | // Load first 10 accounts via REST API |
46 | //--------------------------------- |
47 | final PageReference theUrl = new PageReference(SERVER_URL + '/services/data/v22.0/query/' ); |
48 | theUrl.getParameters().put( 'q' , 'Select a.Phone, a.Name, a.CreatedBy.FirstName, a.CreatedById From Account a limit 10' ); |
49 | request = new HttpRequest(); |
50 | request.setEndpoint(theUrl.getUrl()); |
51 | request.setMethod( 'GET' ); |
52 | request.setHeader( 'Authorization' , 'OAuth ' + SESSION_ID); |
53 |
54 | String body = ( new Http()).send(request).getBody(); |
55 |
56 | JSONParser parser = JSON.createParser(body); |
57 |
58 | do { |
59 | parser.nextToken(); |
60 | } while (parser.hasCurrentToken() && ! 'records' .equals(parser.getCurrentName())); |
61 |
62 | parser.nextToken(); |
63 |
64 | acc = (List<Account>) parser.readValueAs(List<Account>. class ); |
65 | } |
66 | catch (Exception e) |
67 | { |
68 | displayError = 'block' ; |
69 | } |
70 |
71 | } |
72 | } |
Visualforce Code:
1 | < apex:page controller = "FetchAccount" standardStylesheets = "true" > |
2 | < style type = "text/css" > |
3 | .errorMsg{ |
4 | font-size:0.8 em; |
5 | color:red; |
6 | } |
7 | </ style > |
8 | < apex:pageBlock > |
9 | < apex:form > |
10 | < apex:outputLabel value = "UserName : " for = "userName" /> |
11 | < apex:inputText required = "true" id = "userName" value = "{!userName}" /> |
12 | < br /> |
13 | < apex:outputLabel value = "Password : " for = "pwd" /> |
14 | < apex:inputsecret id = "pwd" value = "{!pwd}" /> |
15 | < br /> |
16 | < apex:commandButton id = "getRecords" value = "Get Records" action = "{!fetch}" rerender = "wrapper" status = "waitStatus" /> |
17 | < apex:actionStatus startText = "Requesting..." stopText = "" id = "waitStatus" /> |
18 | < hr /> |
19 | < apex:outputPanel id = "wrapper" > |
20 | < div class = "errorMsg" style = "display:{!displayError}" > {!errMsg} </ div > |
21 | < apex:pageBlockTable value = "{!acc}" var = "account" id = "accTable" rowClasses = "odd,even" styleClass = "tableClass" > |
22 |
23 | < apex:column > |
24 | < apex:facet name = "header" >Account Name</ apex:facet > |
25 | < apex:outputText value = "{!account.name}" /> |
26 | </ apex:column > |
27 |
28 | < apex:column > |
29 | < apex:facet name = "header" >Created By</ apex:facet > |
30 | < apex:outputText value = "{!account.CreatedBy.FirstName}" /> |
31 | </ apex:column > |
32 |
33 | < apex:column > |
34 | < apex:facet name = "header" >Phone</ apex:facet > |
35 | < apex:outputText value = "{!account.Phone}" /> |
36 | </ apex:column > |
37 |
38 | </ apex:pageBlockTable > |
39 | </ apex:outputPanel > |
40 | </ apex:form > |
41 | </ apex:pageBlock > |
42 | </ apex:page > |
No comments:
Post a Comment