open20/amos-workflow

此包的最新版本(1.5.0)没有可用的许可证信息。

AMOS 工作流系统

1.5.0 2023-10-26 21:02 UTC

README

此模块 Workflow 用于管理使用工作流记录的工作流状态转换。Amos Workflow 基于

  • raoul2000/yii2-workflow
  • cornernote/yii2-workflow-manager

安装

  1. 安装此扩展的首选方式是通过 composer

运行以下命令之一

composer require open20/amos-workflow

或将此行

"open20/amos-workflow": "dev-master"

添加到您的 composer.json 文件的 require 部分。

  1. 将模块添加到后端模块配置中

    'modules' => [
        'workflow' => [
           'class' => 'open20\amos\workflow\AmosWorkflow',
        ],
    ],
  2. 应用迁移

    a. amos-workflow 迁移

    php yii migrate/up --migrationPath=@vendor/open20/amos-workflow/src/migrations

    或将此行添加到控制台中的迁移配置

    return [
        .
        .
        .
        '@vendor/open20/amos-workflow/src/migrations',
        .
        .
        .
    ];

配置

//TODO 翻译修复此部分

工作流状态的变化被拦截为事件,并在 workflow_transition_log 表中写入日志记录(请参阅 WorkflowLogFunctionsBehavior)。

定义工作流模型
amos4 中的经典工作流包括以下状态

  • 草稿 /草稿
  • 待验证/请求发布
  • 验证通过/发布

为了自动化/标准化某些操作,在 amos-core 中创建了 WorkflowModelInterface 接口,建议实现它,并扩展 NotifyRecord 以利用例如模型验证请求的自动邮件等功能。

工作流通过填充表来定义

  • sw_workflow: 定义工作流的 ID,在 amos 4 中,它是模型的名称后跟 'Workflow',例如 'NewsWorkflow'。定义默认初始状态,可以由接口或迁移修改。例如 initial_status_id = 'DRAFT'

  • sw_status: 定义工作流的状态。状态将被保存(作为惯例)在模型的 status 字段中,连接 Workflow_id / status_id,例如 'NewsWorkflow/BOZZA'

  • sw_transition: 定义转换,即所有可能的状态转换。重要:如果您定义了转换,但遇到从状态 A 到状态 B 的转换错误,那可能是由于用户没有在那种状态下保存模型的权限。

  • sw_metadata: 为工作流的每个状态定义更改状态的按钮标签、弹出窗口文本、CSS 类等。还可以注释状态转换并将在状态转换日志中保存此类注释/注释。

要启用工作流事件行为,在您的模型行为数组中插入

 public function behaviors()
{
    return ArrayHelper::merge(parent::behaviors(), [
        .
        .
        .
        'workflow' => [
            'class' => SimpleWorkflowBehavior::className(),
            'defaultWorkflowId' => self::NEWS_WORKFLOW,
            'propagateErrorsToModel' => true
        ]
    ];
}

小部件

Amos Workflow 提供了三个小部件

  • WorkflowTransitionButtonsWidget
  • WorkflowTransitionStateDescriptorWidget

//TODO 解释/示例使用上述新小部件

  • WorkflowTransitionWidget open20\amos\workflow\widgets\WorkflowTransitionWidget
    绘制包含模型当前状态和从当前状态开始可能的按钮状态的部分(从 sw_metadata 中读取)。
    状态变更的注释/备注
    如有需要,可以显示弹出窗口以插入状态变更的注释/备注;要启用此功能,请在 sw_metadata 中为转换最终状态添加元数据:key ='comment',value = 1

如果模型工作流被绕过,则可以使用全局参数隐藏所有转换小部件。在应用程序后端参数数组中插入

    return [
        .
        .
        .
        'hideWorkflowTransitionWidget' => true
        .
        .
        .
    ];
    ```



example of use in a form:
```php
    <?= WorkflowTransitionWidget::widget([
        'form' => $form,
        'model' => $model,
        'workflowId' => ShowcaseProject::SHOWCASEPROJECT_WORKFLOW,
        'classDivIcon' => 'pull-left',
        'classDivMessage' => 'pull-left message',
        'viewWidgetOnNewRecord' => true,
        'translationCategory' => 'amosshowcaseprojects'
    ]); ?>