codecamp

4.流程模版与实例

       流程模版是用来将我们的业务流程系统化的工具,通过对业务流程需求的整理分析,将其抽象成我们的实际系统可以运行的流程模版,流程模版在设计时通过可视化的工具,就可以将业务流程图形化。在UFLO当中,可以利用我们提供的eclipse版的流程设计器插件实现图形化设计我们的UFLO流程模版。

      在进行UFLO流程模版设计时,选中流程模版空白处,就可以在属性窗口当中看到当前流程模版的相关属性,如下图所示。


我们先来看看“流程属性”页签中定义的属性,如下表所示。

属性名

类型

描述

流程名称

字符串

当前流程模版的名称,必填。

关键字

字符串

当前流程模版的KEY值,要求唯一,如果为空,那么在部署到服务器时系统会自动为其生成一个ID,生成的规则如下:

流程名称+当前流程模版的版本号

事件Bean

字符串

一个实现了com.bstek.uflo.process.handler.ProcessEventHandler接口并配置到spring当中的bean的id,通过右边的“选择”按钮,在输入如下格式的URL:

http://localhost:8080/uflo-test/dorado/uflo/list.handler

就可以连接远程服务器选择一个该接口实现类的bean的id。

分类ID

字符串

一个字符串,用于诸如SAAS环境下使用流程时区分不同分类(公司)的流程模版,该属性值与com.bstek.uflo.env.EnvironmentProvider接口的getCategoryId方法返回值对应,如果该方法返回值不为null,那么每个流程模版的分类ID也不应为空。

描述 字符串 对当前流程模版的相关描述信息。

描述 字符串 对当前流程模版的相关描述信息。

描述 字符串 对当前流程模版的相关描述信息。

了解完“流程属性”页签后,接下来我们就来看看“泳道配置”页签相关属性。

“泳道配置”页签中允许我们配置若干泳道,这些泳道配置好之后就可以给流程模版中所有的人工任务节点使用。泳道是一种反映商业流程中人与人之间关系的特殊图表,在UFLO当中,泳道只是一个池,在这个池中定义了流程模版中用到的任务参与者信息,一旦定义完成,当前流程模版中所有的人工任务节点都可以使用。如下图所示:

      在“泳道配置”页签中,一旦我们添加一个新的泳道或选择一个现成的泳道后,就可以配置当前泳道采用的任务处理人分配方式,这里可用的任务处理人分配方式有三种,分别是EL表达式、指定Bean及指定参与者三种类型,除没有流程发起人项外,其它与人工任务节点的任务处理人配置基本一样,具体用法请大家参考人工任务节点的任务处理人配置。

了解完流程模版后,我们来看看流程实例,流程实例源于流程模版,与流程模版的是典型的多对一关系,也就是一个流程模版可以产生多个流程实例,一个流程实例只会由一个流程模版产生。对于我们的业务流程来说,在将业务流程抽象成流程模版后,在运行由就会由我们的流程模版产生具体的流程实例,流程实例产生人工任务,人工任务再与我们的业务表单关联,从而完成业务流程的流转。所以流程实例依赖于流程模版,没有了流程模版也就谈不到流程实例,业务流程开发必须要从创建流程模版开始。



3.2.测试流程
5.节点说明
温馨提示
下载编程狮App,免费阅读超1000+编程语言教程
取消
确定
目录

关闭

MIP.setData({ 'pageTheme' : getCookie('pageTheme') || {'day':true, 'night':false}, 'pageFontSize' : getCookie('pageFontSize') || 20 }); MIP.watch('pageTheme', function(newValue){ setCookie('pageTheme', JSON.stringify(newValue)) }); MIP.watch('pageFontSize', function(newValue){ setCookie('pageFontSize', newValue) }); function setCookie(name, value){ var days = 1; var exp = new Date(); exp.setTime(exp.getTime() + days*24*60*60*1000); document.cookie = name + '=' + value + ';expires=' + exp.toUTCString(); } function getCookie(name){ var reg = new RegExp('(^| )' + name + '=([^;]*)(;|$)'); return document.cookie.match(reg) ? JSON.parse(document.cookie.match(reg)[2]) : null; }