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
