Foxbpm任务命令扩展介绍
Foxbpm对中国式流程(如:退回、转发、跳转等)封装成了各种任务命令按钮,这种方式得到了用户的一致认可,foxbpm的最新版本也对这一功能做了更好的封装和完善,使用户能更好的使用和扩展任务命令,这篇文章主要介绍foxbpm的任务命令体系,以及如何扩展属于自己的任务命令。
任务命令介绍
从foxbpm.cfg.xml或5.2版本的fixflowconfig.xml文件可以看出,每一个任务命令都有3个类组成,分别为**Command、**Cmd、**Filter,其中:
- **Command定义了命令有哪些特殊参数,如“退回节点”命令中的rollbackNodeId等等
- **Cmd:命令的真正处理类,execute方法中对taskEntity,processInstanceEntity,tokenEntity等实体操作,最终完成命令的执行逻辑。
- **Filter:命令过滤器,api中获取任务命令是通过taskService.getTaskCommandByTaskId(taskId),其中会通过taskId获取当前taskEntity,根据taskEntity的状态来确定当前按钮是否应该显示。如:对于“还回”按钮,只有当taskEntity为转办状态时,该access(taskEntity)方法才会返回True,才会显示该按钮。
任务命令扩展
综上,如果想要扩展一个自己的任务命令,只需要实现上述三个类,然后在对应的配置文件中注册即可。
当然,上面的做法是兼容fixflow5.2版本和最新的foxbpm版本的,既然说了foxbpm对于扩展有了优化,那就肯定要有些新的提升。
对于foxbpm的最新6.0版本,是不推荐随意修改foxbpm.cfg.xml文件,也不建议随意修改engine的jar包,因为这样才能平缓升级内核的版本。为了保证升级方便和灵活扩展,6.0版本在多个功能点上使用了开源框架经常使用的技术,java spi,该机制可以让用户在不修改Engine代码和foxbpm.cfg.xml文件的基础上,注册自己的任务命令,下面总结下新版本任务命令扩展步骤:
- 新建上面的**Command,**Cmd,**Filter类,并实现
- 新建类如:MyTaskCommandDefintionImpl 实现TaskCommandDefintion接口
- 在项目META-INF/services文件夹下新建文件:org.foxbpm.engine.task.TaskCommandDefinition,内容是2步骤中类的全名
原理:foxbpm在引擎加载时,会通过java spi服务发现机制,注册用户自己的任务命令,这段可参考java spi机制
附:TaskCommandDefintion接口定义
package org.foxbpm.engine.task; import java.util.List; public interface TaskCommandDefinition { /** * 按钮编号,如startandsubmit * @return */ String getId(); /** * 按钮名称 * @return */ String getName(); /** * command类全名 org.foxbpm.task**** * @return */ String getCommandClass(); /** * cmd类全名 * @return */ String getCmdClass(); /** * filter类全名 * @return */ String getFilterClass(); /** * 按钮描述 * @return */ String getDescription(); /** * 按钮参数 * @return */ List<CommandParam> getCommandParam(); }
任务命令前端介绍
想扩展一个完整的任务命令,只靠后台代码往往是实现不了的,需要前端处理一下参数,如:转发按钮,需要弹出选人界面,并将transferUserId作为参数回传给引擎,这里顺便介绍前端的扩展。
6.0版本对于任务命令的前端也做了封装,集成表单时,只需要引用几个具体的js即可,关于 表单集成,这期我不多说,后面会有专门的文章来介绍表单集成部分,这里只介绍扩展任务命令时自定义参数问题,打开flowCommandHander.js,会发现这里定义了转发,退回等按钮的前端操作,如转发:
Foxbpm.commandHandler.transfer = function(){ var userId = showDialog(_bpmFilePath+"/selectUser.html"); if(userId == null || userId === undefined){ return null; } return {transferUserId:userId}; };
所以这里只需要定义自己的实现即可,举例:自己扩展命令 mytaskcommand,需要参数,orgid,则所需代码如下:
Foxbpm.commandHandler.mytaskcommand = function(){ var tmpOrgId = ""; /** * 这里自己的逻辑,弹出选部门界面,或其他逻辑处理 */ if(tmpOrgId == null || tmpOrgId === undefined){ return null; } return {orgid:tmpOrgId}; };
这样结合上面的后端Java部分扩展,就完整的实现了自己任务命令,另外,可以将这段js单独抽取出来,放到一个单独的js中,后端代码也可以单独打成jar包,如果在配合完整的文档介绍,就可以贡献给其他foxbpm的用户进行使用。而其他用户,只需要将你的jar包放到自己项目中,js引用到自己的页面上,就可以使用你的命令了,做到了对最终用户完全透明,而且最重要的一点是完全没有修改foxbpm的代码,如果引擎升级,还是可以直接覆盖原有jar包和对应的js文件。
FoxBPM目前尚未发布6.0的稳定版本,敬请期待.....
相关推荐
FoxBPM连接器详解 FoxBPM是一款开源的工作流管理系统,它为企业提供了强大的流程建模、执行和管理功能。在企业信息化建设中,流程管理扮演着至关重要的角色,而FoxBPM通过其丰富的连接器机制,能够灵活地与其他系统...
FoxBPM(6.0版本开始fixflow改名为FoxBPM)是一款开源的基于BPMN2.0标准的工作流引擎,引擎底层直接支持BPMN2.0国际标准, 吸纳了 jBPM3 、 Activiti5、BonitaBPM 等国际开源流程引擎的精髓, 同时提供了强大的中国式流程...
#分支介绍 develop 最新开发版 master 最新稳定版 release-* 发布分支为准备新的产品版本发布做支持 hotfix-* 当产品版本的重大bug需要立即解决的时候,我们从对应版本的标签创建出一个热补丁分支。 feature-* 特性...
SD卡和SDIO相关知识点
本资源为基于c#的网吧计费管理系统的完整代码,适用于【计算机专业毕设/课设】。通过该项目,您可以快速实现网吧计费管理相关功能,并且该代码已进行了充分的注释和优化,便于开发者快速理解和二次开发。 资源特色: 功能齐全: 高效实现:代码经过优化,性能稳定, 详细注释:每个模块和函数均附带详细注释,便于理解和学习。帮助您快速上手和部署。 易于扩展:代码结构清晰,方便进行二次开发和功能拓展。 适用人群: 初学者:帮助您快速了解并实现[技术/功能]。 开发者:提供高效的代码实现,助力项目开发。 学术研究:为相关领域的研究人员提供有价值的代码资源。 下载说明: 本资源为付费资源,购买后可获得完整代码 支持提供技术支持,若有问题请及时联系我们。
海洋小动物幼儿园教育教学课件模板
【活动】创作者激励数据相关材料
内容概要:本文档详细介绍了STM32系列芯片的关键组成部分及其最小系统构建要素。首先阐述了芯片内部结构,包括采用ARM Cortex-M3内核的不同型号(如103ZET6和103RCT6)的引脚配置、IO数目以及各自拥有的存储容量。接着深入探讨了芯片所配备的各种外设资源,像ADC/DAC转换模块、DMA控制器、多种类型的定时器和丰富的通信接口(如I2C、UART、SPI、SDIO、CAN和USB)。最后讲解了构成最小系统的几个重要方面,即供电方式、复位机制、时钟源选择(含高速和低速)、启动模式设定、下载方法(串行和并行)以及后备电源的设计。 适用人群:从事嵌入式硬件设计或者软件开发的技术人员,尤其是对基于STM32平台的产品开发者。 使用场景及目标:帮助工程师们更好地理解和掌握STM32芯片的功能特性,以便于进行产品选型和技术预研;同时为实际项目中的硬件电路搭建提供理论指导。 其他说明:文档还提供了详细的引脚定义资料,方便查阅具体型号的引脚分配情况。
华为2025鸿蒙生态应用开发白皮书133页
项目管理实用表格 - 软考高级-信息系统项目管理师
目标检测_基于YOLO11实现的交通信号灯规则检测算法_附项目源码+流程教程_优质项目实战
matlab
Java项目基于Springboot框架的课程设计,包含LW+ppt
内容概要:本文详细介绍了基于西门子S7-200 PLC和组态王的三泵恒压供水系统的搭建方法。首先,对硬件配置进行了详细的说明,包括IO分配、接线方式以及变频器的使用。接着,深入探讨了PLC程序的设计,特别是压力闭环控制和泵轮换逻辑的实现。最后,讲解了组态王的画面设计要点,如动态压力曲线和手自动切换界面,并分享了一些调试经验和注意事项。 适合人群:从事工业自动化领域的工程师和技术人员,尤其是对PLC编程和HMI设计有一定基础的人群。 使用场景及目标:适用于需要构建恒压供水系统的工业场合,如小区、工厂等。主要目标是确保供水系统的稳定性,提高设备使用寿命,降低维护成本。 其他说明:文中提供了丰富的实例代码和调试技巧,有助于读者更好地理解和掌握相关技术和方法。此外,还提到了一些常见的错误及其解决方案,帮助读者避免类似的问题。
1743251535075251_download.jsp
可在Wincc中使用的Dapper封装 https://blog.csdn.net/scien2011/article/details/146690897
[数据结构(C语言版)(第三版)(微课版)]配书资源
内容概要:本文详细介绍了如何利用STM32和MATLAB实现倒立摆控制系统。首先,文章讲解了硬件部分,包括STM32F4作为主控、TB6612驱动直流电机以及MPU6050进行角度采集。接着,深入探讨了PID控制算法的应用,包括位置式PID和增量式PID的选择及其具体实现方法。此外,文章强调了MATLAB Simulink仿真的重要性,展示了如何通过Simulink自动生成适用于STM32的嵌入式代码。最后,分享了一些实用的经验技巧,如角度采集的互补滤波算法、输出限幅处理、硬件设计注意事项等。 适合人群:对嵌入式系统和控制理论有一定了解的研发人员和技术爱好者。 使用场景及目标:①学习并掌握STM32与MATLAB结合进行嵌入式系统开发的方法;②理解PID控制算法的具体实现及其在实际项目中的应用;③提高硬件设计能力,确保系统的稳定性和可靠性。 其他说明:文中提供了大量实际代码片段和硬件设计建议,有助于读者更好地理解和实践。同时,附带完整的工程文件和仿真模型,方便读者下载和参考。
亲子教育“正面管教”教案课件
内容概要:本文详细介绍了如何使用MATLAB平台实现多目标粒子群算法(MOPSO),对冷热电联供系统(CCHP)进行优化调度。首先阐述了CCHP系统的组成及其优化目标,包括多能源协调运行、电能交易和多目标优化。接着深入探讨了MOPSO的具体实现步骤,包括初始化种群、适应度评估、更新全局和局部最优解、速度和位置更新等。文中提供了具体的MATLAB代码框架,展示了如何构建优化模型的目标函数和约束条件。通过仿真实验验证了该方法的有效性,结果显示系统的经济成本降低了约15%,碳排放减少了约20%。此外,还讨论了一些实用的技术细节,如适应度函数设计、约束处理、算法参数调优等。 适合人群:从事能源系统优化研究的专业人士,尤其是熟悉MATLAB编程并希望深入了解多目标粒子群算法的应用研究人员。 使用场景及目标:适用于需要对冷热电联供系统进行优化调度的研究项目或实际应用场景,旨在提高系统的经济性、环保性和可靠性。 其他说明:文中提到的方法不仅限于CCHP系统,还可以推广应用于其他类型的综合能源系统优化问题。未来的工作可以考虑引入更多可再生能源设备和技术,探索更先进的优化算法。