一、为什么需要自定义扩展

1、第三方类库已满足大部分需求,剩下的根据具体业务需求抽象成公共功能进行扩展

2、第三方呈现的web页面与原类库耦合度较高,希望在原页面上扩展而不影响原来的功能

3、在完全不修改第三方类库及web页面的情况下,加入自己的代码

4、未来可以同步更新第三方类库

二、主要实现思路

1、类库通过继承的方式扩展

2、asp.net页面通过增加一个分部类来调用扩展后的类库

三、具体集成ccflow操作步骤

1、解决方案引入ccflow核心三大类库,确保三大类库的与解决方案不在同一个目录,由ccflow维护更新

2、新建自己业务的扩展类库,扩展类库命名空间必须以BP开头,与ccflow类库命名规则保持一致,否则无法反射完成初始化

3、在扩展类库中新建一个BP.Def.FlowExt类,以继承BP.WF.Template.FlowExt类为例,关键是重写子类的EnMap属性

 using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using BP.En;
using BP.Web;
using BP.Sys; namespace BP.Def
{ public class FlowExtAttr : BP.WF.Template.FlowAttr
{
/// <summary>
/// 自定义业务编号
/// </summary>
public const string DefNoFormat = "DefNoFormat";
/// <summary>
/// 自定义业务名称
/// </summary>
public const string DefNameFormat = "DefNameFormat";
/// <summary>
/// 删除流程时是否同时删除自定义
/// </summary>
public static string IsDeleteDef = "IsDeleteDef";
} public class FlowExt : BP.WF.Template.FlowExt
{
public FlowExt()
{ } public FlowExt(string _No)
{
this.No = _No;
this.Retrieve();
} /// <summary>
/// 重写基类方法
/// </summary>
public override Map EnMap
{
get
{
//web界面中的Tab展示控制
EnCfg en = new EnCfg(this.ToString());
if (en.GroupTitle.Contains(FlowExtAttr.DefNoFormat) == false)
{
en.SetValByKey(EnCfgAttr.GroupTitle, en.GroupTitle + "@" + FlowExtAttr.DefNoFormat + "=自定义扩展");
en.Save();
} //首次构造返回基类
if (this._enMap == null)
{
this._enMap = base.EnMap;
return this._enMap;
} //基类构造完成后,后续使用子类
int index = this._enMap.Attrs.GetIndexByKey(FlowExtAttr.DefNoFormat); //新增加的配置
if (this._enMap != null && this.Row.Count > && string.IsNullOrEmpty(this.No) == false && index < )
{
this._enMap.AddTBString(FlowExtAttr.DefNoFormat, "", "自定义业务编号", true, false, , , , true);
this._enMap.AddTBString(FlowExtAttr.DefNameFormat, "", "自定义业务名称", true, false, , , , true);
this._enMap.AddBoolean(FlowExtAttr.IsDeleteDef, false, "删除流程时是否同时删除自定义", true, true, true);
} return this._enMap;
}
} /// <summary>
/// 自定义业务编号
/// </summary>
public string DefNoFormat
{
get
{
return this.GetValStrByKey(FlowExtAttr.DefNoFormat);
}
set
{
this.SetValByKey(FlowExtAttr.DefNoFormat, value);
}
} /// <summary>
///自定义业务名称
/// </summary>
public string DefNameFormat
{
get
{
return this.GetValStrByKey(FlowExtAttr.DefNameFormat);
}
set
{
this.SetValByKey(FlowExtAttr.DefNameFormat, value);
}
} /// <summary>
/// 删除流程时是否同时删除自定义
/// </summary>
public bool IsDeleteDef
{
get
{
return this.GetValBooleanByKey(FlowExtAttr.IsDeleteDef);
}
}
} public class FlowExts : BP.WF.Template.FlowExts
{
public FlowExts()
{
} public override Entity GetNewEntity
{
get { return new FlowExt(); }
}
}
}

4、在解决方案新建一个web项目,完全拷贝ccflow下的WF、DataUser目录到web项目里,最终整个结构如下

5、为后台页面增加一个分部类,在分部类里修改asp.net页面入口,转向访问自定义的BP.Def类库

6、最终效果达到在完全不修改ccflow的前后台源码下实现自定义功能的扩展

.net工作流引擎ccflow集成并增加自定义功能的更多相关文章

  1. .net开源工作流引擎ccflow表单数据返回值Pop分组模式和表格模式对比

    Pop分组模式和表格模式对比 关键词: 驰骋工作流引擎  表单引擎  ccflow   .net开源工作流  jflow Java工作流引擎 驰骋工作流程快速开发平台 工作流程管理系统 工作流引擎 a ...

  2. .net开源工作流引擎ccflow

    关于济南驰骋信息技术有限公司的.net开源工作流引擎 驰骋工作流引擎,工作流程管理系统:简称ccflow,驰骋一体化解决方案简称ccport. ccflow是济南驰骋信息技术有限公司向社会提供的一款1 ...

  3. .net工作流引擎ccflow开发平台属性功能的隐藏显示介绍

    关键字: 工作流程管理系统 工作流引擎 asp.net工作流引擎 java工作流引擎. 表单引擎 工作流功能说明  工作流设计 工作流快速开发平台   业务流程管理   bpm工作流系统  java工 ...

  4. .net开源工作流引擎ccflow Pop返回值设置

    关键词: 点击字段弹出返回值填充文本框或其他字段     表单自动填充   .net开源工作流  jflow工作流   ccflow   工作流引擎 应用场景 当我们的查询信息比较多我们希望有一个比较 ...

  5. .net工作流引擎ccflow新增支持PostgreSQL数据库的功能的发布说明

    关键字: 驰骋工作流程快速开发平台 工作流程管理系统 工作流引擎 asp.net工作流引擎  java工作流引擎. 各位驰骋工作流引擎爱好着,经过驰骋公司与正元公司的共同努力,ccflow支持Post ...

  6. 驰骋工作流引擎-ccflow单据模式介绍与使用

    Ccflow单据模式 关键字: 驰骋工作流程快速开发平台 工作流程管理系统 工作流引擎 asp.net工作流引擎 java工作流引擎.  表单引擎  表单单据模式增删改查   应用场景: 一些客户在使 ...

  7. 关于工作流引擎ccflow待办分类 研究与技术实现

    关于工作流引擎待办分类 研究与技术实现 关键字:工作流引擎 BPM系统 待办类型 名词:待办 概要介绍:待办就是当前的登录人员要处理的工作,在工作流程里面的节点类型不同,业务场景不同,我们把待办分为如 ...

  8. 开源工作流引擎CCFlow 学习专区

    http://bbs.ccflow.org/index.aspx 官网:http://www.ccflow.org/

  9. 开源的.Net 工作流引擎Elsa初试——创建工作流服务器和图形化工作流配置管理应用

    微软的Workflow Foundation基于.Net Framework,并且没有向.Net Core迁移的计划.我们的很多项目使用了工作流引擎,这些项目向.Net Core以及更高版本迁移时遇到 ...

随机推荐

  1. 怎么通过原生JS改变元素的class属性

    解决方法:document.getElementById('test').className = 'emphasis' Eg: <!doctype html> <html lang= ...

  2. CSS3常用属性及效果汇总

    本文转载于<https://blog.csdn.net/lyznice/article/details/54575905> 一.2D效果属性 要使用这些属性,我们需要通过 transfor ...

  3. Tomcat下配置javaWeb访问路径-Linux

    首先找到你的Tomcat的server.xml文件 笔者直接编辑 sudo vi /app/prod/conf/server.xml 访问只需要您的IP地址就可以访问项目了 第二个配置则是访问 ip+ ...

  4. 【ML】seq2seq原理

    最近要做分享,重温seq2seq原理,这篇文章讲的挺清楚: https://zhuanlan.zhihu.com/p/40920384 https://www.jianshu.com/p/b2b95f ...

  5. process.env.NODE_ENV

    Node 随记 if (process.env.NODE_ENV === 'production') { module.exports = require('./prod.js') } else { ...

  6. jeesite框架前端 tabPage页签刷新功能。

    js主动刷新当前页签的js代码 原本想找一下jeesite有没有主动刷新当前页面的内置方法. 官方文档找了一大堆,找都找不到,也可能我这个需求比较少人需要. tab标签页有一个右键刷新页签功能 查看编 ...

  7. HANA数据自助查询

    SAP HANA的客户端是C/S模式的,远程使用不太方便,目前有一款TreeSoft数据库管理系统,可以实现通过web方式,访问自助查询HANA数据.大大提高工作效率.还支持MySQL,Oracle, ...

  8. EMC DS300B光纤交换机扩展光口license

    一.通过EMC指定的网站激活license 激活license,生成激活码需要三个信息: 1.交换机WWN号:可在交换机铭牌上查看:(16位) 2.SN号码:AQA00***9*6(11位) 3.ke ...

  9. 源码搭建zabbix服务

    1) 部署LNMP 1.1) cd /root tar -xf lnmp_soft.tar.gz cd lnmp_soft/ tar -xf nginx-1.10.3.tar.gz cd nginx- ...

  10. 如何运行spring boot 工程

    1.右键工程,Run As, Maven install, 2.右键工程,Run As,Spring Boot App 3.在地址栏输入127.0.0.1:8080 动图示例