When we create connection with “SforceEnterpriseClient”, we can upsert one record and then we need to recreate connection for next upsert, which eventually can result in the exception:
“UnexpectedErrorFault: REQUEST_LIMIT_EXCEEDED: TotalRequests Limit exceeded.”
The solution is to use “SforcePartnerClient” instead of “SforceEnterpriseClient”.
An example with steps to upsert records in bulk:
1. Include these files in your php code:
require_once ('SFDCPHPtoolkit/soapclient/SforcePartnerClient.php'); require_once ('SFDCPHPtoolkit/soapclient/SforceHeaderOptions.php');
2. Create an array of fields:
$all_fields=array(); $i = 0; foreach (...........) { $all_fields[$i]['Name'] = $fileName; $all_fields[$i]['WebnerSYS__Account_id__c'] =$sfId; $all_fields[$i]['WebnerSYS__Description__c'] = htmlspecialchars($description); $all_fields[$i]['WebnerSYS__S3_File_Url__c'] =$s3URL; $all_fields[$i]['WebnerSYS__DocExternalId__c'] =$key; }
3. Create another array as $sObjects. Create a new object of sObject() class which converts the previous array to object of sObject() class and push into $sObjects:
$sObjects = array(); foreach ($all_fields as $fieldset) { $sObject = new sObject(); $sObject->type = 'WebnerSYS__Documents__c'; // Salesforce Table or object that you will perform the upsert on $sObject->fields = $fieldset; array_push($sObjects, $sObject); }
4. Create the connection using “SforcePartnerClient”:
$wsdl = 'SFDCPHPtoolkit/soapclient/partner.wsdl.xml'; $userName = "USERNAME"; $password = "PASSWORD+SECURITYTOKEN"; // Process of logging on and getting a salesforce.com session $client = new SforcePartnerClient(); $client->createConnection($wsdl); $loginResult = $client->login($userName, $password);
5. Upsert command:
$results = $client->upsert("WebnerSYS__DocExternalId__c", $sObjects); //WebnerSYS__DocExternalId__c is an external ID