php-arsenal / safe-salesforce-saver-bundle
允许您安全地将对象保存到Salesforce
3.0.0
2021-04-13 11:32 UTC
Requires
- php: >=7.4
- ext-ctype: *
- ext-iconv: *
- php-amqplib/rabbitmq-bundle: ^2.6
- php-arsenal/salesforce-mapper-bundle: ^4.0
- symfony/config: ^5.2
- symfony/dependency-injection: ^5.2
- symfony/dotenv: ^5.2
- symfony/http-kernel: ^5.2
- symfony/yaml: ^5.2
Requires (Dev)
- phpunit/php-code-coverage: ^9.2
- phpunit/phpunit: ^9.5
README
关于
使用此包,您可以停止担心在尝试将信息保存到Salesforce时数据丢失的问题。SafeSalesforceSaver将接收您提供的对象并将它们放入队列中。当您决定一次性保存数百(甚至数千)个对象时,这些项目将逐个从队列中取出,以防止Salesforce过载。如果在保存过程中发生异常,Rabbit将稍后重试保存,同时记录错误,以便您可以调试问题。
安装
$ composer require php-arsenal/safe-salesforce-saver-bundle
根据您的Symfony版本,您可能需要在app/AppKernel.php
中注册此包(Symfony 3.4及以下版本)
public function registerBundles() { $bundles = [ new PhpArsenal\SafeSalesforceSaverBundle\SafeSalesforceSaverBundle(), ]; return $bundles; }
或(Symfony 4.0及以上版本)在您的config/bundles.php
中
return [ PhpArsenal\SafeSalesforceSaverBundle\SafeSalesforceSaverBundle::class => ['all' => true], ];
用法
要使此包正常工作,您必须在Rabbit客户端中启动队列。为此,您需要将以下配置添加到项目的config.yml中
old_sound_rabbit_mq: producers: sss_async_processor: class: PhpArsenal\SafeSalesforceSaverBundle\Producer\AsyncSfSaverProducer connection: default exchange_options: name: 'sss_async_queue' type: direct consumers: sss_async_processor: connection: default exchange_options: name: 'sss_async_queue' type: direct queue_options: name: 'sss_async_queue' qos_options: prefetch_size: 0 prefetch_count: 1 global: false callback: PhpArsenal\SafeSalesforceSaverBundle\Consumers\AsyncSfSaveConsumer rpc_clients: parallel: connection: default expect_serialized_response: false rpc_servers: safe_salesforce_saver_server: connection: default callback: PhpArsenal\SafeSalesforceSaverBundle\Consumers\SafeSalesforceSaverServer qos_options: { prefetch_size: 0, prefetch_count: 1, global: false } queue_options: { name: sss_rpc_queue, durable: true, auto_delete: false }
请确保您不要更改队列的名称,因为这可能会导致问题。上述配置假设您已经设置了默认的rabbitMQ配置。如果没有,请参阅GitHub上的rabbit包的readme文件。
为了实际将对象保存到Salesforce,它们必须以正确的方式注解。请参阅GitHub上的mapper包。
当您更新了配置和模型后,您可以通过两种不同的方式保存它们。同步或异步
<?php use PhpArsenal\SafeSalesforceSaverBundle\Services\SafeSalesforceSaver; class ObjectSaver { /** @var SafeSalesforceSaver */ private $safeSalesforceSaver; /** * @param SafeSalesforceSaver $safeSalesforceSaver */ public function __construct(SafeSalesforceSaver $safeSalesforceSaver) { $this->safeSalesforceSaver = $safeSalesforceSaver; } // This way of saving will wait for the save result from Salesforce. This means that you can immediately access the newly inserted ID after Salesforce saved the record. public function saveSingle(Object $object): string { $this->safeSalesforceSaver->save($object); return $object->getId(); } // This function lets you save multiple objects at once. Simply put all the objects you want to save in an array and pass it to the SafeSalesforceSaver. public function saveMultiple(Object $object, Object $object2, Object $object3): array { $this->safeSalesforceSaver->save([$object, $object2, $object3]); return [$object->getId(), $object2->getId(), $object3->getId()]; } // If you do not want to wait for the result you can simply put your object into the queue and continue with the rest of your code. This is recommended if you don't need the ID or if you don't need a confirmation that the save succeeded. public function aSyncSaveSingle(Object $object): void { $this->safeSalesforceSaver->aSyncSave($object); } // As with the other save function, it is also possible to save multiple objects to Salesforce at once without waiting for the response. public function aSyncSaveMultiple(Object $object, Object $object2, Object $object3): void { $this->safeSalesforceSaver->aSyncSave([$object, $object2, $object3]); } }