演示环境为dev分支打包
http://39.101.74.14:8085/index.html (新版)
http://39.101.74.14:8083/index.html (旧版-不再更新)
新版前端仓库( https://gitee.com/mengtree/workflow-engine-web2 ) ---> 已并到主项目: web_next
演示对接业务系统demo地址(过时)
http://39.101.74.14:8183/index.html
账号 admin 密码 123qwe
对接演示 git: https://gitee.com/mengtree/workflow-engine-docking
演示对接业务系统demo地址(新版)
账号 admin001 密码 password
本地运行 WorkFlowCore.BusinessDemo.Web (默认采用sqlite 可以之际直接跑起来)
该流程引擎完全开源免费,致力于打造与平台组织架构无关、高扩展的工作流引擎。 通过自定义用户选择器和条件处理器实现既有业务的组织架构关联和审批过程处理。
工作流项目有很多,各有特点,而本项目的特点就是解耦。将审批过程中的条件选择与人员派发抽象出来,用户可以根据自身的组织架构特点进行自定义人员与条件的配置,而无需更改逻辑代码。只需要简单的实现条件和人员选择自定义接口即可。
传统方式,流程审批跟业务系统耦合在一起,特别是审批过程的表单数据判定以及人员(组织)的选择。
本项目的思想就是将审批过程从业务系统分离。基本思路为:不管是耦合在业务系统的审批还是分离的审批,最终都是更新表单的状态。
在下载完源码之后,通过几个简单的操作即可运行起项目:
在 WorkFlowCoreFrameworkModule 的 PreConfigureServices 方法配置指定启动需要的数据库类型。默认可选 LocalMemory 和 Mysql、Sqlite、Sqlserver, LocalMemory 是内存sqlite,无需建库,直接运行体验。
public override void PreConfigureServices(ServiceConfigurationContext context)
{
WorkFlowCoreFrameworkOptions.DbType = FrameworkConfigDbType.MySql;
}
//数据库类型可选:
internal enum FrameworkConfigDbType
{
LocalMemory,
MySql,
Sqlite,
SqlServer
}
如果选择的是 MySql :
配置数据库字符串链接(默认启用加密)。如果是Mysql,还需要配置上 版本。建议 8.0 以上。 在
"ConnectionStrings": {
"Default": "${ConnectionStrings_Default}|HLPexHv+EZ1OHtlrnL2oQLRNTMuY5C1pXgEKuqBqgjaQVWczq9OMn5PErX0cHGUKz7ABrPJZHhI2l4OsnpG7pBt3LAkCvWYfEku7MyTgWjwqVgXq7T6KIMzEdFugrolAFVLC8AChraWFael7QKbJaWUlHEo8mSu1i5wcl+iiFenu8mVYGiIm7+0B0VIhtKbEsBcvvbXhBhrqUsuKXmg9iQ==",
"DefaultVersion": "8.0.26",
"SecretPath": "C:\\workflowcore\\secret.config",
"IsEncrypt": "true",
"Secret": "${ConnectionStrings_Secret}|"
}
通过 ${变量名称}|默认值 的格式配置参数,可以通过配置环境变量,控制台变量启动时指定配置,不指定时,取默认值。这里的连接字符串默认进行了加密处理。*** Mode:CBC ,Padding:PKCS7 ***
IsEncrypt 是否启用加密连接串,为 true 时启用。 设为空值或为 false 时,可配置明文连接字符串
SecretPath 只是用于本地密钥地址,IsEncrypt 为 true 时才有效。保存解密密钥便,于本地解密。实际运行时可以通过 指定 ConnectionStrings_Secret 环境变量指定解密密钥。
Secret 密钥,IsEncrypt 为 true 时才有效。
注1:SecretPath、Secret 为密钥配置的两种配置方式,SecretPath 指向保存密钥的文件,Secret 直接配置密钥内容。都是在 IsEncrypt 为 true 时才用到
注2:如果希望使用平时(明文)字符串连接,只需要将 IsEncrypt 值置空或者设为 false
明文链接字符串配置参考
"ConnectionStrings": {
"Default": "${ConnectionStrings_Default}|Database=WorkflowCore;Data Source=;Port=3308;UserId=;Password=;Charset=utf8;TreatTinyAsBoolean=false;Allow User Variables=True",
"DefaultVersion": "8.0.26",
"IsEncrypt": "", //或者"IsEncrypt": "false",
}
设置 Host 为启动项。
初始化迁移脚本:生成数据库初始化脚本执行
迁移 musql 数据库:script-migration
迁移 sqlserver 数据库:script-migration -context SqlServerWorkflowDbContext
迁移 sqlite 数据库:script-migration -context SqliteWorkflowDbContext
注:也可直接使用 update-database 指令,只需要将 script-migration 改为 update-database 即可
***注:当前系统使用的 orm 为 ef,如需要自定义实现,则重写 repository ***
在介绍使用之前,简单介绍下代码结构。 整个项目包含四个部分:
条件处理器
用户选择器
业务平台自动登录流程引擎平台
业务平台调用流程平台接口发起审批
流程审批状态同步示意图
流程引擎单独运行没有什么意义,一般需要结合具体的组织架构和业务进行应用。所以需要根据场景与组织系统进行对接。本系统设计初衷就是为了将引擎核心与业务分离,只需要简单的接口实现既可以跟既有组织架构关联。
实现自定义仓储。如果需要使用其它的orm,则需要实现自己的数据库仓储。在实现数据库仓储时,应相应的实现该仓储的工作单元。总之参考默认实现,实现一套自己的仓储。
自定义用户选择器。通过实现 IUserSelector 接口实现自己的用户选择器。
[UserSelector("按用户选择","从所有用户选择")]
public class UserSelectorB : IUserSelector
{
public List<Selection> GetSelections()
{
return UserList.Users.Select(u => new Selection { Id = u.Id, Name = u.Name }).ToList();
}
public List<User> GetUsers(SelectorInput input)
{
var result = new List<User>();
switch (input.SelectionId)
{
default:
result.Add(new User { Id = input.SelectionId, Name = UserList.GetUserById(input.SelectionId).Name });
break;
}
return result;
}
}
用户选择器说明:
用户选择器还可以实现 IDefaultUserSelector 以实现”默认选择器“
namespace WorkFlowCore.UserSelectors
{
public interface IDefaultUserSelector: IUserSelector
{
List<string> GetDefaultSelectionIds();
}
}
自定义条件处理器。通过实现 ICondition 接口,可自定义条件处理器。条件处理时,将通过工作流表单信息、当前审批人信息、以及条件参数等信息进行判断是否满足某当前处理器所指定的条件。只需要返回是否满足。
[Condition("条件处理器A")]
public class ConditionA : ICondition
{
public bool CanAccept(ConditionInput input)
{
try
{
//简单的表达式解析
var keyvalue = input.Expression.Split('=');
JObject jObject = JObject.Parse(input.WorkTask.FormData);
var token = jObject.SelectToken(keyvalue[0]);
var value = token.Value<string>();
return value.Equals(keyvalue[1]);
}
catch (Exception)
{
return false;
}
}
}
条件处理器说:
创建流程设计。新建一个工作流设计,该流程设计包括各个节点、人员、条件 等的配置信息,主要为一下结构:
创建工作流实例。设计好流程步骤后。就可以创建相应的审批实例,接着进行审批各项操作。
当前流程引擎有自己完整的一套工作方式,并不适合进行拆解源码融合到其它系统,最适合的方式就是以分布式的方式进行部署。通过分布式部署的情况下,与业务系统的对接则通过接口进行。
管理后台快速上手参考
常用开放接口基本说明
系统实现了一套插件管理逻辑,目的是为了某些插件(扩展点)可以配置和复用。 管理员登录可以对插件进行管理和配置
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。
1. 开源生态
2. 协作、人、软件
3. 评估模型