`
eworkflow
  • 浏览: 218853 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

用子流程来分解大流程续

 
阅读更多

年前写过一篇,用子流程来分解大流程。当业务流程处理环节多,繁杂时,可以用子流程来分解。就像我们程序员最熟悉的子函数一样,把处理同一事项的归纳成一个子函数,子函数可以在多个场景多次调用,也可以在同一场景中反复调用。

 

用子流程来分解大流程,作用和子函数类似。将功能处理过程比较独立或者单一的归纳成一个子流程。子流程本身是一个完整的处理过程,可以单独启动执行,也可以嵌入到其它流程中使用。

 

单独启动执行:这种就是常见的业务流程的使用。

嵌入其它流程中被调用:和主流程就会有千丝万缕的关联了。

分析一下,主要体现在,传入传回参数,同步异步的运行。和子函数不同的还有,主流程实例和子流程实例之间的对应关系。

 

传入参数:主流程送给子流程的参数,和子函数的调用参数一样理解。
传回参数:子流程运行结束,返回给主流程的,和子函数的返回值一样理解。

 

同步:主流程运行到子流程,启动了子流程了,需要等待子流程运行结束,返回主流程,主流程再接下去执行。和子函数的同步调用一样。

异步:主流程运行到子流程节点,启动了子流程了,不需要等待子流程运行结束,立即就返回了主流程了,接着主流程往下执行。 和异步调用子函数类似。

 

主流程实例和子流程实例,一对多的关系:主流程实例运行到子流程时,启动一个子流程实例。当主流程因为循环,返回,自由跳转等等返回到子流程节点之前,再次运行时,会再次启动子流程实例,这时候是又生成了一个新的子流程实例了。

 

主流程实例只有一个,形成了主子流程实例,一对多的关联关系。

 

主流程实例和子流程实例,一对一的关联:主流程实例运行到子流程实例时候,启动一个子流程实例。当主流程由于多种原因返回到子流程节点之前,需要再次启动子流程实例时,

 当子流程实例未运行结束时候,则不产生新的子流程实例,继续原来的子流程实例的运行。
 当子流程实例已经运行结束了,则将子流程实例再次激活,并回退到开始节点,重新运行。
 
总之,使得主子流程实例 始终是 一一对应的关系。即当已经产生了一个子流程实例后,就不会再产生新的子流程实例。


子流程的运用场景:
1、将功能单一的业务流程嵌入到大的业务流程中。可以在多个业务流程中被调用,也可以同一个业务流程中多次被调用。
 如整个采购系统中的 退货流程,退货流程本身是规范的,没有歧义的,按照退货办理顺序流转。可以主动发起退货流程,也可以嵌入到采购流程中,库房管理流程中,销售流程中。。。。。
 
2、分解大的业务流程:
 通常很多企业上工作流系统,是因为业务流程繁杂,环节多,步骤又多变,便于流程化管理和后期的维护,才会选择工作流管理系统。当一个页面都显示不下一个业务处理过程的节点时,很自然的就会考虑用子流程来分解大的业务流程,使得界面更加清晰流畅,而事实上,那么大的业务流程肯定是可以分类的,用子流程来分解是最好的方法。
 
 但是,用子流程只是为了分解大的业务流程的话,主子流程实例就必须是一对一的关联。如主流程实例运行到子流程后,启动了子流程,返回主流程,主流程因为各种原因,返回了,再次运行到子流程时,应该是重做子流程的业务,而不是再次启动一个新的子流程。因此主子流程的衔接需要这样一个开关来决定是一一对应的还是一对多的关联。



 

 



 

 

  • 大小: 28 KB
  • 大小: 36.7 KB
0
0
分享到:
评论

相关推荐

    汇编-第12课 子程序续.pdf

    子程序的设计通常使用`proc`和`endp`关键字来定义。如果子程序定义在非代码段中,需要在`proc`后加上`far`来指示跨段调用。在子程序中,参数传递可以通过寄存器和栈两种方式。栈传递参数时,通常先将参数压栈,然后...

    电子病历产品功能简要说明.doc

    电子病历产品是一种高效、规范化的医疗信息化工具,旨在优化医生的工作流程,提高病历管理的质量和效率。根据提供的文档内容,以下是对电子病历产品功能的详细说明: 1. **直观操作界面**:电子病历系统设计时充分...

    编译原理电子教案第3章

    其中,单词种别通常用整数编码来表示,而单词自身的值则根据单词的类型有所不同。 #### 二、词法分析器的功能与输出形式 1. **单词符号的种类**: - **基本字**:如 `begin`、`repeat` 等,是编程语言中固定的...

    Bin拆包工具.zip

    例如,STM32的启动流程、Flash存储器的编程和擦除操作、以及Bootloader的工作原理等,都是使用此类工具时需要考虑的因素。 总的来说,"Bin拆包工具.zip" 是STM32开发中一个实用的辅助工具,它简化了大型固件的远程...

    Windows应用程序捆绑核心编程光盘代码

    13.2 使用FTP进行多线程下载和断点续传 293 13.2.1 FTP协议简介 293 13.2.2 FTP的工作模式 295 13.2.3 FTP协议多线程下载和断点续传的实现 295 13.2.4 实例 306 13.3 使用HTTP进行多线程下载和断点续传 307 ...

    Java范例开发大全(全书源程序)

    实例226 携子之手 与子偕老(join) 415 实例227 线程让步(Yield) 417 实例228 会走动的钟(多线程) 419 实例229 变形金刚中的守护神(守护线程) 424 实例230 查看JVM中所有的线程的活动状况 426 实例231 ...

    如何使自己的程序自动更新(在线更新) c++

    - **资源替换**:如果更新涉及到资源文件,如DLL或配置文件,可以使用如Windows API的`CopyFile`函数来替换。 - **安装脚本**:更复杂的情况可能需要安装脚本来处理依赖关系和注册表项等。 6. **重启程序**: - ...

    2018年下半年信息系统项目管理师考试案例分析真题.doc

    - **范围确认不严谨**:开发人员未经正式流程就增加了断点续传功能,这属于范围蔓延,未经过正式的范围确认和变更控制。 - **范围控制缺失**:项目中出现的变更未按照变更控制流程处理,导致问题的发生。 2. **...

    3KM全桥移相ZVS软开关电源的设计-论文

    该电源的工作原理可以分解为六个主要过程:正半周功率输出过程、超前臂谐振过程、原边电流续流过程、滞后臂谐振过程、电感储能回送电网过程以及原边电流负向增大过程。在每个过程中,开关管的动作、电流的变化、电压...

    Java范例开发大全 (源程序)

     实例138 用iText生成Word文件 205  实例139 利用POI读取Word文件中的内容 208  7.3 字符流 209  实例140 按顺序创建文件 210  实例141 按顺序读取文件 211  实例142 追加文件内容 211  实例143 只显示...

    (完整word版)Python期末复习题(必考).pdf

    2. **运算优先级**:在Python中,可以使用圆括号()`()`来控制运算的优先顺序。选项A正确,B、C、D则不是用于控制优先级的符号。 3. **Python注释**:选项A和B是正确的单行注释,C是多行文档字符串注释,而D(`//...

    java范例开发大全(pdf&源码)

    实例226 携子之手 与子偕老(join) 415 实例227 线程让步(Yield) 417 实例228 会走动的钟(多线程) 419 实例229 变形金刚中的守护神(守护线程) 424 实例230 查看JVM中所有的线程的活动状况 426 实例231 模仿...

    java范例开发大全源代码

     实例138 用iText生成Word文件 205  实例139 利用POI读取Word文件中的内容 208  7.3 字符流 209  实例140 按顺序创建文件 210  实例141 按顺序读取文件 211  实例142 追加文件内容 211  实例143 ...

    java范例开发大全

    实例226 携子之手 与子偕老(join) 415 实例227 线程让步(Yield) 417 实例228 会走动的钟(多线程) 419 实例229 变形金刚中的守护神(守护线程) 424 实例230 查看JVM中所有的线程的活动状况 426 实例231 模仿...

    matlab代码大全.docx

    - 其他函数如`zeros`、`ones`、`diag`、`reshape`、`transpose`、`inv`、`pinv`、`eig`等,用于创建特殊矩阵、矩阵运算、求逆、奇异值分解等。 以上只是MATLAB众多功能的一部分,MATLAB的强大还体现在其丰富的工具...

Global site tag (gtag.js) - Google Analytics