流程是变化的,流程引擎的代码是固定的,怎么办?

activiti5.20简单介绍(六) -- 流程引擎和流程服务 1.不使用配置文件创建    // 不使用配置文件创建 ProcessEngineConfiguration config = new StandaloneProcessEngineConfiguration(); config.setJdbcDriver("com.mysql.jdbc.Driver"); config.setJdbcUrl("jdbc:mysql:/ 阅读详情


    做工作流系统设计,我们始终会遇到这样一个问题,我们通过流程设计器画出的流程图是很灵活的,是变化多端的,是不确定的,而我们后台用于处理流程的引擎的代码却是相对固定的,不变的,静态的,那么我们怎么很好的用静态的,固定的,不变的代码来处理灵活的,变化的,不确定的流程呢?

    一部分观点认为,流程图和流程引擎之间必须通过程序员在中间编程来解决这个矛盾,这样的话,流程设计器就不是面对最终企业用户,而是面对程序员的,企业用户只是一个流程的底层用户,而不是直接参与到流程设计过程的角色,这样让企业用户很不爽啊,为什么我要应用一个流程,非得请程序员来画图并编程才能够实现呢?   在JBPM的讨论群里面,很多朋友都在咨询这个问题,因为公司的客户提出的需求是,我们要自定义流程,我们不要你们程序员来设计流程图。我们要自己画流程图。呵呵

   从国内目前的技术水平来讲,把流程设计器开放给最终用户,并且流程引擎在流程运行过程中要做到全自动控制,技术人员不干预流程的运行,并非不可能的事情,通过对流程节点的状态位的控制,一个并不是很复杂的流程图是完全可以做到自动运行的,如果在一个节点中嵌入了微型的脚本控制代码,那么一个流程在运行过程中,要做到没有人工干预的情况下自动运行,更不是一件难事。。。。

   就我们目前掌握的技术来看,要实现一个自定义的工作流系统,其核心原理大致是下面的几点

1:采用一个最简洁的流程图XML描述文件,即没有加入任何XPDL或者JPDL的定义元素,流程图XML只存储流程图的拓扑结构,和流程相关联的表单和业务数据全部通过数据库的关联表来和流程关联,流程图本身并不存储任何业务数据和业务相关的ID

2:流程图XML的拓扑结构必须转换到数据库中保存,数据库的结构是基于链表的数据结构

3:对这些保存在数据库中的流程图,定义一组大概有30个基本流程操作SQL语句,这些SQL语句的用途大致分为如下几个类型(具体的SQL语句,请参考JWFDv0.96二次开发包中的org.jwfd.workflowDesigner.UItools.Database.mysql.FlowsSqlControlModule.java  这个类文件的代码和注释)


      启动,暂停,终止,挂起一个流程的SQL操作

       public boolean start_flow(String graphid, String flow_startup_time) {}

       public boolean  end_flow(String graphid) {}

       public boolean suspend_flow(String graphid) {}

       public void restart_flow(String graphid) {}

    流程节点状态管理类SQL操作,包括修改节点状态为未处理,正在处理,已经处理等状态的操作

       public boolean set_active_step(String step_id, String graph_id) {}

       public boolean set_overactived_step(String step_id, String graph_id) {}

       public boolean set_noactived_step(String step_id, String graph_id) {}

       public boolean is_overactived_steps(String step_id, String graph_id) {}

       public boolean is_notactived_steps(String step_id, String graph_id) {}

       public boolean is_actived_steps(String step_id, String graph_id) {}

       public void set_Actioned_times(String step_id, String graph_id,int j) {}

       public void Reset_visited(String graph_id) {}

       public void set_visited_times(String step_id, String graph_id, int j) {}

       public void set_join_time(String step_id, String graph_id, int j) {}

       public int get_join_times(String step_id, String graph_id) {}

    流程节点和连接线拓扑查询SQL操作,包括查询当前节点的所有前驱节点,所有后驱节点,本流程第一个节点,最后一个节点等等这些SQL操作

      public String return_FirstStep(String graph_id) {}

      public String return_LastStep(String graph_id) {}

      public String return_nextStep(String step_id, String graph_id) {}

      public String return_preStep(String step_id, String graph_id) {}

      public java.util.ArrayList return_nextSteps(String graph_id, String step_id) {}

      public java.util.ArrayList return_preSteps(String graph_id, String step_id) {}

      public String get_stepname(String stepid, String graphid) {}

      public String get_stepid(String stepname, String graphid) {}

      public java.util.ArrayList return_edges(String step_id, String graph_id) {}

      public String return_tostep(String edge_id, String graph_id) {

   流程单步回退算法,流程嵌入脚本控制机制要使用到的SQL操作

      public boolean is_rollback_step(String step_id,String graphid){}

      public int get_actioned_times(String step_id, String graph_id) {}

      public boolean cf_step_path(String step_id,String graphid){}

      public boolean set_JAP(String step_id,String graphid,int j){}

      public int get_JAP(String step_id,String graphid){}

      public String get_condition(String step_id, String graph_id) {}

      public String get_prop(String edge_id, String graph_id) {}

      public void set_rollback_times(String step_id, String graph_id, int j) {}

      public int get_rollback_times(String step_id, String graph_id) {}

      上述的SQL操作是建立在JWFD自定义的流程数据库结构的基础上,JWFD自定义流程数据库的结构,请下载这里的文档 http://download.youkuaiyun.com/source/3252766

  4:利用上面的SQL操作,编写一个基于图论算法的流程运行控制器,这个算法基于图论中的广度优先遍历算法,请大家参考  绿色封面  清华大学出版社 严蔚敏,吴伟民老师的数据结构(第二版) 1996年   本书第七章 155页  图论   请认真阅读本章节 ,请在培训学校里面培训JAVA编程的朋友们,抽空好好学习一下数据结构,这本书是我们学计算机专业的必修课,我给你们保证,肯定是有用的


        for(int i =0  i <当前节点的邻接点个数){ // for语句对应的应该就是单向分支
        这个FOR循环体是用来处理从流程开始节点开始分支的N个节点的,有多少个节点,就循环多少次
 
       if (该点是个前驱路由点) { // 做一次判断,保证节点不是离散的   
    
       if(该点的属性是分支类型){ //节点的物理类型
          if (该点没有被访问过) {//节点的状态类型   节点是否被访问过的状态值  应该被放在状态寄存器中
              设置访问次数加(从递归方法中获得的循环控制变量)
              返回
          }
          else if(如果已经访问过,但是访问次数<它的前驱节点总数){ // 节点的状态类型
               设置访问次数加(从递归方法中获得的循环控制变量+1)
               返回
          }
          else if(总计访问次数=它的前驱节点总数){ // 节点的状态类型
              递归进入下一个节点的访问(把大循环体的,循环变量带进去递归方法中)
          }
          }
          else if(如果是普通节点){ // 节点的物理类型
              设置访问标志
              递归进入下一个节点的访问(把大循环体的,循环变量带进去递归方法中)
          }
          }
   }

    

  5:   对每一个具体的流程图,上面的算法并不一定是完美的,估计有时候会做一些局部的修改,另外限于篇幅,我在这里就不详细介绍嵌入式脚本的使用了,具体请参考我在JWFD设计文档包中的文档


 6: 估计在一个用户自定义流程系统上线之后,程序员还是要根据具体的业务情况,修改一下这个流程系统,尽量的满足用户的需求。。。。。。


        遇到有什么具体的问题,可以给我发邮件   comsci@163.com     





天翎低代码流程引擎介绍 本文主要介绍了天翎低代码流程引擎的功能和优势。 阅读详情

相关推荐

SAP S/4 HANA新变化-FI:固定资产

SAP S/4 HANA新变化-FI:固定资产 http://mp.weixin.qq.com/s?__biz=MzAwMjgyMTA4MQ==&mid=2652153189&idx=1&sn=d7d125872c0e69f28eb040f1296b851e&c...

weixin_33795833的博客 2299

使用activiti工作流引擎显示流程图时高亮显示流程图中已执行节点和已执行路径方法(AutoEE_V2实现方式)

1AutoEE-自动智能开发平台 AutoEE-自动智能快速开发平台官网:http://www.autoee.org 最新版本:AutoEE_V3.0.4 AutoEE_V2版本是在V1版本的基础上进行的升级改造,集成Activiti_5.18.0工作流引擎,引入activiti-explorer在线流程设计器,同时实现流程图中高亮显示流程图中已执行节点和已...

AutoEE-自动智能开发平台 5617

工作流引擎详解:从审批流程到Activiti实践

本文详细介绍了工作流引擎的概念与应用,重点分析传统审批流程实现方式的局限性,并系统阐述Activiti工作流引擎的解决方案。内容涵盖工作流基础概念、传统审批流程实现方法(状态字段法和条件判断法)及其缺点,以及Activiti工作流引擎的核心架构与BPMN建模语言。文章还详细讲解了Activiti的实际应用流程,包括流程定义部署、实例启动、任务查询与办理等核心操作步骤,帮助读者全面理解工作流引擎如何实现业务流程自动化管理,提高系统灵活性和可维护性。

rong_pei的博客 1868

[流程管理]关键流程节点的改变是需要审批的

无论多么小的企业,无论多么微的公司,只要有流程,其中都应该有一个关键节点          这个关键节点就是  H----R     这个节点是不能够删除的          因为自动节点和人工智能技术都无法处理对人才的辨识和分析,只有靠主管的经验和阅历来判断         每日提示: 铺面再小,也需要一个老板来守

comsci的专栏 2923

【Ragflow】9.问答为什么比搜索响应慢?从源码角度深入分析

前几天看到有群友提到一个现象:Ragflow的搜索界面的问答速度很快,但聊天界面的问答速度很慢,究竟是什么原因?在深入挖掘源码之后,逐渐发现了问题的答案。

兴趣使然的创作者 2906

Android Profiler实战:如何用CPU分析工具揪出卡顿元凶(附线程状态解读)

本文深入解析Android Profiler中的CPU分析工具,重点聚焦线程活动监控。通过解读线程状态时间轴上的绿、黄、灰三色含义,并结合实战案例,指导开发者精准定位导致界面卡顿的CPU密集型或I/O阻塞代码,有效提升应用性能与用户体验。

weixin_29197699的博客 374

工作流卡死?JNPF自由流,一招打通企业提效“任督二脉”

在企业数字化落地过程中,最让人崩溃的不是技术难题,而是:审批链写死、节点不可调、业务一变流程就废,紧急事项、非标申请、临时协作全被卡住,效率低、体验差、管理乱。JNPF 6.1 重磅推出,基于自研 JnpfFlow 引擎,彻底打破传统BPMN固定链路局限,用“灵活流转+强管控”双能力,让企业非标准化场景彻底跑通,真正打通提效“任督二脉”。

sdgfafg_25的博客 611

Nacos漏洞利用工具V3.0.5实战:从认证绕开到内存马植入的全流程指南

本文详细解析了Nacos漏洞利用工具V3.0.5在实战中的应用,从认证绕开到内存马植入的全流程。文章深入探讨了如何利用Nacos的历史漏洞,如默认口令、认证逻辑绕过、Derby SQL注入及Jraft反序列化,实现权限提升与持久化控制,并提供了防御视角与加固建议,旨在帮助安全人员理解攻击链以加强防护。

h6j7k8l9p0的博客 484

FlowGram 简介:开源前端流程搭建引擎

FlowGram 是一套基于节点编辑的流程搭建引擎,帮助开发者快速创建固定布局或自由连线布局的流程,并提供一套交互的最佳实践, 很适合有明确输入和输出的可视化工作流。

bytedanceospo的博客 6423

基于STM32的RS485土壤氮磷钾与PH传感器数据采集与OLED显示实战(附完整代码)

本文详细介绍了基于STM32单片机通过RS485协议采集土壤氮磷钾与PH传感器数据的实战项目。涵盖硬件选型、连接方法、Modbus-RTU通信协议解析、STM32程序实现及OLED显示,提供完整代码和调试技巧,适用于农业物联网环境监测系统。

kotlin6android的博客 339

保姆级教程:用Anaconda+PyCharm搞定YOLOv8本地部署(附避坑指南)

本文提供了一份详细的YOLOv8本地部署指南,涵盖Anaconda环境配置、PyCharm集成到模型部署的全过程。特别针对国内开发者需求,整合了镜像加速和常见报错解决方案,帮助快速完成目标检测模型的本地部署与实战应用。

weixin_42528090的博客 433

流程引擎表单引擎有哪几个方面的优势?

低代码技术平台、流程引擎表单引擎的兴盛发展是推动各中小型企业摆脱数字化转型发展困境,实现快速、高效、降本的流程化办公新模式。

Gzlcxxjs的博客 1215

virtuoso根据原理图绘制版图并联接_virtuoso画原理图

Virtuoso Schematic Editor 电路仿真一、Virtuoso Schematic Editor 实验目的:掌握电原理图(schematic)设计输入方法。 [1]启动 IC Design 软件 启动 软件: 开机后运行......2.绘制原理图 新建工程后打开的是默认的原理图文件 SCHEMATIC1 PAG...存盘 完成原理图的绘制后,将原理图存盘. 三 . 用 Check...

weixin_33536190的博客 4147

字节开源的前端流程引擎 - 很好用!

飞书多维表格工作流:https://www.feishu.cn/hc/zh-CN/articles/908751305974-%E4%BB%80%E4%B9%88%E6%98%AF%E5%A4%9A%E7%BB%B4%E8%A1%A8%E6%A0%BC%E5%B7%A5%E4%BD%9C%E6%B5%81。底层提供画布引擎(通过分层扩展交互)、节点引擎 (节点的表单渲染、校验)、变量引擎(节点间变量的引用管理)、物料库 (扩展节点 及 UI 组件)来丰富业务扩展。

m0_50180963的博客 1338

V4L2教程(1):Ubuntu V4L2开发环境搭建与设备探索

欢迎来到V4L2学习指南的第一篇!本文将带你从零开始,在Ubuntu系统上搭建完整的V4L2视频采集开发环境。无论你是想开发视频监控、视频会议还是机器视觉应用,掌握V4L2都是Linux视频开发的必经之路。 **本节学习目标**: - 理解V4L2的基本概念和架构 - 搭建Ubuntu下的V4L2开发环境 - 掌握v4l2-ctl等调试工具的使用 - 学会检测和配置USB摄像头设备

琅嬛福地 417

Dify搭建AI测试用例生成器

1、获取产品需求文档2、解读、分析、挖掘需求点,提炼为测试点3、依据测试点,生成详细的测试用例4、输出测试用例1、打开 Dify 控制台,依次点击【工作室】-【ChatFlow】-【创建空白应用】。

十二测试录 1372

Activiti7工作流引擎

工作流引擎实现了一个规范,规范要求:流程管理和状态字段无关,始终都读取业务流程的下一个节点。当业务更新的时候我们只需要更新流程图就可以了。从而实现了业务流程改变,不需要修改代码例如:请假天数小于三天不需要经理审批,请假天数大于三天需要经历审批,那么这就会导致请假不同天数流程不一样。传统的基于状态值的方式,就需要改代码,而基于工作流引擎的方式就不需要修改代码。流程自动推进原理:就拿请假模型来说,工作流引擎会用一张表来记录当前处在的节点。

立志成为架构师 3296

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

哪家的流程引擎表单引擎好操作?

什么样的流程引擎表单引擎灵活又好操作,可以创造高效率的流程化办公?

Gzlcxxjs的博客 152

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

【老马】流程引擎(Process Engine)概览

大家好,我是老马。最近想设计一款审批系统,于是了解一下关于流程引擎的知识。下面是一些的流程引擎相关资料。

1050

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

认识流程引擎丨流程引擎提供你自由任性操作加签、转办、驳回

真正强大的流程系统,不是流程设计得多完美,而是它能应对多少“变化”。

wwwhongxia的专栏 237

Activity工作流引擎

该博客为尚硅谷课件,放在这主要为了复习用!!

qq_61544409的博客 2万+

低代码流程引擎怎么用?审批流设计详解

本文详解低代码流程引擎审批流全套设计与落地方法,梳理流程核心概念,讲解业务流程建模、节点配置、条件分支设计技巧,覆盖主流程、分支、异常路径设计,提供上线全场景测试用例,介绍上线后监控、调优、迭代策略,并解答流程卡死、审批慢、多组织差异化配置等高频问题。

2501_94674434的博客 229

关于工作流程引擎

你对这两个主旨的理解已经抓住了核心。接下来的学习路径就是:先掌握。

在技术领域里形成深刻,全面的认识,知道来龙去脉,深入浅出的讲到实用点。 426

云网OA:打造高效协同办公的利器——深度解析其低代码开发平台与流程引擎

云网OA是一款本地化部署的OA软件,自2006年起,历经16年的不断迭代与优化,已服务过1000多家客户。该软件基于Springboot+Vue3框架构建,不仅拥有成熟的OA办公系统功能,还自带低代码开发平台,能够快速搭建包括人事系统、CRM系统、办公用品系统、项目管理系统、合同管理系统等在内的多种企业应用。云网OA凭借其深度研发、丰富的功能以及自带的低代码开发平台和流程引擎,为企业提供了高效协同办公的利器。

chenchuang0128的博客 1156

低代码流程引擎:设计审批人为表单字段,企业内部流程效率,降本增效!

在现代企业的日常运营中,流程审批是连接需求提出、资源调配的核心环节。它的设计质量和执行效率直接影响到企业的运营成本和业务响应速度。随着企业对于灵活性和高效性的需求不断增长,固定审批人或完全静态的审批规则往往无法满足复杂多变的业务需求。在低代码流程引擎的广泛应用中,为满足企业多样化、动态化的业务流程需求,将流程节点审批人设置为表单字段,可以解决跨部门协作、区域性审批差异、紧急流程等问题。在JVS低代码流程引擎中通过“设置流程节点审批人为表单字段”,可以实现流程审批的高效和灵活管理。

598
上一篇: 工作流系统设计-面临新的问题,需要新的思路
下一篇: JWFDv0.96流程设计器主窗体工具栏代码修正补丁
comsci
博客等级 码龄22年 412粉丝 397原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值