open20 / amos-workflow
AMOS 工作流系统
Requires
- php: >=5.4.0
- cornernote/yii2-workflow-manager: ^1.0.1
- open20/amos-core: ^1.26.0
- raoul2000/yii2-workflow: ^1.1.0
This package is auto-updated.
Last update: 2024-09-26 22:57:42 UTC
README
此模块 Workflow 用于管理使用工作流记录的工作流状态转换。Amos Workflow 基于
- raoul2000/yii2-workflow
- cornernote/yii2-workflow-manager
安装
- 安装此扩展的首选方式是通过 composer。
运行以下命令之一
composer require open20/amos-workflow
或将此行
"open20/amos-workflow": "dev-master"
添加到您的 composer.json
文件的 require 部分。
-
将模块添加到后端模块配置中
'modules' => [ 'workflow' => [ 'class' => 'open20\amos\workflow\AmosWorkflow', ], ],
-
应用迁移
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' ]); ?>