目录
本文涵盖:如何部署Wexflow,如何使用MongoDB,RavenDB和其他数据库系统配置Wexflow,Wexflow的体系结构和三个主要组件,如何构建批准流程,如何构建顺序流程,如何构建流程图流程,如何构建和部署自定义活动,源代码描述以及如何调试Wexflow。Wexflow的目标是使重复执行的任务自动化。
介绍
Wexflow是使用.NET Core,C#和JavaScript构建的开源和跨平台工作流引擎和自动化平台。Wexflow的目标是使重复执行的任务自动化。借助Wexflow,建筑自动化和工作流程变得容易。Wexflow还有助于使长期运行的流程变得简单明了。
Wexflow可用作业务流程引擎,用于在通用业务对象(例如文档、发票、采购订单、休假请求和时间表)上创建批准流程,用于表单提交批准流程,用于报告,用于将视频自动上传到YouTube,Vimeo或Instagram,用于自动发送电子邮件、推文和SMS消息,通过热文件夹或RESTful服务连接系统和应用程序,用于数据库管理和维护,用于批量上传文件,用于批量下载文件,用于记录实时视频供稿,用于对音频和音频进行转码。视频文件,用于处理图像,用于加密和解密文件,用于同步本地或远程文件夹的内容等。
要了解有关Wexflow的更多信息,请阅读以下文档。
如何部署Wexflow
您可以在Windows、Linux和macOS发行版上使用Docker容器部署Wexflow。
在Docker中
要在Linux上使用Docker容器部署Wexflow,请遵循以下演练:
1.拉取aelassas/wexflow
$ docker pull aelassas/wexflow
2.运行以下命令
$ docker run --name wexflow -d aelassas/wexflow
3.将后端,配置文件和配置文件夹从容器复制到当前文件夹
$ docker cp wexflow:/opt/wexflow/Backend Backend
$ docker cp wexflow:/opt/wexflow/Wexflow.Server/appsettings.json appsettings.json
$ docker cp wexflow:/opt/wexflow/Wexflow Wexflow
$ docker cp wexflow:/opt/wexflow/WexflowTesting WexflowTesting
4. 在当前文件夹中创建以下docker-compose.yml
version: "3"
services:
wexflow:
image: aelassas/wexflow:latest
ports:
- 8000:8000
volumes:
- ./appsettings.json:/opt/wexflow/Wexflow.Server/appsettings.json
- ./Wexflow:/opt/wexflow/Wexflow
- ./WexflowTesting:/opt/wexflow/WexflowTesting
wexflow-backend:
image: danjellz/http-server
ports:
- 8011:8011
volumes:
- ./Backend:/public
command:
http-server --cors -p 8011
5.运行以下命令
$ docker-compose up
等待它完全初始化,然后访问 http://localhost:8011或 http:// host-ip:8011 以访问Wexflow的后端。您还可以访问 http:// localhost:8000或 http:// host-ip:8000 来访问Swagger UI。
Docker镜像
要在Windows和macOS发行版上使用Docker容器部署Wexflow,您必须构建自己的Docker镜像。
如果要构建自己的Docker镜像,以下是用于创建和构建Docker镜像的两种可能的配置。
Docker文件
您可以按照以下说明创建没有后端的Wexflow Server Docker镜像。在这种情况下,后端应托管在Web服务器上。
- 创建一个名为wexflow-5.7的文件夹
- 将以下Dockerfile放在文件夹wexflow-5.7中的
- 下载5.7版的Linux源zip文件
- 将其解压缩到名为wexflow-5.7-linux-netcore的文件夹中
- 将提取的文件夹wexflow-5.7-linux-netcore放在文件夹wexflow-5.7中
- 移至文件夹wexflow-5.7(此文件夹的内容为Dockerfile和文件夹wexflow-5.7-linux-netcore)
- 运行以下命令:
$ docker build -t wexflow .
$ docker run -i -t -p 8000:8000 wexflow:latest
8. 等待它完全初始化,然后访问 http:// localhost:8000 或 http:// host-ip:8000 以访问Swagger UI
默认凭据为:
Username: admin
Password: wexflow2018
登录后,您可以从后端更改密码。
以下是Ubuntu 18.04(docker build)的屏幕截图:
以下是Ubuntu 18.04(docker run)的屏幕截图:
Docker Compose
您可以按照以下说明通过Docker Compose启动Wexflow Server及其后端。
- 创建一个名为wexflow-5.7的文件夹
- 将以下 docker-compose.yml 放在文件夹wexflow-5.7中
- 下载5.7版的Linux源zip文件
- 将其解压缩到名为wexflow-5.7-linux-netcore的文件夹中
- 将提取的文件夹wexflow-5.7-linux-netcore放在文件夹wexflow-5.7中
- 移至文件夹wexflow-5.7(此文件夹的内容为docker-compose.yml和文件夹wexflow-5.7-linux-netcore)
- 运行以下命令:
$ docker-compose up
8. 等待它完全初始化,然后访问 http:// localhost:8011 或http:// host-ip:8011 以访问后端
9. 等待它完全初始化,然后访问 http:// localhost:8000 或 http:// host-ip:8000 以访问Swagger UI
默认凭据为:
Username: admin
Password: wexflow2018
登录后,您可以从后端更改密码。
以下是Ubuntu 18.04(docker-compose up)的屏幕截图:
如何配置Wexflow
默认情况下,Wexflow使用的是LiteDB数据库系统,但是您可以切换到MongoDB、RavenDB、PostgreSQL、SQL Server、MySQL、SQLite、Firebird、Oracle或MariaDB。
MongoDB
要使用MongoDB数据库系统,请执行以下操作:
1. 在当前文件夹中创建以下docker-compose.yml
version: "3"
services:
mongo:
image: mongo:latest
ports:
- 27017:27017
wexflow:
image: aelassas/wexflow:latest
depends_on:
- mongo
ports:
- 8000:8000
volumes:
- ./appsettings.json:/opt/wexflow/Wexflow.Server/appsettings.json
- ./Wexflow:/opt/wexflow/Wexflow
- ./WexflowTesting:/opt/wexflow/WexflowTesting
wexflow-backend:
image: danjellz/http-server
ports:
- 8011:8011
volumes:
- ./Backend:/public
command:
http-server --cors -p 8011
2.编辑./Wexflow/Wexflow.xml配置文件,如下所示:
<?xml version="1.0" encoding="UTF-8" ?>
<Wexflow>
<Setting name="workflowsFolder" value="/opt/wexflow/Wexflow/Workflows" />
<Setting name="recordsFolder" value="/opt/wexflow/Wexflow/Records" />
<Setting name="recordsHotFolder" value="/opt/wexflow/Wexflow/Records/_HotFolder" />
<Setting name="tempFolder" value="/opt/wexflow/Wexflow/Temp" />
<Setting name="tasksFolder" value="/opt/wexflow/Wexflow/Tasks" />
<Setting name="approvalFolder" value="/opt/wexflow/Wexflow/Approval" />
<Setting name="xsd" value="/opt/wexflow/Wexflow/Workflow.xsd" />
…
<!-- SslProtocols: None|Ssl2|Ssl3|Tls|Default|Tls11|Tls12 -->
<Setting name="connectionString" value="Database=wexflow_netcore;MongoUrl=mongodb://mongo:27017;EnabledSslProtocols=false;SslProtocols=None" />
</Wexflow>
3.运行以下命令
$ docker-compose up
等待它完全初始化,然后访问 http:// localhost:8011或 http:// host-ip:8011 以访问Wexflow的后端。您还可以访问 http:// localhost:8000或 http:// host-ip:8000 来访问Swagger UI。
Raven数据库
要使用RavenDB数据库系统,请按照下列步骤操作:
1. 在当前文件夹中创建以下docker-compose.yml
version: "3"
services:
ravendb:
image: ravendb/ravendb
ports:
- 8080:8080
wexflow:
image: aelassas/wexflow:latest
depends_on:
- ravendb
ports:
- 8000:8000
volumes:
- ./appsettings.json:/opt/wexflow/Wexflow.Server/appsettings.json
- ./Wexflow:/opt/wexflow/Wexflow
- ./WexflowTesting:/opt/wexflow/WexflowTesting
wexflow-backend:
image: danjellz/http-server
ports:
- 8011:8011
volumes:
- ./Backend:/public
command:
http-server --cors -p 8011
2.编辑./Wexflow/Wexflow.xml配置文件,如下所示:
<?xml version="1.0" encoding="UTF-8" ?>
<Wexflow>
<Setting name="workflowsFolder" value="/opt/wexflow/Wexflow/Workflows" />
<Setting name="recordsFolder" value="/opt/wexflow/Wexflow/Records" />
<Setting name="recordsHotFolder" value="/opt/wexflow/Wexflow/Records/_HotFolder" />
<Setting name="tempFolder" value="/opt/wexflow/Wexflow/Temp" />
<Setting name="tasksFolder" value="/opt/wexflow/Wexflow/Tasks" />
<Setting name="approvalFolder" value="/opt/wexflow/Wexflow/Approval" />
…
<!-- RavenDB -->
<Setting name="dbType" value="RavenDB" />
<Setting name="connectionString" value="Database=wexflow_netcore;RavenUrl=http://ravendb:8080" />
</Wexflow>
3.运行以下命令
$ docker-compose up
等待它完全初始化,然后访问 http:// localhost:8011或 http:// host-ip:8011 以访问Wexflow的后端。您还可以访问 http:// localhost:8000或 http:// host-ip:8000 来访问Swagger UI。
其他数据库系统
对于其他数据库系统,只需编辑./Wexflow/Wexflow.xml配置文件,在dbType 设置中设置所需的数据库系统, 然后设置相关的 connectionString设置。您可以在以下文档中找到有关如何配置其他数据库系统的更多信息 。
多国语言支持
Wexflow提供多语言支持。目前有三种语言(英语、法语和丹麦语)。英语是默认语言,但是您可以从后端菜单右上角的语言下拉列表中轻松切换语言。
要添加新语言,只需编辑JavaScript文件./Backend/js/language.js。您将需要为新语言提供一个标志图标。一旦下载了标志图标,只需将其放置在./Backend/images/文件夹中即可。标记图标的大小必须为24x24像素。
例如,以下是添加德语(Deutsch)的示例:
const languageModule = (function () {
"use strict";
const codes = [
{ Name: "English", Code: "en", Icon: "images/en.png" },
{ Name: "Français", Code: "fr", Icon: "images/fr.png" },
{ Name: "Deutsch", Code: "de", Icon: "images/de.png" }
];
let languages = {};
languages["en"] = {};
languages["fr"] = {};
languages["de
// de
languages["de"]["language"] = "Sprache";
// ...
return {
codes: codes,
languages: languages
};
})();
Wexflow的体系结构
本节介绍Wexflow的一般体系结构以及Wexflow概念的简介,以使您了解平台并熟悉此自动化平台。
Wexflow由三个主要组件组成。Wexflow服务器、Wexflow API和Wexflow数据库。Wexflow服务器、Wexflow API和Wexflow数据库是使用.NET Core构建的。Wexflow还提供了三个主要的客户端组件。使用JavaScript、Android应用程序和iOS应用程序构建的强大后端,用于查询Wexflow服务器。
由于工作流通常是长时间运行的流程,因此需要将它们持久保存到任务或活动之间的存储中。有几个持久性提供程序可用。Wexflow提供了LiteDB,MongoDB,RavenDB,PostgreSQL,SQL Server,MySQL,SQLite,Firebird, Oracle和MariaDB持久性提供程序。LiteDB是默认的持久性提供程序,因为它需要零配置,但是您可以在部署期间切换到您选择的持久性提供程序。
后端使您可以在所有工作流程中进行搜索和过滤,在工作流程上获得实时统计信息,轻松管理工作流程,轻松设计工作流程以及轻松跟踪工作流程:
Wexflow提供了一个Android应用程序,因此您可以从Android设备轻松管理流量:
Wexflow提供了一个iOS应用程序,因此您可以从iOS设备轻松管理流量:
您可以通过Wexflow API与云中的任何其他SaaS产品创建自定义集成 :
在Wexflow中,工作流程是一组任务或活动,这些任务或活动是依次启动,通过流程图流程或通过批准流程启动的。可以从后端的设计器选项卡中创建工作流:
用户可以通过以下方式从逻辑示意图视图创建工作流程:将任务或活动从左侧面板拖放到逻辑示意图视图,然后单击每个任务以在右侧面板中配置其设置。
可以从管理器选项卡手动启动工作流,也可以定期启动或通过定义cron表达式启动工作流。
Wexflow利用了 在大型企业系统中使用的 Quartz.NET开源作业调度系统。因此,Wexflow在计划工作流程作业(例如cron工作流程)方面提供了灵活性 。如果您需要根据类似于日历的概念而不是确切指定的间隔重复进行的解雇计划,Cron工作流通常比手动或定期工作流更有用。
要设置手动工作流程,只需在设计器的右侧面板中选择“触发器启动类型”。要设置定期工作流程,只需在设计器的右侧面板中选择“定期启动”类型,然后指定周期即可。要设置cron工作流程,只需在设计器的右侧面板中选择Cron启动类型,然后指定cron表达式即可。
默认情况下,工作流的并行执行处于启用状态,这意味着如果您同时启动同一工作流的多个实例,则这些实例将并行启动。要禁用并行执行并启用队列,只需在设计器的右面板中取消选中“启用并行执行”复选框即可。如果禁用了并行执行,并且同时启动了一个工作流程的多个实例,则这些实例将排队,并且每个实例将等待,直到该实例完成其工作。
工作流执行一组任务或活动。每个任务都是可以启用,禁用或替换的模块。Wexflow 为不同类型的作业提供95个内置任务。有文件系统任务、网络任务、电子邮件任务、SMS任务、SQL任务、报告任务、社交媒体任务、流程图任务、批准任务等。
可以从工作流的执行图中编辑任务的执行流程。如果工作流没有执行图,则依次启动任务。如果工作流具有执行图,则将遵循其中描述的流程。
在设计器选项卡的图形视图中的示例执行图下方:
可以从工作流的JSON定义或XML定义中编辑工作流的执行图。
工作流的执行图可以包含If、While或Swich 流程图节点。每个流程图节点将流程图任务和要运行的一组任务作为输入。
执行图还可以包含工作流事件。工作流完成工作后,其最终结果将是成功、警告、错误或被拒绝。如果最终结果是成功,则触发OnSuccess事件。如果其最终结果是警告,则会触发OnWarning事件。如果最终结果是错误,则会触发OnError事件。如果工作流被拒绝,则会触发OnRejected事件。事件包含一组要运行的任务和/或流程图节点。
可以从管理器选项卡手动启动工作流程:
管理器选项卡还允许查看工作流程的运行实例,并允许停止、批准或拒绝实例。
跟踪并记录Wexflow中发生的所有事件。借助Wexflow的日志记录系统,您可以轻松跟踪工作流程,并通过实时监控和电子邮件通知随时了解情况。
Wexflow的日志写在/opt/wexflow/Wexflow.Server/Wexflow.log中。每天只有一个日志文件。旧的日志文件以以下格式保存:Wexflow.logyyyyMMdd
以下是日志文件Wexflow.log的示例:
Wexflow利用 log4net(一种有助于将日志语句输出到各种输出目标的工具)。因此,可以通过使用Wexflow的配置文件/opt/wexflow/Wexflow.Server/log4net.config中的log4net.Appender.SmtpAppender将Wexflow配置为在发生错误时发送事件报告。下面是一个示例配置:
<appender name="SmtpAppender" type="log4net.Appender.SmtpAppender">
<to value="foo@bar.com" />
<from value="baz@bar.com" />
<subject value="Some subject" />
<smtpHost value="smtp.gmail.com" />
<authentication value="Basic" />
<port value="587" />
<EnableSsl value="true"/>
<lossy value="true" />
<evaluator type="log4net.Core.LevelEvaluator">
<threshold value="ERROR"/>
</evaluator>
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%newline%date [%thread] %-5level %logger [%property{NDC}] - %message%newline%newline%newline" />
</layout>
</appender>
Wexflow为您提供了一个漂亮的仪表板 ,可查看工作流的实时统计信息。实际上,“仪表板”选项卡为您提供有关工作流的实时统计信息,并使您可以轻松,详细地跟踪工作流服务器。在仪表板选项卡上,您还可以按关键字或日期过滤工作流条目。您还可以按日期、名称等对工作流程条目进行排序:
当您单击一个条目时,您将在弹出窗口中获得相应条目的日志,如下所示:
后端中的“历史记录”选项卡还使您可以跟踪所有工作流以及工作流服务器上发生的所有事情。实际上,从该选项卡中,您将获得在工作流服务器上执行的所有工作流实例的概述。此外,您可以按关键字或日期过滤条目。您还可以按日期、名称等对条目进行排序:
当您单击一个条目时,您将在弹出窗口中获取相应条目的日志:
如何建立审批流程
Wexflow允许在通用业务对象(例如文档、发票、采购订单、休假请求、时间表等)上创建批准流程。这些通用业务对象称为记录。
以下视频显示了如何在Wexflow中建立批准流程。
记录
记录是通用业务对象,包括以下信息:
字段 | 类型 |
ID | 识别码 |
Name | 单行文字 |
Description | 多行文字 |
Approved | 是/否 |
StartDate | 日期和时间 |
EndDate | 日期和时间 |
Comments | 多行文字 |
ManagerComments | 多行文字 |
CreatedBy | 人名 |
CreatedOn | 日期和时间 |
ModifiedBy | 人名 |
ModifiedOn | 日期和时间 |
AssignedTo | 人名 |
AssignedOn | 日期和时间 |
要创建新记录,只需要名称字段。
要创建新记录,请按照下列步骤操作:
- 登录到Wexflow
- 选择 记录 选项卡
- 点击 新记录 按钮
- 填写有关记录的信息(仅名称)
- 如有必要,将文件添加到记录中(您可以将文件拖放到记录的框中,或直接单击上载按钮)
- 点击 保存
单击 保存后,将创建该记录,然后将该记录用于批准流程的批准流程中。
序列化批准流程
要创建序列批准流程:
- 登录到Wexflow
- 选择 设计器 选项卡
- 单击 新建工作流程 按钮
- 填写工作流的名称和启动类型(仅名称和启动类型是必需的)
- 将工作流程类型设置为 批准 (工作流程将显示在 批准 标签中)
- 将ApproveRecord任务拖放到图视图中
- 通过在工作流设计器中单击任务来填充ApproveRecord任务的设置
- 最后,按Ctrl + S保存您的序列批准流程
此序列化批准流程在分配给Wexflow中用户的记录上启动批准过程。您可以在序列化批准流程中添加其他特定任务,例如用于处理记录的最新文件版本,用于数字签名,用于发送电子邮件等。只需在设计器中拖放所需的任务即可。您还可以在记录上设置事件。支持以下事件:
- onApproved:记录被批准后执行一组任务
- onRejected:记录被拒绝后执行一组任务
- onDueDateReached:到达记录的到期日期后,执行一组任务
- onReminderDateReached:到达记录的提醒日期后,执行一组任务
- onDeleted:删除记录后执行一组任务
- onStopped:停止批准工作流程后执行一组任务
要简单地设置事件,请在事件字段中以逗号分隔(例如:2,3)设置任务ID。
要启动您的序列批准流程:
- 选择 批准 标签
- 选择您的流程,然后单击 开始
要批准串行工作流程,请选择批准作业,然后单击 批准。
要拒绝串行工作流程,请选择批准作业,然后单击 拒绝。
要停止串行工作流程,请选择批准作业,然后点击 停止。
一旦开始批准工作流,分配给记录的用户就会在Wexflow中通过电子邮件收到通知。
分配给记录的用户可以将通知标记为已读或未读或删除它们。
如果到达记录的提醒日期,则会通知分配给该记录的用户和管理员。
如果到达记录的截止日期,则会通知分配给该记录的用户和管理员。
批准流程获得批准后,分配给记录的用户会在Wexflow中通过电子邮件收到通知。
如果批准流程被拒绝,则分配给记录的用户会在Wexflow中通过电子邮件收到通知。
如果经理停止了批准流程,则分配给该记录的用户会在Wexflow中通过电子邮件收到通知。
如果记录被管理员修改或删除,则分配给该记录的用户会在Wexflow中通过电子邮件收到通知。
以下是批准流程的简要概述:
- 创建记录(管理员可以删除记录。分配给记录的用户可以通过上传新文件版本和添加注释来修改记录,但是他不能删除自己尚未创建的记录。分配给记录的用户只能删除他创造了的记录。)。
- 创建一个工作流,将记录和分配给该记录的用户(Wexflow中的超级管理员或管理员用户)作为输入。
- 当经理(Wexflow中的Super-Admin用户)启动批准工作流时,会向分配给该记录的用户发送一条通知,告知他已被分配处理该记录。
- 一旦分配给记录的用户修改了记录(例如,通过上载记录的新文件版本),就会向管理员发送通知,告知他必须检查该记录。
- 经理检查记录后,便可以添加评论,如果可以,则将新通知发送给分配给该记录的用户。
- 如果管理员删除记录,则会通知分配给该记录的用户。
- 如果到达记录的提醒日期,则会通知分配给该记录的用户和管理员。
- 如果到达记录的截止日期,则会通知分配给该记录的用户和管理员。
- 如果经理批准了该记录,则会向分配给该记录的用户发送一条通知,告知该记录已被批准。
- 如果管理员拒绝该记录,则会向分配给该记录的用户发送一条通知,告知该记录已被拒绝。
- 经理可以停止批准。
非管理员用户也可以创建记录和批准流程,但他无法访问他未创建的记录和他未创建的批准流程。他只能编辑自己创建或分配给他的记录。他无法删除自己未创建的记录,但可以删除自己创建的记录。如果非管理员用户修改了分配给他的记录,则记录的管理员会收到通知和电子邮件。如果管理员修改了分配给用户的记录,则分配给该记录的用户会收到通知和电子邮件。
平行审批流程
在并行批准流程中,需要多个人来批准项目,例如文件、发票、采购订单、休假申请、时间表等。每个人的批准独立于所有其他批准者。
通过创建审批工作流和并行启动审批流程,可以在Wexflow中创建并行审批流程。
一旦并行启动多个审批工作流,分配给该记录的销售团队和人事团队将在Wexflow中通过电子邮件收到通知,以便处理该记录。如果记录被修改,则管理员将在Wexflow中收到通知,并通过电子邮件通知该记录已被修改,以便他可以检查和批准或拒绝该记录。例如,如果管理员通过在记录上添加新注释来修改记录,则分配给该记录的用户将在Wexflow中收到通知,并通过电子邮件告知该记录已由管理员修改。如果经理批准、拒绝或停止批准工作流程,则分配给该记录的用户将在Wexflow和电子邮件中得到通知。如果经理在批准流程中删除了记录,通过将ApproveRecord 任务的事件设置为onApproved,onRejected,onDeleted,onDueDateReached,onReminderDateReached和onStopped,还可以在记录的最新文件版本上运行其他任务 。如果记录中没有诸如休假请求之类的文件,则还可以通过设置ApproveRecord任务的事件(例如加载和发送电子邮件或数字签名或在Microsoft Tasks中创建任务)来启动其他任务。
以下是并行批准流程示例:
在此示例中,两个批准流程在同一记录上并行启动。一旦经理批准了第一个流程,销售团队将在Wexflow中通过电子邮件获得通知。一旦经理批准了第二个流程,人力资源团队就会在Wexflow和电子邮件中收到通知。
所有人都必须批准
这种批准工作流要求每个人(所有分配的批准人)都同意例如批准休假请求,但是任何批准人都可以拒绝整个请求。
在需要人员经理和经理的经理都同意休假请求才能被批准的组织中,这种批准工作流非常有用。但是,任何一个经理都可以在没有其他人输入的情况下拒绝该请求。
要在Wexflow中启动这种类型的工作流程,只需在同一记录上创建多个批准工作流程,然后启动批准流程。一旦所有批准者批准该记录,该记录将被标记为已批准,并且批准者列表将在记录的框中列出,如下所示:
如果批准者拒绝该记录,则整个请求都将被拒绝,并且该记录不会标记为已批准。分配给记录的用户将收到有关拒绝记录的通知,并且可以在记录的信息框中显示拒绝记录的批准人。
一旦所有批准者批准了记录,所有批准者将收到有关记录批准的通知。
记录热文件夹
Wexflow中有一个热文件夹,用于从文件导入记录。
可以通过recordsHotFolder 设置从./Wexflow/Wexflow.xml设置文件配置热文件夹的文件夹路径。
可以启用或禁用此热文件夹。默认情况下,它是启用的。要禁用它,只需在appsettings.json配置文件中将EnableRecordsHotFolder设置设置为 false。
自动导入流程
可以为记录设置自动导入流程,并自动启动批准流程。为此,您必须设置一个工作流程来监视某个热文件夹中的文件,并且一旦文件到达该文件夹,就会创建记录,并创建批准流程并自动启动。
对于这种类型的工作流程,您有一个名为Workflow_Approval_Import的示例工作流程:
此工作流程监视热文件夹./WexflowTesting/RecordsHotFolder,一旦文件到达该文件夹,它将创建相应的记录并将文件移至记录的存储库。最后,批准流程将自动创建并启动。这些批准工作流将记录分配给Wexflow中的用户,并在相应记录上启动批准流。
启用电子邮件通知
可以在Wexflow中启用或禁用与批准流程相关的电子邮件通知。默认情况下,与批准工作流程相关的电子邮件通知是禁用的。要启用它们,只需将设置EnableEmailNotifications到 真正 的appsettings.json。如果启用了电子邮件通知,则还必须 在同一配置设置文件中设置Smtp.*设置。
电子签名
可以在Wexflow的批准流程中启用数字签名(例如DocuSign)。目前,还没有内置的任务,但是用户可以通过创建新的自定义任务轻松地创建自己的数字签名任务。
Microsoft任务
也可以将批准流程与Microsoft Tasks同步。目前,还没有内置的任务,但是用户可以通过创建新的自定义任务轻松地创建自己的同步任务。
如何建立顺序流
顺序流一个接一个地执行一组任务或活动。每个任务都执行其任务,然后下一个任务执行其任务,直到达到最后一个任务。
要创建顺序流:
- 登录到Wexflow
- 选择 设计器 选项卡
- 单击 新建工作流程 按钮
- 填写工作流的名称和启动类型(仅名称和启动类型是必需的)
- 将所需任务从左侧面板拖放到图表视图中
- 通过从图视图中单击任务来填充每个任务的设置
- 最后,按Ctrl + S保存顺序流
开始您的顺序流程:
- 选择 管理器 选项卡
- 选择您的流程,然后单击 开始
以下是示例顺序流程:
这个简单的流程从加载CSV文件开始,然后将CSV文件转换为XML文件,最后将生成的XML文件移动到专用文件夹。
通过单击设计器选项卡中的“浏览”按钮,选择一个顺序流,然后双击该流以在设计器中将其打开,可以看到其他顺序流。
您可以通过单击设计器选项卡上的“图形”视图来查看顺序流的执行图。
您还可以通过单击设计器选项卡上的JSON或XML视图来查看或编辑顺序流的JSON或XML定义。
如何建立流程图流程
流程图流程是在其执行图中至少包含一个If,一个While或一个Switch 流程图节点的流程。
要创建流程图流:
- 登录到Wexflow
- 选择 设计器 选项卡
- 单击 新建工作流程 按钮
- 填写工作流的名称和启动类型(仅名称和启动类型是必需的)
- 将所需任务从左侧面板拖放到图表视图中
- 通过从图视图中单击任务来填充每个任务的设置
- 切换到JSON或XML视图,并创建exection图形工作流的
- 您可以通过从设计器选项卡中打开工作流程Workflow_ExecutionGraph来查看执行图的示例
- 执行图必须至少包含If、While或Switch 流程图节点
- 最后,按Ctrl + S保存您的流程图流
开始您的流程图流程:
- 选择 管理器 选项卡
- 选择您的流程,然后单击 开始
以下是示例流程图流:
这个简单的流程图流程从重新分配当天开始,如果是星期一,则执行任务1;如果是星期三,则执行任务2;最后几天,它将执行任务3。
如何建立和部署自定义活动
自定义活动或任务是工作流引擎中必不可少的,并允许系统和应用程序进行交互。
例如,要创建自定义任务MyTask,您将需要执行以下操作:
- 在Visual Studio中创建一个针对.NET Core 3.1的.NET Core库项目,并将其命名为Wexflow.Tasks.MyTask。
- 通过nuget软件包管理器安装Wexflow nuget软件包:
PM> Install-Package Wexflow
3. 创建一个公共类MyTask,该类实现抽象类Wexflow.Core.Task。
Wexflow.Tasks.MyTask代码应如下所示:
using System.Xml.Linq;
using Wexflow.Core;
namespace Wexflow.Tasks.MyTask
{
public class MyTask : Task
{
public MyTask(XElement xe, Workflow wf) : base(xe, wf)
{
//
// Task logic goes here
//
return new TaskStatus(Status.Success);
}
}
}
每个任务完成工作后都会返回TaskStatus对象。TaskStatus由以下元素组成:
public Status Status { get; set; }
public bool Condition { get; set; }
public string SwitchValue { get; set; }
状态可以是以下之一:
public enum Status
{
Success,
Warning,
Error
}
例如,如果任务对文件集合执行操作,并且如果该操作对所有文件都成功,则其状态应为成功。否则,如果此操作对某些文件成功而对其他文件失败,则其状态应为“警告”。否则,如果此操作对所有文件均失败,则其状态应为错误。
Condition属性是为流程图任务设计的。除了任务的状态外,流程图任务在执行其任务后还返回true或false。
对于顺序任务,必须始终将Condition属性设置为false。
SwitchValue设计为供Switch流程图任务使用。如果在SwitchValue属性中设置一个值,并在Switch流程图节点中使用此任务,则将执行与该值对应的大小写。否则,如果设置了默认情况,它将被执行。
您可以使用适合您需要的TaskStatus构造函数。
要检索设置,可以使用以下方法:
string settingValue = this.GetSetting("settingName");
string settingValue = this.GetSetting("settingName", "defaultValue");
string[] settingValues = this.GetSettings("settingName");
要通过selectFiles设置选项选择由工作流的运行实例加载的文件,您可以执行以下操作:
FileInf[] files = this.SelectFiles();
要通过selectEntities设置选项选择由工作流的运行实例加载的实体,可以执行以下操作:
Entity[] entities = this.SelectEntities();
例如,当使用处理数据库或Web服务中的对象的自定义任务时,Entity类可能非常有用。
要在任务中加载文件,可以执行以下操作:
this.Files.Add(new FileInf(path, this.Id));
要在任务中加载实体,可以按以下步骤进行:
this.Entities.Add(myEntity);
最后,如果您完成了对自定义任务的编码,请编译类库项目,然后将程序集Wexflow.Tasks.MyTask.dll复制到./Wexflow/Tasks中。
然后,您的自定义任务就可以使用了。
就是这样。这就是开始编写自己的自定义任务所需的所有知识。
设计器
要使您的自定义任务MyTask出现在设计器选项卡中,只需打开文件./Wexflow/TasksNames.json并在其中添加“MyTask”,如下所示:
[
...
{ "Name": "MyTask", "Description": "MyTask description."}
]
您还必须通过打开文件./Wexflow/TasksSettings.json并添加自定义设置来添加设置,如下所示:
{
...
"MyTask": [{"Name": "settingName", "Required": true, "Type": "string", "List": [], "DefaultValue": ""}]
}
设置类型可以是整数、字符串、布尔值、列表、密码、用户或记录。如果不需要设置,则必须指定默认值。如果设置类型为列表,则必须在“列表”属性中指定列表项(例如:[“ ftp”,“ ftps”])。
就是这样。MyTask将显示在设计器中,并且在选择时也会显示其设置。
测试中
要测试自定义任务,请从设计器创建一个新的工作流程,将您的自定义任务拖放到图表视图中,单击您的自定义任务,编辑自定义任务的设置,最后按Ctrl + S保存您的工作流程。然后,工作流将出现在“管理器”选项卡的工作流列表中。然后可以从那里启动它。
记录中
可以从Task类中使用以下方法进行记录:
public void Info(string msg);
public void InfoFormat(string msg, params object[] args);
public void Debug(string msg);
public void DebugFormat(string msg, params object[] args);
public void Error(string msg);
public void ErrorFormat(string msg, params object[] args);
public void Error(string msg, Exception e);
public void ErrorFormat(string msg, Exception e, params object[] args);
档案中
可以通过调用方法Add或AddRange将文件加载到任务中:
this.Files.Add(myFile);
this.Files.AddRange(myFiles);
然后,可以在其他任务中通过任务ID选择加载的文件,如下所示:
<Setting name="selectFiles" value="$taskId" />
要通过selectFiles设置选项选择由工作流的运行实例加载的文件,您可以执行以下操作:
FileInf[] files = this.SelectFiles();
通过selectFiles和selectEntities设置在任务之间转移状态。
这可以通过以下方式进行:
- 工作流中的任务完成其工作并生成文件,并将其存储在集合中。
- 之后,另一个任务(必须在同一工作流程中)可以使用selectFiles设置引用这些文件,并指定生成所需文件的任务的ID。然后,它可以使用这些文件来完成自己的工作。
更加直观(来自示例):
<Workflow xmlns="urn:wexflow-schema" id="$int" name="$string" description="$string">
<Settings>
<Setting name="launchType" value="startup|trigger|periodic|cron" />
<Setting name="period" value="dd.hh:mm:ss" />
<Setting name="cronExpression" value="$string" />
<Setting name="enabled" value="true|false" />
<Setting name="approval" value="true|false" />
<Setting name="enableParallelJobs" value="true|false" />
</Settings>
<LocalVariables>
<Variable name="$string" value="$string" />
<Variable name="$string" value="$string" />
<!-- You can add as many variables as you want. -->
</LocalVariables>
<Tasks>
<Task id="$int" name="$string" description="$string" enabled="true|false">
<Setting name="$string" value="$string" />
<Setting name="$string" value="$string" />
<!-- You can add as many settings as you want. -->
</Task>
<Task id="$int" name="$string" description="$string" enabled="true|false">
<Setting name="$string" value="$string" />
<Setting name="$string" value="$string" />
</Task>
<!-- You can add as many tasks as you want. -->
</Tasks>
<!-- This section is optional and described in the samples section. -->
<ExecutionGraph />
</Workflow>
实体
实体是一个抽象类,具有任务的ID作为属性:
namespace Wexflow.Core
{
/// <summary>
/// Entity.
/// </summary>
public abstract class Entity
{
/// <summary>
/// Task Id.
/// </summary>
public int TaskId { get; set; }
}
}
实体类被设计为由其他类继承,例如从数据库或Web服务或API检索的对象。然后,可以通过调用方法Add或AddRange将这些对象加载到任务中:
this.Entities.Add(myEntity);
this.Entities.AddRange(myEntities);
然后,可以通过其他任务的任务ID在其他任务中选择加载的实体,如下所示:
<Setting name="selectEntities" value="$taskId" />
实体旨在用于自定义任务。
要通过selectEntities设置选项选择由工作流的运行实例加载的实体,可以执行以下操作:
Entity[] entities = this.SelectEntities();
例如,当使用处理数据库或Web服务中的对象的自定义任务时,Entity类可能非常有用。
共享内存
任务之间包含一个共享内存。
要将对象添加到共享内存,只需执行以下操作:
this.SharedMemory.Add("myKey", myObject);
要从共享内存中检索对象,只需执行以下操作:
var myObject = this.SharedMemory["myKey"];
要从共享内存中删除对象,只需执行以下操作:
this.SharedMemory.Remove("myKey");
源代码
Wexflow的源代码在GitHub上。
Wexflow的源代码包含三个主要组件:
- Wexflow服务器
- Wexflow数据库
- Wexflow API
这三个主要组件是使用.NET Core和C#构建的。
源代码还包含三个主要的Wexflow客户端:
- 后端是使用JavaScript构建的Web应用程序
- 一个Android应用
- 一个iOS应用
源代码还包含Docker配置文件。
如何调试Wexflow
要调试Wexflow,请执行以下操作:
1、将源代码克隆到您的计算机:
git clone https://github.com/aelassas/Wexflow.git
2、复制文件夹“Wexflow-netcore”和“WexflowTesting”到C:\中。您可以从此处下载它们 。
3、通过以下命令还原nuget软件包:
nuget restore Wexflow.sln
4、在Visual Studio中打开Wexflow.sln。
5、导航到src/netcore/Wexflow.Server解决方案文件夹。
6、确保将Wexflow.Server设置为启动项目。
7、调试项目Wexflow.Server以在调试模式下启动Wexflow Server。
8、导航到src /后端解决方案文件夹。
9、调试项目Wexflow.Backend以在调试模式下启动后端。
参考:https://www.codeproject.com/Articles/5268848/Wexflow-How-To-Build-Automation-In-The-Cloud