[原创] JWFDv0.96工作流引擎设计--节点回退算法说明

[退回专题]关于流程引擎的退回操作设计大全 工作流程引擎的退回规则 设计配置大全 专题说明 概述 关键字:工作流引擎退回 退回规则 说明:流程引擎的退回与发送,分别是前进与后退,它是流程引擎的基础功能操作,流程的退回根据不同的应用场景,也是需要不同的方式来控制,我们把这些方式叫做规则处理。 退回工作的场景相对复杂,由于与审核组件,表单联系在一起为了能适用更多的应用场景,少写代码,所有请仔细约定本文章关于退回的设置。 ... 阅读详情

 

 

            JWFDv0.96工作流引擎设计

                                

                                                       ----节点回退算法说明

 

 

 

注:这篇文章中所使用的“函数”就是指JAVA语言中的方法

 

 

作者 comsci   2010.10.7    四川。成都


算法设计的简要说明

 

JWFD工作流系统在v0.96版本之前并没有实现回退的功能,在v0.96版本中节点单步回退功能才被使用单一算法函数的方式加入到引擎模块中,但是由于在开发过程中,时间比较紧张,我并没有对这个算法进行详细的说明,以至于使用JWFDv0.96进行二次开发对于其它用户来因为缺乏足够的文档说明而较为困难,因此我决定利用一些时间,为JWFDv0.96编写比较详细的系统设计说明文档系列,这些文档包括JWFD-GUI界面-类关联说明文档,流程引擎基础API函数说明文档,流程建模XML说明文档,流程引擎控制器算法说明文档等,在这些文档的帮助下,相信JWFDv0.96的二次开发对用户来讲是一件相对比较轻松的事情


 

 

   事实上JWFDv0.96版本设计的的节点回退算法相对其它商业性流程系统非常简单和原始的,我在设计这个回退算法的时候,还没有来得及考虑比较复杂的诸如多步(全流程)回退和嵌入业务数据的恢复这些模型,这样一来整个系统的结构过于复杂而使得流程引擎的设计和升级变得更加复杂和困难,所以暂时没有做这样的设计,而仅仅是通过记忆和修改,保存和恢复回退节点的状态值来实现简单的单步回退的功能,这种设计原理就相对的简单,以至于大家可以一看就明白,也可以从这种设计中体会到流程引擎设计的一些思路,便于自己以后开发引擎的时候,走一条简洁而实用的设计开发道路,如果大家在做项目的时候,需要对项目中应用到的工作流系统增加回退功能,那么可以参考这个设计,但是首先一定要根据自己项目和产品的实际情况来做设计,最好不要照搬照抄。

 

 

因为我的水平和经验有限,JWFDv0.96在设计和开发过程中,没有获得比较充分的用户使用过程中的反馈信息,所以很多设计都是根据自己的经验和想法做出来的,这样一来,在系统的结构中必然有一些与实际应用的情况不相适应的地方,这一点希望大家一定要注意

 

 

JWFDv0.96工作流引擎 - 节点单步回退算法设计原理


JWFD的节点单步回退算法分为两个主要操作步骤,分别是当前节点回退处理步骤和前驱节点状态重置步骤,下面就简要介绍下这两个步骤的设计思路

 

 

 

回退算法第一步: 当前节点回退处理

 

 

 

(原理图回避了代码包中的函数中传递的变量等数据,方便大家从整体上把握设计思路)


 

 

请大家对照JWFDv0.96 代码包 src 中的

org.jwfd.workflowEngines.Algorithm.TopologyAnalysis.java 第 754-852行的 rollback 函数 代码来理解该算法的JAVA 实现

 

 

(下面所描述的函数的 API 说明请参考 JWFDv0.96  工作流系统开发包简易说明 .doc)

 

 

-----------------------------------------------------------------------------------------------------------------

 

 

如果当前正在处理的节点( stepid )是 汇聚节点


(注释: 如果当前节点是汇聚点,那么当它向前回退一步的时候,这就意味着汇聚在它身上的所有其它分支 节 点的状态都要改变 ,  这些分支点的状态都要从处理完成变为正在处理中,所以汇聚点的回退是个多节点 非线性处理方式,这点完全不同于普通的节点的单步回退 )


 

 

汇聚节点 处理步骤如下

 

 

1:对该节点的 活动状态值 (对应的数据库表名 step_main  字段名 is_active   )进行 " 尚未处理 " 具体操作使用 函数 set_overactived_step () 来实现本操作

(注释:当汇聚点正处于被处理过程中的时候,这个节点的状态一定是“处理中” )

 

2:对该节点的 回退计数器值 (对应的数据库表名  step_main  字段名 rollback_time ) 增加 1 次处理次数( +1 ),具体的操作使用函数 set_rollback_time s()来实现本操作 

 

汇聚节点 处理步骤完成


 

如果当前正在处理的节点是 普通节点

 

 

普通节点 处理步骤如下

 

 

1:对当前节点的 活动状态值 (对应的数据库表名 step_main  字段名 is_active   )进行 " 尚未处理 " 的 函数处理过程     具体操作函数为" set_noactived_step ()

 

2:对当前节点的 处理次数状态值 (对应的数据库表名 step_main  字段名 actioned_time ),进行清零函数处理 ( 这里的清零处理的设计估计有点问题,如果一个节点已经进行回退处理了,那么它的处理次数应该算回退这次吗?而不是 0 次处理?大家可以对这个问题思考下 )   具体的操作函数为 " set_Actioned_time s()"

 

3: 对当前节点的 回退计数器 (对应的数据库表名  step_main  字段名 rollback_time ) 增加 1 次处理次数( +1 ),具体的操作使用函数 set_rollback_time s() 来实现本操作 

 

4: 对当前节点的 访问计数器 (对应的数据库表名  step_main  字段名 visited   ) 增加 1 次访问计数( +1 ),具体的操作使用函数 set_visited_times () 来实现本操作 

 

(既是将该节点的活动状态均设置为未处理的初始状态 )

 

 

普通节点 处理步骤完成

 

 

回退操作第一部分结束


 

----------------------------------------------------------------------------------------------------------

 

对当前节点进行回退处理之后,还要对当前节点的前驱节点进行对应的处理, 下面介绍单步回退算法的第二个步骤: 前驱节点状态重置过程 (前驱点既当前节点的前面一个节点)


 

 

回退算法的第二步的设计思想基本上是这样的:如果我们对当前的节点进行了回退操作,那么这个节点的状态一旦被回退,那么其核心的状态值就会被设置为初始0 状态,而这个节点正在操作的行为就会立即转到这个节点的前驱节点 ( 前驱节点就是当前节点的单步回退的前面一个节点 ) 上面去,这一个前驱节点状态重置的过程就是回退算法的第二个步骤

 

 

回退算法第二个步骤的原理图

 

 

前驱节点状态恢复过程( 算法描述过程 )

 

如果前驱点( prestepid )是 汇聚节点( 下面的处理过程和第一步中的处理类似,只是状态不相同,现在是要将前驱节点的状态从处理完毕恢复成正要被处理的状态 )


 

1:对前驱节点的 活动状态值 (对应的数据库表名 step_main  字段名 is_active   )进行 " 正在处理 " 的 函数操作    具体操作函数为" set_actived_step ()

 

2:对前驱节点的 处理次数状态值 (对应的数据库表名 step_main  字段名 actioned_time ),进行数值重置处理,具体 的操作函数为 " set_Actioned_time s()"

 

3: 对前驱节点的 访问计数器 (对应的数据库表名  step_main  字段名 visited   ) 增加 1 次访问计数( +1 ),具体的操作使用函数 set_visited_times () 来实现本操作 

 

4: 对前驱节点的 回退计数器 (对应的数据库表名  step_main  字段名 rollback_time ) 增加 1 次处理次数( +1 ),具体的操作使用函数 set_rollback_time s() 来实现本操作 

 

 

----------------------------------------------------------------------------------------------------------------------

 

如果前驱点( prestepid )是 普通节点( 如果前驱点是普通节点,那么将其状态值恢复为尚未处理的数值恰当呢?还是恢复为正在处理恰当呢?尚未处理是0, 正在处理是 1, 这里还存在着尚未明确的地方 )

 

 

1:对前驱节点的 活动状态值 (对应的数据库表名 step_main  字段名 is_active   )进行 " 正在处理 " 的 函数操作    具体操作函数为" set_actived_step ()

 

2:对前驱节点的 处理次数状态值 (对应的数据库表名 step_main  字段名 actioned_time ),进行数值置 0 处理,具体的操作函数为 " set_Actioned_time s()"

 

3: 对前驱节点的 访问计数器 (对应的数据库表名  step_main  字段名 visited   ) 访问计数(置 0 ),具体的操作使用函数 set_visited_times () 来实现本操作 

 

 

前驱节点状态恢复过程结束

 

 

节点单步回退算法全部结束

 

------------------------------------------------------------------------------------------------------------------

 

算法补充说明:


 

   对于在算法中使用到的几个计数器和控制字段的值的设置和恢复是整个回退算法的关键点,但是由于时间和水平有限,我在JWFDv0.96 这个版本中还没有对上面几个控制字段和计数器的数值的设置做更加深入和详细的设计,可能大家在实际项目和产品的开发过程中,需要根据具体的情况,对这些字段和计数器做进一步的设计和开发,有可能访问计数和回退计数器的值在不同的情况下,会同时出现置 0 或者 +1 等几种值都具有合理性的特殊情况


 

另外需要大家注意的是:这里介绍的回退算法仅仅是针对节点的单步回退的操作,而并不能够处理跨节点或者多节点的连续回退这样的相对比较复杂的操作,如果用户要有针对性的开发具有这种功能的流程引擎模块,那么就需要更改流程的数据结构,有针对性的添加节点操作控制计数器或者增加节点在运行控制过程中需要用到的其它的一些控制字段。

 

 

我在这里省略了在流程核心运行控制器算法中的条件汇聚JAP 计数器的回退控制部分,因为回退操作的加入,使得流程核心运行控制器的条件汇聚的操作变得更加复杂,我将在另外一篇文章专门介绍 JWFDv0.96 运行控制器的算法结构和详细代码


 

参考文档

 

JWFDv0.96的流程节点的数据结构,请参考这篇文章

“ JWFDv0.96工作流数据库结构说明 .doc ”

JWFDv0.96的流程引擎原子操作 API 说明,请参考这篇文章

“ JWFDv0.96 工作流系统开发包简易说明 .doc ”

JWFDv0.96流程 XML 模型文档结构说明,请参考这篇文章

“ JWFDv0.96 工作流 XML 结构说明 .doc ”

JWFDv0.96流程嵌入式公式设计文档结构说明,请参考这篇文章

“ JWFDv0.96工作流条件表达式逻辑结构设计 .doc ”

 

 


JWFD的相关文档和代码下载 

 

地址: http://www.cnblogs.com/comsci/favorite/260690.html

 


简单的混合强化本构模型,回退映射算法.zip_repliedl8x_应力控制_应变驱动_康国政_混合强化模型 康国政书上的两个例子 包括应变驱动,和应力驱动 立即下载

相关推荐

JWFDv0.96工作流节点回退算法说明.doc

JWFDv0.96工作流节点回退算法说明.doc JWFDv0.96工作流节点回退算法说明.doc

工作流之节点回退, 回退到上一个节点

工作流审批流程会遇到, 审批不通过, 回退到指定节点, 或者回退到上一个节点.回退到指定节点, 通过moveTo 实现回退到上一个节点, 假如当前节点流入得分支有很多, 该如何判断上个节点是谁呢?

kaige8312的博客 929

汽车测试工程师工作准则

希望这份综合的工作规范能帮助你更好地规划职业发展。如果你对某个特定领域,比如自动驾驶测试或智能座舱测试,有进一步的兴趣,我很乐意提供更具体的信息。

qq_40844444的博客 456

回溯算法(例题详细解析)

回溯算法(例题详细解析)涉及到深度优先、广度优先遍历进行回溯,深度解析,详细了解回溯算法

c_study__c的博客 6165

YOLOv8缺陷检测可视化界面实战:PyQt5布局设计与代码实现

本文详细介绍了如何利用PyQt5为YOLOv8缺陷检测模型构建一个专业、易用的可视化界面。通过实战讲解PyQt5的布局管理器设计、信号槽机制与YOLOv8核心的集成,帮助开发者快速将AI模型部署为直观的桌面应用,提升工业质检等场景的落地效率。

redis7keeper的博客 758

从《视觉SLAM十四讲》到项目实战:一文读懂拓扑地图与语义地图为何是服务机器人的未来

本文探讨了服务机器人地图技术的演进,从传统几何地图到拓扑地图与语义地图的跨越。通过分析栅格地图的局限性和拓扑地图、语义地图的优势,揭示了它们在动态开放环境中的智能应用。文章还介绍了多模态语义融合架构和动态语义更新技术,为服务机器人的未来发展提供了技术路线图。

weixin_30292843的博客 478

回溯算法详解

回溯算法详解 在图 1 中找到从 A 到 K 的行走路线,一些读者会想到用穷举算法(简称穷举法),即简单粗暴地将从 A 出发的所有路线罗列出来,然后逐一筛选,最终找到正确的路线。 图 1 找从A到K的行走路线 图 1 中,从 A 出发的路线有以下几条: A-B-C A-B-D A-E-F-G A-E-F-H A-E-J-I A-E-J-K 穷举法会一一筛选这些路线,最终找到 A-E-J-K 。 本节要讲的回溯算法和穷举法很像,它也会把所有可能的方案都查看一遍,从中找到正确答案。不同之处在于,回溯算法查看每

ccc369639963的博客 875

Colmap中 patchmatch源码

惊世骇俗的Colmap PatchMatch源码 500多行,简明易懂 先了解PatchMatch的options: max_image_size: 任一维度的最大图像尺寸 gpu_index: gpu的下标 depth_min,depth_max: 随机采样的深度范围 window_radius:用于计算NCC(两图片的归一化互相关),NCC的计算需要用到 win_size. 图像匹配 | NCC 归一化互相关损失 | 代码 + 讲解 - 知乎 (zhihu.com) window_step: 用.

qq_24884193的博客 2211

业务工作流引擎调度算法简析(一):

     在工作流系统中,系统调度是核心,调度算法的生效程度和成熟性直接决定了工作流系统的可用性。本文章描述工作流如何推进和回退,并且描述在分之、合并、跳转等特殊情况下的流转规则处理。基本概念1.1 流程实例流程实例是根据流程定义所产生的,一个流程启动后自动产生一个流程实例;系统完成创建流程实例后,需要初始化流程实例(如:给流程全局变量赋值);流程实例创建并初始化完成后,流

GavinFriends的专栏 2333

obdumper和obloader迁移OceanBase业务库(一):实施手册

⭐️ 要求导出一致性数据时,建议在导出数据前,手动触发一次合并,在合并成功后再重新导出数据。:统计业务数据库下的所有业务对象清单(表/索引/分区/包/存储过程/同义词/序列/…:检查业务数据库下的所有业务对象清单(表/索引/分区/包/存储过程/同义词/序列/…:统计单个模式下所有业务对象清单(表/索引/分区/包/存储过程/同义词/序列/…如果单张表的数据量太大,会导出为多个文件,文件命名会加上数字后缀。该过程会导出所有表的定义、以及定义在表上的索引定义。如果有多种数据库对象,会导出到不同的子路径下。

Sebastien23的博客 1030

Unity3D实现自定义河流路径或泥石流路径

此工具是一个插件,插件很好用,可以根据地形编辑河流的走向以及宽度,也可以发挥想象编辑成其他的效果,比如泥石流效果,岩浆效果,小溪,或者大江或者大河等等博客将会介绍可以编辑河流的工具的使用。希望这篇博客对Unity的开发者有所帮助。大家好,我是心疼你的一切,不定时更新Unity开发技巧,觉得有用记得一键三连哦。提示:以下是本篇文章正文内容,下面案例可供参考本次总结的就是工具的使用, 有需要会继续增加功能不定时更新Unity开发技巧,觉得有用记得一键三连哦。么么哒!

心疼你的一切博客 5272

JWFDv0.96 工作流引擎原子操作简易说明

作者: comsci 发表于 2010-09-07 10:46 原文链接 阅读: 20 评论: 0 JWFDv0.96新增加了若干基本SQL操作,并在这些操作的基础上面新编写了SAN流程运行控制方法,下面我就简单的介绍下这个这些基本SQL的结构 JWFDv0.94引...

chenglan8953的博客 189

AUTOSAR NvM 实车故障深度剖析:车载存储问题快速定位与工程解决方案

软件配置与代码逻辑无问题时,排查底层驱动与ECU硬件,步骤如下:底层驱动排查:排查Fls/Eep驱动配置,是否适配目标MCU(如TC397、S32K),编程/擦除/读取时序是否合理;检查Fls/Eep驱动错误处理逻辑,是否未处理Flash编程失败、读取错误等异常;验证Flash高速编程模式是否启用,是否能提升写入/读取速度;排查MemIf层配置,是否正确对接NvM与Fls/Eep驱动,是否存在调度延迟。

getusushu的博客 78

[原创]JWFDv0.96工作流引擎设计-自动运行控制器结构说明

JWFDv0.96---工作流引擎设计                                             --自动运行控制器结构说明   注:这篇文章中所使用的“函数”就是指JAVA语言中的方法 作者 comsci   2010.12.12   四川。成都

comsci的专栏 1775

FT2004(D2000)开发实战之AMD R5 230显卡驱动适配

AMD R5 230显卡驱动适配

嵌入式Linux 3203

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

[] [原创]JWFDv0.96 工作流系统-引擎原子操作API简易说明

[img]http://dl.iteye.com/upload/attachment/326183/53714d07-dc4a-3f30-87fb-44f6535fe3f5.jpg[/img] jwfdv0.96新增加了若干基本sql操作,并在这些操作的基础上面新编写了san流程运行控制方法,下面我就简单的介绍 下这个这些基本sql的结构 jwfdv0.94引擎的流程运行控制类...

我的超级无敌博客 184

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

[] [原创]JWFDv0.96工作流引擎设计-自动运行控制器结构说明.

            [size=large;]     jwfdv0.96---工作流引擎设计                               [size=small;]--自动运行控制器结构说明[/size][/size]           [size=10.5pt; font-family: '宋体';]实现的技术与方法[/size]        [size=10....

技术总结 136

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

反馈行为与设计动态流程引擎的一些思考

有朋友问,你为什么要写那么多废话呢?      这里我要说明的一点是,我写的这些有些的确是废话,但是如果没有这些废话,那代码也无法形成,因为代码实际上是人思想的体现,我动手写代码之前,首先要在脑海中把代码的基本架构构思出来,就好像一个作者在写小说一样,都有一个构思的过程,没有这个过程,文章或者代码都不会成形的,所以请原谅我要写那么多博文来阐述我的思想,另外,很多用开源的朋友其实并不怎么爱看

comsci的专栏 2035

JWFD开源项目需要改进的地方

这半年来,JWFD开源项目没有发布新的代码包和文档,而是在解答朋友们提出的很多问题,从这些问题中我发现JWFD在下面的方面还欠缺代码和文档的支持,我会在接下来的时间内在这些方面加强工作,为朋友们提供更多资料和文档,用以支持朋友们与工作流相关的工作。。。   1:JWFD的图形界面的模块JGRAPH的二次开发使用说明文档问题      今年夏天的时候,一位朋友因为在工作中需要在产品中嵌入

comsci的专栏 914

基于事件驱动的有限状态机实现工作流引擎的核心调度算法

  有限状态机(FSM)又称为有限状态自动机或简称状态机,是表示有限个状态以及这些状态之间的转移和动作等行为的数学模型。   状态存储关于过去的信息,就是说它反映从系统开始到现在时刻的输入变化。转移指示状态变更,并且用必须满足来确使转移发生的条件来描述它。动作是在给定时刻要进行的活动的描述。有多种类型的动作: 进入动作(Entry action)  &nbs...

snowfox2008 1726

Flowable工作流之任务回退

有的时候,一个任务节点会存在多个候选人,例如 提交一个任务,这个任务既可以 处理,又可以 处理,当一个候选人认领任务之后,但是又不想处理任务了,此时我们可以将任务回退,那么针对这种情况,我们该如何处理?今天一起来看看我们先从最简单的串行流程来分析,案例流程图如下 完整的 文件内容 上面的流程就是一个非常简单的串行任务,定义了 个用户任务,使用变量来指派处理人分别是 ,在流程的执行过程中我们可以通过回退来演示具体的效果

桐花思雨 6656

BPMN+工作流引擎+规则引擎

BPMN+工作流引擎+规则引擎

chengbo_eva的博客 1541

各主流工作流引擎算法

PetriNet\FSM\EPC\XPDL\Activity Diagram\jPDL--BPEL\BPMN\BPMD 工作流引擎是基于过程建模来实现的,因此可以说常见的引擎实现有这几种: EPC是一种过程建模方法,全称是Event-driven Process Chain。 FSM 有限状态机。 PetriNet:Petri网模型。 Activity Diagram:UML活动图。

keepLearning的专栏 2290
上一篇: [原创]JWFDv0.96工作流系统--流程XML文档结构说明
下一篇: [原创]JWFDv0.96工作流引擎设计-数据库结构说明
comsci
博客等级 码龄22年 412粉丝 397原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值