我已经实现了一个流程,该流程应根据交付状态更改时触发。
在此流程中,我有一个条件反映“带标签的订单”是“我创建的标签(例如标记器)”之一
然后我编写了一个命令来标记其交货状态为在特定时间段内发货的订单
$criteria = new Criteria();
$criteria->addAssociation('deliveries.stateMachineState');
$criteria->addAssociation('orderCustomer');
$criteria->addFilter(new EqualsFilter('deliveries.stateMachineState.technicalName', 'Shipped'));
$oneWeekAgo = new \DateTime('-1 days');
$criteria->addFilter(new RangeFilter('orderDateTime', [
RangeFilter::GTE => $oneWeekAgo->format(DATE_ATOM)
]));
//my tag method
private function tagOrder(Context $context, string $orderId, string $tagId): void
{
$this->orderRepository->update([
[
'id' => $orderId,
'tags' => [
['id' => $tagId]
]
]
], $context);
}
// and then called
$this->tagOrder($context, $order->getId(), $tagId);
代码按预期工作,标记了我需要标记的订单。
但我注意到,因为流程中的触发器设置为“状态已达到/订单交付/状态/已发货
然后发送一封递送邮件(非常重要)
流程仅在交付状态发生变化时才会执行,这并不奇怪。
在完成标记订单后,如何以编程方式触发相同的流程或任何类型的流程。
请记住,当触发任何类型的流程或流程时,需要发送递送邮件。
我也听说过flowexecutor,但是这个怎么用呢?
谢谢
我通过创建自定义事件触发器并将其添加到现有流程中来使其工作。 https://developer.shopware.com/docs/guides/plugins/plugins/framework/flow/add-flow-builder-trigger.html
我扩展了以下接口
MailAware——让您可以访问 MailRecipientStruct 方法,然后我可以在后端使用发送电子邮件操作。
OrderAware --- 访问 orderid
SalesChannelAware - 销售渠道 ID
和 BusinessEventInterface
我还在后端添加了所需的操作“发送电子邮件”来发送我的递送邮件
这是我如何修复它的基本解释。