Thursday 16 January 2014

Extend Feature Of Salesforce to Salesforce

Salesforce to Salesforce is a Force.com feature that lets you configure two Force.com environments (orgs) so that they share data records in real time. It is useful for those salesforce org who does business with partnership. While doing business It might required to share business data. if both org use salesforce then Salesforce to salesforce feature is easy to use for sharing data. 
As name suggest only this feature(S2S) only  used by Salesforce Org. 

How to use Salesforce to Salesforce ?

  • Enable salesforce to salesforce features in both the Org.(Source Org and Target org)
  • Create one Account and Contact in Source Org and provide email address(which is associated with target salesforce org. )
  • Now Create a Connection record from tab list. Choose Contact Name(which you have just created )
  • Send invitation 
  • Check mail, Activate connection
  • Choose object whose record you want to send and Save it 
  • Click on Edit link next to Object name in the Published Object section
  • Choose fields of chosen object
  • Now Come to target Org.
  • Click on Subscribe button in the Subscribe Object section 
  • Accept the object and map the field
  • Create some record in source org.
  • Go to the enhanced list view page 
  • Select the Record and click on Forward Connection button 
  • Choose the connection and send it
  • Check the status of record in the External sharing section (Which you have to add by editing layout from Related list Section) 
  • When status will be Active Sent then Record must be created in target Org.
This is default functionality of Salesforce to Salesforce(S2S).
Now somebody wants to do automatically data transfer. That means If some record is created in source org that record should be created automatically in target org if mapping is present.
For this requirement I have written a trigger and a class.

This is my trigger 

trigger InsertingAccountThroughS2S on Account(after insert) {
    
    Id networkId = ConnectionHelper.getConnectionId('Salesforce'); 
    list<Account> listOfAccounts = new list<Account>();
    list<PartnerNetworkRecordConnection> accountConnections =  new  list<PartnerNetworkRecordConnection>();
    
    for(Account act:trigger.new){
        
        if(act.ConnectionReceivedId == null){
        
            PartnerNetworkRecordConnection newConnection = 
                      new PartnerNetworkRecordConnection
                          ConnectionId = networkId, 
                          LocalRecordId = act.Id, 
                          SendClosedTasks = false, 
                          SendOpenTasks = false, 
                          SendEmails = false);
                          
             accountConnections.add(newConnection );
                          
              
        }
    }
    if (accountConnections.size() > 0 ) { 
          database.insert(accountConnections); 
    } 
   
}

This is the class

public class ConnectionHelper {
    public static Id getConnectionId(String connectionName) {
    
        List<PartnerNetworkConnection> partnerNetConList =
           [Select id from PartnerNetworkConnection where connectionStatus = 'Accepted' and connectionName =:connectionName];
        
        if ( partnerNetConList.size()!= 0 ) {
            return partnerNetConList.get(0).Id;
        }
        
        return null;
    }
}

4 comments:

Unknown said...

nice post..

Asish Kumar Behera said...

Thank You @anurag

Unknown said...

Very Effective one. This will make S2S more lively.
Another plus thing we can do here is that we can send related child object records as well with the parent.
For e.g with account, contacts can be migrated like
newConnection.RelatedRecords = 'Contact';

Asish Kumar Behera said...

Thanks Souvik, That's right.Yeah We can send related records with parent.