如何以编程方式触发 shopware6 上的流程构建器上的流程

问题描述 投票:0回答:1

我已经实现了一个流程,该流程应根据交付状态更改时触发。

在此流程中,我有一个条件反映“带标签的订单”是“我创建的标签(例如标记器)”之一

然后我编写了一个命令来标记其交货状态为在特定时间段内发货的订单

$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,但是这个怎么用呢?

谢谢

php events shopware6
1个回答
0
投票

我通过创建自定义事件触发器并将其添加到现有流程中来使其工作。 https://developer.shopware.com/docs/guides/plugins/plugins/framework/flow/add-flow-builder-trigger.html

我扩展了以下接口

MailAware——让您可以访问 MailRecipientStruct 方法,然后我可以在后端使用发送电子邮件操作。

OrderAware --- 访问 orderid

SalesChannelAware - 销售渠道 ID

和 BusinessEventInterface

我还在后端添加了所需的操作“发送电子邮件”来发送我的递送邮件

这是我如何修复它的基本解释。

© www.soinside.com 2019 - 2024. All rights reserved.