工作流系统应该包括什么呢?抛开繁杂冗长的理论,先从一个看得见摸得着的东西入手。
图1.1 人工串行流程
这是一个过程,过程包括了几种不同类型的活动,以及活动之间箭头。通过箭头可以得到当前活动的后续活动,也可以得到前驱活动。从这里看出来,一个流程最起码要有:
- 起始活动,结束活动,
- 人工活动,
- 活动之间的路径变迁。
图1.1描述的是人工活动,需要人来与引擎交互(以后用参与者的概念描述,wfmc规范定义的参与者类型有6种,当前系统实现的有4种),但也许执行者不是由人来驱动,而是由进程/线程来调度,执行一段java代码,执行xxxx.cmd (xxxx.sh)或者发一封邮件,或者跑一个存储过程。那我们就知道活动还可以是自动工具,这自动工具还可以细分。
自动工具(class,批处理,脚本,可以被规则引擎调度的规则因子),而且有的自动工具是需要定时触发的:比如有个存储过程,规定是晚上2:00跑一次,这就有定时调度的要求。自动活动和人工活动统称为业务活动。
这样的描述已经能涵盖80%的功能,但仍然有不足,比如我需要在某个阶段同时作3个活动,或者3个活动里面,根据当时的条件值我只要选1个,情形如图1.2和图1.3。
图1.2 并发(无条件)分支流程
图1.3 条件分支流程
这样我们以前的活动分类就不够用了,开动我们的脑筋,扩展我们的活动类型。根据用户的需求,需要有个地方来进行分支(这里分支也许是条件判定,也许是无条件并发),图1.2,1.3这里描述的是路由活动。路由活动不带业务规则。用户的业务规则只能定义在人工活动和自动活动。路由活动是用来告诉工作流引擎,业务到这里需要进行某种特殊处理。从上述中我们就分析到:
路由活动可以包括:
- 无条件并发(and_split),
- 条件并发(xor_split / or_split ,区别以后阐述)
- 循环并发(while_split,起始xor_split也可以模拟循环)
- 。。。其他特殊模式
当然了,有去有来,有始有终。既然有了split,得有个配对的join路由活动,用来约束,界定条件分支的结尾。所以这里的都是匹配and_split and_join ; xor_split xor_join;while_split while_join,这样就非常严谨。当然,严谨有时候会给复杂流程绘图的时候带来过多的线条,不胜其烦,所以在xor_split和xor_join对中,作了简化,通过descion活动就可以描述后续单一条件,省略了xor_join路由。(在以后的描述中就会理解到其实xor_join在这里并没有逻辑需要处理,故可以省略)
其他的工作流实现当然有其他的方式:比如直接在业务活动上作并发分支,然后在另外一个业务活动上汇聚,业务活动承载着业务逻辑的同时还要进行条件分支的判断。我认为这样不严格,流程是一个严肃的业务表达,需要精确的描述,所以我愿意在引擎里面多设计几个活动类型,以便严谨的告诉引擎:“引擎兄,这里有个并发汇聚(and_join),等当前活动的所有前驱活动都完成后,拜托执行一下后续的活动。。。”。;)
既然有了条件路由活动,那就意味中会有个条件来进行判定,条件它是需要和别人进行PK的,以便选择后续不同的分支,这个别人就是相关数据,你的条件就需要和相关数据进行比较。结果出来后,我又可以严肃的告诉引擎:“引擎兄。。。。。。。。”。 ;)
这里其实是2种不同的设计理念,条件判断是做在活动变迁上,还是做在路由活动上。
对于条件判定,我预定了3种实现的方式:
- 前台界面输入值:适合人工活动,比如某处是一个审核点,审核通过了,该笔工单送oss,没有通过,发给营业员重新检查,这个审核点,上面应该有2个不同的按键,向左或向右,或者是有个下拉框,提供后续活动选择。这里实质就是一个从前台获取了一个变量值。
- Class执行后结果返回值:在设定条件的时候指定指向某个class和fun,当然带不带参数悉听尊便,反正系统只需要一个返回值,我是返回一个object,至于你需要什么去作类型转变。
- 脚本执行后返回值:一段潜入java的动态脚本执行后的结果,比如bsh、Groovy。
当然了,路由活动要使用相关数据,业务活动也不可能不食人间烟火,它总有需要和业务系统进行交互的地方,相互传递数据,勾连关系,眉来眼去。这里的数据就是应用数据(其实这里只是应用数据的一种)。这里有几种方法可以采用,比如采取URL地址带参的方式(get方式);和session关联方式;和数据库的某个表关联,为了更好的规范和约定,我们预先就把这关表给设计好,并起了个与众不同的名字:“应用数据表”。
- 大小: 12.4 KB
- 大小: 16.5 KB
- 大小: 21 KB
分享到:
相关推荐
Toil是一个开源的、社区驱动的工作流管理系统,特别适合处理大规模生物信息学计算。它采用容器技术(如Docker)来封装和运行任务,并具有强大的作业调度和资源管理能力,确保在分布式计算环境中高效运行。Toil支持...
resolwe-bio库的核心功能在于数据处理流程的定义和执行,它支持工作流管理,使得复杂的生物信息学分析可以被分解成一系列可复用的步骤。此外,它还提供了数据存储和同步机制,使得多用户之间可以协作并共享研究成果...
#### 概述 LM298驱动模块是一种常用的电机驱动设备,广泛应用于单片机实验板等小型移动设备的开发中。该手册详细介绍了驱动模块的接口功能、控制逻辑及电路原理,帮助用户更好地理解和应用此驱动模块。 #### 接口...
`**:定义了名为`A1_001`的截面属性,应用于`BEAM4`类型梁元素。 2. 对于其他如**`A2_002`**、**`A3_003`** 等,也是按照类似的方法进行定义。 #### 六、命令流分析 通过对以上命令流的解析可以看出,该文档主要...
#### Flume概述 Flume是一个高度可靠的分布式数据收集系统,主要用于从多种数据源收集并传输数据至Hadoop生态系统内进行后续处理。由于其强大的可扩展性和可靠性,Flume在大型互联网公司的数据处理流程中占据着重要...
#### Apache Flume 概述 Apache Flume 是一个分布式的、可靠的且高可用的系统,用于从不同的数据源收集、汇总和传输大量的日志数据到集中式的数据存储中心。Flume 的设计目的是为了能够处理大规模的数据流,确保数据...
以下是一个基本步骤的概述: 1. **导入所需库**:引入ComObj单元,它提供了对COM对象的支持。 ```delphi uses ComObj; ``` 2. **创建Excel对象**:使用CoExcelApplication创建Excel应用程序对象。 ```delphi var ...
- **概述**:接口是不同组件之间通信的基础,确保了各个部分能够高效协同工作。NGOD定义了一系列标准化的接口,以确保整个系统的顺畅运行。 - **主要接口**:主要包括资产接口、会话接口、资源接口、授权接口、流...
1. **引言**:这部分介绍了文档的编写目的,主要是为了明确软件体系结构设计的重要性,为后续的开发工作提供依据。文档范围涵盖了项目的整体框架、主要功能以及不同用户角色的需求。术语定义部分则确保所有读者对...
通达信指标公式概述 通达信指标公式是使用通达信软件开发的技术分析指标,用于分析股票、期货、外汇等金融市场的走势。这些公式可以根据不同的市场情况和投资策略,生成买卖信号、预测价格走势、计算技术指标等。 ...
Kafka 则是一个分布式流处理平台,能够处理大量的实时数据流。将两者结合使用可以构建一个强大的数据采集与处理系统。 本文档主要介绍如何搭建基于 Flume 和 Kafka 的数据传输系统,包括 Kafka 集群的搭建与启动、...
首先,"a1.txt"可能包含了系统设计的初步概念或关键模块的概述。在OA系统中,常见的功能模块包括工作流管理、文档管理、任务分配、通知公告、会议管理、人事管理、资产管理等。这些模块协同工作,使得日常办公事务...
### 知识点一:AN_SY6288升降压芯片概述 #### 1.1 基本介绍 AN_SY6288是一款由矽力杰(Silergy Corp.)开发的超低导通电阻(Ultra-Low RDS(ON))开关芯片,具有电流限制功能,能够有效保护电源免受过流或短路的影响...
它具有简单灵活的架构,基于流的概念工作,并易于管理。 **Kafka** 是一个分布式的发布订阅消息系统,它提供了一个统一的、高吞吐量、低延迟的平台来处理实时数据馈送。Kafka 能够处理大量的数据,同时保持高性能和...
2. 评测方法:形式化验证(精确但工作量大)、非形式化确认(包括多种检查和测试)和入侵测试(模拟攻击以检测弱点)。 3. 安全测评准则:D到A1级,从低到高,涵盖不同级别的安全保护措施。 安全功能包括: 1. 标识...
《Excel VBA 300语句集》是学习Excel自动化处理的重要参考资料,它涵盖了Excel Visual Basic for ...通过深入学习和实践这些语句,用户不仅可以解决日常工作中遇到的问题,还能构建复杂的工作流系统,提高工作效率。
adder_1bit A1(.a(A[0]), .b(Bo[0]), .ci(Ctr), .s(S[0]), .co(Ctemp[0])); //... (省略中间实例) adder_1bit A16(.a(A[15]), .b(Bo[15]), .ci(Ctemp[15]), .s(S[15]), .co(Co)); ``` 这部分代码实例化了16个...
- **知识点概述**:流缓冲技术是指在输入输出操作中,为了提高效率而使用的缓存机制。`BufferedOutputStream`是一种实现了流缓冲技术的输出流类,它可以在内存中暂存数据,当达到一定阈值后再一次性写入到目标流中,...