基于ProcessMaker\Nayra引擎的工作流开发之(二)核心方法

本文介绍了如何基于ProcessMakerNayra引擎开发工作流,涉及启动流程、任务流转的核心方法,以及实现EngineInterface、RepositoryInterface等关键接口,详细解释了各接口方法的作用,包括持久化数据的处理,如persistStartEventTriggered、persistActivityActivated等。
摘要由CSDN通过智能技术生成

上一篇文章https://blog.csdn.net/u011115903/article/details/100763399讲到我们面临的核心问题就是如何调用引擎触发启动事件,任务流转,结束事件,以及如何获取要持久化的数据,接下来我们会在此篇文章内详细讲解这一大家最关心的问题。

按照上一篇实现方式的方案,我们需要ProcessMaker\Nayra引擎帮助我们完成两个核心方法:启动流程,任务流转。

在我们要调用引擎的方法时,要准备好他要创建的实例,而创建实例则需要首先完成引擎指定的几个Interface,这些Interface有各自不同的作用,我们可以根据自己的需求在实现Interface时的指定方法时自定义。下面我把要需要实现的inteface的代码提供给大家,其中需要自定义的方法我会单独列给大家。

实现ProcessMaker\Nayra\Contracts\Engine\EngineInterface

这是核心接口,它的ProcessMaker\Nayra\Engine\EngineTrait中给出了核心方法,如流转方法 runToNextState,创建实例方法createExecutionInstance,从已有数据中加载实例方法loadExecutionInstance

<?php

namespace app\engine;

use ProcessMaker\Nayra\Contracts\Engine\EngineInterface;
use ProcessMaker\Nayra\Contracts\Engine\EventDefinitionBusInterface;
use ProcessMaker\Nayra\Contracts\Engine\JobManagerInterface;
use ProcessMaker\Nayra\Contracts\EventBusInterface;
use ProcessMaker\Nayra\Contracts\RepositoryInterface;
use ProcessMaker\Nayra\Engine\EngineTrait;

/**
 * Test implementation for EngineInterface.
 *
 * @package ProcessMaker\Bpmn
 */
class BpmnEngine implements EngineInterface {
    use EngineTrait;

    /**
     * @var RepositoryInterface
     */
    private $repository;

    /**
     * @var EventBusInterface $dispatcher
     */
    protected $dispatcher;

    /**
     * Test engine constructor.
     *
     * @param \ProcessMaker\Nayra\Contracts\RepositoryInterface $repository
     * @param \ProcessMaker\Nayra\Contracts\EventBusInterface $dispatcher
     * @param \ProcessMaker\Nayra\Contracts\Engine\JobManagerInterface|null $jobManager
     * @param \ProcessMaker\Nayra\Contracts\Engine\EventDefinitionBusInterface|null $eventDefinitionBus
     */
    public function __construct(RepositoryInterface $repository, EventBusInterface $dispatcher, JobManagerInterface $jobManager = null, EventDefinitionBusInterface $eventDefinitionBus = null)
    {
        $this->setRepository($repository);
        $this->setDispatcher($dispatcher);
        $this->setJobManager($jobManager);
        $eventDefinitionBus ? $this->setEventDefinitionBus($eventDefinitionBus) : null;
    }

    /**
     * @return EventBusInterface
     */
    public function getDispatcher()
    {
        return $this->dispatcher;
    }

    /**
     * @param EventBusInterface $dispatcher
     *
     * @return $this
     */
    public function setDispatcher(EventBusInterface $dispatcher)
    {
        $this->dispatcher = $dispatcher;
        return $this;
    }

    /**
     * @return FactoryInterface
     */
    public function getRepository()
    {
        return $this->repository;
    }

    /**
     * @param RepositoryInterface $repository
     *
     * @return $this
     */
    public function setRepository(RepositoryInterface $repository)
    {
        $this->repository = $repository;
        return $this;
    }
}

实现ProcessMaker\Nayra\Contracts\RepositoryInterface

这同样是一个核心接口,它的ProcessMaker\Nayra\RepositoryTrait主要提供了如何创建流程对象的方法,是创建最后操作实例的必要参数。

<?php

namespace app\engine;

use ProcessMaker\Nayra\Contracts\Repositories\StorageInterface;
use ProcessMaker\Nayra\Contracts\RepositoryInterface;
use ProcessMaker\Nayra\RepositoryTrait;
use ProcessMaker\Test\Models\CallActivity;
use ProcessMaker\Test\Models\ExecutionInstance;
use app\engine\FormalExpressionEngine;
use ProcessMaker\Test\Models\TestOneClassWithEmptyConstructor;
use ProcessMaker\Test\Models\TestTwoClassWithArgumentsConstructor;
use app\engine\ExecutionInstanceRepositoryEngine;

/**
 * Repository
 *
 * @package ProcessMaker\Test\Models
 */
class RepositoryEngine implements RepositoryInterface {

    use RepositoryTrait;

    /**
     * Create instance of FormalExpression.
     *
     * @return \ProcessMaker\Nayra\Contracts\Bpmn\FormalExpressionInterface
     */
    public function createFormalExpression()
    {
        return new FormalExpressionEngine();
    }

    /**
     * Create instance of CallActivity.
     *
     * @return \ProcessMaker\Nayra\Contracts\Bpmn\CallActivityInterface
     */
    public function createCallActivity()
    {
        return new CallActivity();
    }

    /**
     * Create a execution instance repository.
     *
     * @return \ProcessMaker\Test\Models\ExecutionInstanceRepository
     */
    public function createExecutionInstanceRepository()
    {
        return new ExecutionInstanceRepositoryEngine();
    }

    /**
     * Create a test class
     *
     * @return TestOneClassWithEmptyConstructor
     */
    public function createTestOne()
    {
        return new TestOneClassWithEmptyConstructor();
    }

    /**
     * Create a test class with parameters
     *
     * @param mixed $field1
     * @param mixed $field2
     *
     * @return TestTwoClassWithArgumentsConstructor
     */
    public function createTestTwo($field1, $field2)
    {
        return new TestTwoClassWithArgumentsConstructor($field1, $field2);
    }
}

实现ProcessMaker\Nayra\Contracts\EventBusInterface

这个接口可以不实现具体方法(我就什么都没实现),他可能提供了对事件的监听,做消息通知使用(待确认,我没使用到)

<?php

namespace app\engine;

use ProcessMaker\Nayra\Contracts\EventBusInterface;

class EnventEngine implements EventBusInterface {
    


    /**
     * Register an event listener with the dispatcher.
     *
     * @param  string|array $ev
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值