shubinmi / salesforce-bulk-api
用于Salesforce批量API的客户端。轻松操作您的Salesforce数据。
1.2.1
2021-09-03 11:51 UTC
Requires
- php: >=5.6
- guzzlehttp/guzzle: ^7.0
- shubinmi/helpers: ^1.0
Requires (Dev)
- phpunit/phpunit: ^9.0
README
轻松操作您的Salesforce数据
别担心,快乐就好
功能
- INSERT作业
- UPDATE作业
- UPSERT作业
- DELETE作业
- QUERY (SELECT)作业
例如,参见测试
安装
使用以下命令安装最新版本
$ composer require shubinmi/salesforce-bulk-api
基本用法
<?php use SalesforceBulkApi\dto\CreateJobDto; use SalesforceBulkApi\objects\SFBatchErrors; use SalesforceBulkApi\conf\LoginParams; use SalesforceBulkApi\services\JobSFApiService; // Set up API Client $params = (new LoginParams) ->setUserName('mySFLogin') ->setUserPass('MySFPass') ->setUserSecretToken('mySecretTokenFomSF'); // (optional) Flag as Sandbox // $params->setEndpointPrefixAsSandbox(); // Set up SF job $jobRequest = (new CreateJobDto) ->setObject('My_User__c') ->setOperation(CreateJobDto::OPERATION_INSERT); // Use CreateJobDto::OPERATION_UPSERT for upsert operation // (optional if Upsert) Set an External Id // $upsertKey = 'My_External_Id__c'; // $jobRequest->setExternalIdFieldName($upsertKey); // Data Batches $data = [ [ // Batch 1 [ 'Email__c' => 'new@user.net', 'First_Name__c' => 'New Net' ], [ 'Email__c' => 'new@user.org', 'First_Name__c' => 'New Org' ], ], [ // Batch 2 [ 'Email__c' => 'new1@user.net', 'First_Name__c' => 'New1 Net' ], [ 'Email__c' => 'new1@user.org', 'First_Name__c' => 'New1 Org' ], ], [ // Batch 3 [ 'Email__c' => 'new2@user.net', 'First_Name__c' => 'New2 Net' ], [ 'Email__c' => 'new2@user.org', 'First_Name__c' => 'New2 Org' ], ], ]; // Init Job $jobService = (new JobSFApiService($params)) ->initJob($jobRequest); // Add batches of data, can be up to 10000 records long each foreach ($data as $batchData) { $jobService->addBatchToJob($batchData); } // Gather up an ordered list of Batch ids to reference data in the batch, specifically on error handling // JobSFApiService::waitingForComplete update job statuses in the order returned from Salesforce // This new order is not necessarily the same order the data was submitted in making referencing the original data difficult $job = $jobService->getJob(); $batchesInfo = $job->getBatchesInfo(); $batchIdReference = array_flip(array_map(function($batchInfoDto){ return $batchInfoDto->getId(); }, $batchesInfo)); // Close Job and Wait for Job completion $jobService ->closeJob() ->waitingForComplete(); // Collect jobs errors $errors = $jobService->getErrors(); // Operate with errors foreach ($errors as $error) { /** @var SFBatchErrors $error */ $errorsBatch = $error->getBatchInfo(); $batchId = $errorsBatch->getId(); $batchNo = $batchIdReference[$batchId]; $errorsMsg = $error->getErrorMessages(); $errorsElementNumber = $error->getErrorNumbers(); if (empty($errorsElementNumber)) { // No specific errors echo "Batch $batchId (#$batchNo) returned a general error" . PHP_EOL; echo "\tState: " . $errorsBatch->getState() . ' (' . $errorsBatch->getStateMessage() . ')' . PHP_EOL; echo "\tNote: An error here might mean the data types sent are incorrect (eg \"0\" vs 0/false)." . PHP_EOL; } else { echo "Batch $batchId (#$batchNo) failed for following rows:" . PHP_EOL; foreach ($errorsElementNumber as $errorMsgKey => $errorRowNumber) { echo "\tRow number = " . $errorRowNumber . " Error message = " . $errorsMsg[$errorMsgKey] . PHP_EOL; $record = $data[$batchNo][$errorRowNumber]; echo "\t\tEmail = " . $record['Email__c'] . PHP_EOL; echo "\t\tFirst Name = " . $record['First_Name__c'] . PHP_EOL; } } }
安全贡献
$ sh ./vendor/phpunit/phpunit/phpunit ./tests/services