admin 管理员组文章数量: 1086019
2024年2月19日发(作者:数据库迁移怎么操作)
StarFlow帮助文档
2011年2月
变更控制单
版本号
V0.1
作者
melin
变更日期
2011-2-11
变更原因
变更内容
目 录
1. 产品介绍
1.1 产品简介
StarFlow是具有中国特色的流程平台产品。它融入了国内电子政务与电信等行业的特殊要求,提供了灵活的工作任务分派策略、业务流程版本管理策略、丰富的流程模式、灵活的组织模型等特性,使得它能够从容应对复杂的中国特色流程模式和人工流程的处理。
StarFlow采取了多种方式以保证流程引擎高效稳定的运行,满足大型流程应用建设需求,比如良好的事件驱动式系统架构、优化的数据库、集群高速缓存等等。
1.2 业务概念
1.2.1 流程版本
流程版本是为了方便管理同一流程名称下的多个业务流程,而进行区分的标志。在StarFlow中为一个数字和点的序列,如1.1.1。在具有相同流程名称的多个版本当中,默认情况下,版本号最大的一个称为最新版本,当前发布有效的版本称为发布版本。发布版本和最新版本可以不是同一个版本。对于一个流程来说,发布版本最多有一个,最新版本有且只有一个。
1.2.2 触发事件
触发事件是流程实例运行过程中插入的一些用户自定义的动作,类似于数据库中的触发器。
触发事件包括触发时机和触发动作两部分含义:
1. 触发时机指启动、结束等可插入点;
2. 触发动作指在插入点可以插入的操作;
StarFlow包含流程级、环节级两个层次的触发事件。
1.2.3 回退
回退是流程运行过程中按照某种规则回到流程以前某种状态的操作,StarFlow支持"单步"、"按路径"、"回退到上一人工环节"等多种回退方式。
1.2.4 自由流
所谓"自由流"是指当一个环节运行完成后,将被启动、运行的后继环节不是由引擎根据流程图元间连接线上的条件判断决定的,而是由当前环节的参与者根据流程定义时的设置,在"可选择的环节范围内"动态指定,可以是一个也可以是多个。
1.2.5 多子流程
多子流程是BPS处理复杂的业务嵌套场景的一种解决方案。有两种场景需要使用多子流程
明确型:主业务流程在某个环节点需要产生多个子流程实例。
模糊型:业务需要"在部分环节间流转"的需求时。如下图:
实例B1、B2、B3和实例C1、C2、C3分别存在着依赖关系:B1->C1、B2->C2、B3->C3。此时可以把B和C组装成单独的子流程,在主流程中使用多子流程的方式调用该子流程。如下图:
1.2.6 聚合模式
聚合模式,表示一个流程中某环节得以触发的方式。它包括"全部聚合(AND)"、"单一聚合(XOR)"以及"多路聚合(OR)"三种情况:
"全部聚合"型聚合模式
表示该环节必须等到它的所有前驱环节全部完成才可以触发。
"单一聚合"型聚合模式
表示当该环节的若干前驱环节中只要有一个满足条件的环节完成,该环节即可被触发。
"多路聚合"型聚合模式
表示该环节必须等到它的所有满足条件的前驱环节全部完成才可以触发。满足条件的前驱环节包括:
它与该环节的连线是"默认值"。
它与该环节连线上的条件为"true"。
1.2.7 分支模式
分支模式,表示该环节结束后,它的后继环节的触发情况。它包括"全部分支(AND)"、"单一分支(XOR)"以及"多路分支(OR)"三种情况:
"全部分支"型分支模式
表示该环节结束后它的所有后继环节将同时被触发。
"单一分支"型分支模式
如果该环节的分支模式为"单一分支",那么引擎会根据由该环节"射出"的连接线上的条件进行判断,决定该触发哪个后继环节。具体分为下面三种情况:
满足条件的连接线所指的环节被触发;
如果有若干个连接线上的条件都满足,那么比较连接线上的优先级,优先级高的那条连接线所指的环节将被触发;
如果连接线上的条件都不满足,那么取"默认值"的那条连接线所指的环节将被触发;
"多路分支"型分支模式
如果该环节的分支模式为"多路分支",那么引擎会根据由该环节"射出"的连接线上的条件进行判断,决定触发哪个或哪些后继环节。具体分为下面二种情况:
如果连接线上取"默认值",那么由此连接线所指的后继环节会被触发;
如果连接线上的条件满足,那么由此连接线所指的后继环节会被触发;
1.2.8 人工环节
人工环节是对业务流程中需要人工干预环节的业务化包装,其通常指向一个与用户交互的表单。用户可以把人工任务组装成人工环节。一个人工任务的技术实现可以是一个JSP、一般的URL。
1.2.9 Web Service环节
Web Service环节是对业务流程中需要调用web service自动化调用的包装,简化服务的调用,服务需要的参数可以与相关数据区中的数据关联。
2. 使用指南
2.1 基础知识
2.1.1 业务概念对象
在使用StarFlow产品的开发过程中,需理解和掌握5个业务概念对象------业务流程(流程定义)、环节定义、流程实例、环节实例、工作项。在您继续学习之前,我们首先来认识一下这5个贯穿BPS始终的对象。
1. 业务流程
也称流程定义。描述一个完整的业务过程,它由若干环节组成。包括流程的基本信息、开始和结束条件、组成的环节、环节间流转的规则、需要用户执行的工作任务 (工作项)、可能调用的应用程序以及流程相关数据等信息。提交到流程定义库后会包含流程定义ID(流程定义的唯一标识)、流程定义名称、版本号、
流程定义 描述以及提交时间等描述。
2. 环节定义
包含在流程定义之中,代表了一个相对独立的逻辑工作单元。一个环节代表一个需要由相关资源处理,或者由计算机处理的任务。其中定义了该环节的基本信息、执行该环节的参与者、时间限制、工作项信息、触发事件、启动策略等信息。
3. 流程实例
当流程定义提交、发布到服务器以后,就可以启动该流程,启动时会创建流程定义的一个实例,称为流程实例。同一个流程定义可以有多个流程实例。每一个流程实 例会被保存在流程实例库(ProcessInstance)中,包括流程实例ID(唯一标识)、流程实例名称、流程定义ID、流程实例的状态、该实例的启动 者、启动时间等信息。
例如:当流程定义"请假流程"提交、发布后。张三启动该流程,名为"张三的请假流程"。那么"张三的请假流程"即为流程定义"请假流程"的一个流程实例。 同理,如果李四也想请假,启动该流程,名为"李四的请假流程"。那么流程定义"请假流程"同时包含"张三的请假流程"和"李四的请假流程"两个流程实例。
4. 环节实例
流程实例中的每个环节称为环节实例。每一个环节实例会被保存在环节实例库(WFActivityInst)中,包括环节实例ID(唯一标识)、环节实例的状态、所属的环节定义ID以及流程实例ID、时间限制、是否超时、创建时间等信息。
5. 工作项
表示流程实例在流转过程中为完成某个环节实例需要参与者做的工作。一个环节实例可以对应一个或多个工作项。每个工作项会被保存在工作项库(WorkItem)中,包括工作项ID(唯一标识)、参与者ID、工作项的状态、所属的环节实例ID,流程实例ID等信息。
2.1.2 各对象间的主要关系
开发阶段的数据对象包括流程定义和环节定义;在运行阶段的数据对象包括流程实例、环节实例和工作项。
一个流程定义由多个环节定义组成;
一个流程定义可以创建多个流程实例;
一个流程实例包含多个环节实例,每个环节实例可以包含一个或多个工作项。
在一些特定的情况下(如一个环节要循环执行多次),对应一个环节定义会存在多个环节实例。关系如下图所示:
2.1.3 流程实例运行的基本过程
BPS中,在一个流程实例启动以后,流程的各个环节实例是按照以下规则进行推进的:
1. 开始环节总是第一个被实例化并启动的环节,开始环节存在一个瞬间状态,启动以后立即结束;
2. 开始环节结束以后,会根据开始环节的分支模式去实例化后面的迁移线,并
触发相应的后继环节;
3. 如果被触发的后继环节满足启动条件,则会启动;
4. 对于每一个被启动的后继环节,结束以后,都会重复类似开始环节所完成的动作,推动后续环节的运行;
5. 当推进过程遇到结束环节的时候,流程实例结束;
6. 流程实例结束时,会把流程中所有的还未完成工作项和环节实例全部终止;
下图代表了一个很简单的流程的执行过程,数字的递增顺序代表了运行的过程。
2.1.4 相关数据区
流程相关数据(Process Relevant Data)主要指与流程实例运行控制相关的数据。流程管理系统通过流程相关数据来确定流程实例状态转移条件,并选择下一个将执行的环节,这些数据可以被流程应用程序访问并修改。由于流程相关数据存放在ThreadLocal中,一旦线程执行结束,流程相关数据就会丢失。
2.2 定义流程
2.2.1 创建流程
StarFlow提供基于Flex版本的流程设计器,使用浏览器打开bin-release目录下的文件,新建流程定义。流程设计器主界面如下图所示:
由于流程有且仅有一个开始和结束环节,流程定制区域默认包含开始和结束环节。
2.2.2 添加环节
打开流程设计器,环节图元面板中罗列了可以在流程中添加的环节,包括:
"自动环节"、"人工环节"、"子流程"、"WebService环节"。一般我们要在流程中添加一个环节可按如下方式操作:在环节图元面板中点击选中需要添加的环节图元,拖动到流程定制区域中释放鼠标,图元就自动放置到流程定制区域中了。如下图所示。
2.2.3 添加连接线
添加一条连接线可以分为如下步骤:
1:点击流程设计器左上角连线图元,图元状态为连线状态时连线操作
2:将鼠标移入流程定制区域,单击连接线的起始节点和终止节点,完成一次连线操作
,可以进行
2.2.4 设置流程属性
2.2.4.1 设置流程基本属性
点击流程设计器左上角的属性按钮,弹出流程属性对话框,如下图:
参数名称
参数意义
流程名称
流程中文名称
版本号
流程时限
描述
创建流程的名称,推荐使用英文字符,不可编辑。
流程流程的中文名称,不可编辑
流程版本号,点击新版本号,版本号往上增加
流程运行实现,单位分钟
流程描述信息
2.2.4.2 设置流程流程启动者
设置流程启动者是指配置哪些人有权限去启动一个流程,参与者是从组织机构模型中获取的。打开流程属性对话框后,单击"流程启动者"Tab页,即显示"流程启动者"设置页面,如下图所示。
如果该业务流程任意人员都可以启动,则选择"任意人员启动";如果需要对启动该业务流程的人员进行限制,则可以选择"从参与者列表获得"。可对参与者进行增加,删除等操作。在增加流程启动者时,需要从组织机构中获取,因此必须保证已经配置好组织机构。
2.2.5 设置环节属性
2.2.5.1 设置开始环节属性
在开始图元上点击右键菜单,选择环节属性菜单,打开环节属性对话框,显
示开始环节基本属性如下图所示:
参数名称
参数意义
环节ID
环节名称
分支模式
描述
环节定义ID,设计器自动生成唯一ID。
环节定义名称,设计器默认包含值,用户可以重新编辑,不可为空
开始环节分支模式,默认值单一分支
开始环节信息描述
2.2.5.2 设置人工环节属性
1. 设置基本属性
在人工环节图元上点击右键菜单,选择环节属性菜单,打开环节属性对话框,选择基本属性tab页。如下图所示。
参数名称
参数意义
环节ID
环节名称
分支模式
聚合模式
环节时限
描述
环节定义ID,设计器自动生成唯一ID。
环节定义名称,设计器默认包含值,用户可以重新编辑,不可为空
环节分支模式,默认值单一分支
环节聚合模式,默认值单一聚合
环节运行时限,时限单位:分钟
开始环节信息描述
2. 设置环节操作
在人工环节图元上点击右键菜单,选择环节属性菜单,打开环节属性对话框,选择环节操作tab页,如下图所示。
人工环节关联一个页面和环节操作,需要在页面管理和操作管理完成相应配置操作。
3. 设置参与者
在人工环节图元上点击右键菜单,选择环节属性菜单,打开环节属性对话框,选择参与者tab页,如下图所示。
获取参与者有以下五种方式:
流程启动者
从参与者列表获得
环节执行者
相关数据
规则逻辑
1) 流程启动者
该环节的参与者即为该流程的启动者。如果流程启动者是外部系统,在组织模型中找不到,那么这个环节被启动后会报错。人工环节默认设置的参与者是流程启动者。
2) 从参与者列表获得
选择组织机构中的一个或者多个参与者作为人工环节的参与者。点击添加按钮,会弹出"选择参与者资源"对话框,如下图所示
双节选择参与者,即可添加到列表中。
3) 环节执行者
选择环节执行者作为环节的参与者只能选择人工环节,也就是被选中的人工环节的执行者将作为本环节的参与者,如果被选中的环节还没有被执行完成,本环节就被启动,则会报错,因为被选中环节没有执行者。
选择该流程定义中的某一个人工环节的参与者作为本环节的参与者,如下图所示。
4) 相关数据
环节的参与者如果设置为相关数据,是指环节的参与者会从相关数据中所定义的变量中获取。调用tActParticipants(List
participants)方法
5) 逻辑规则
环节的参与者由调用的逻辑的返回值来决定。规则逻辑值为Spring Bean 的id值。该bean需要实现cipantService接口,接口返回值为环节参与者。
4. 设置多工作项
在人工环节图元上点击右键菜单,选择环节属性菜单,打开环节属性对话框,选择多工作项tab页,如下图所示。启动多工作项设置"复选框默认是没有选中的,只有选中它,才可以设置多工作项的分配策略和完成规则。
多工作项必须和参与者结合起来使用,默认情况下一个人工环节的环节实例会产生一个工作项。如果启用多工作项设置,则流程引擎会为该环节实例创建多个工作项。用户可以设置多工作项的个数、分配方式及完成规则。下面将对"多工作项分配策略"和"完成规则设定"这两项设置分别加以说明。
1) 多工作项分配策略
指引擎根据所设置的人工环节的参与者来分配工作项的策略。共有两种策略,只能选取其中一种。
按参与者设置个数领取工作项
根据该环节的参与者个数产生相应数量的工作项。如果参与者设置了多个,比如设置了一个人员a和设置了一个机构a作为该环节的参与者,那么参与者就是2个,如果选择了按照参与者个数领取工作项,则该环节被启动后会产生两个工作项,一个分配给人员a,另外一个分配给机构a。
按操作员个数分配工作项
根据参与者中的人员个数产生工作项,比如设置了一个人员a以及一个机构a作为该环节的参与者,该机构a下有5个人员并且这个5个人中不包含人员a,那么当该环节被启动时会产生6个工作项,这6个人都可以去领取任务。但是如果机构a下面包含人员a,则只会产生5个工作项。
顺序执行工作项
当开启顺序执行工作项后,流程引擎每次只会创建一个工作项,等前一个工作项完成后,才会创建下一个工作项;在未开启顺序执行工作项的情况下,一次性创建所有的工作项。
2) 完成规则设定
指在同一个人工环节实例所产生的多个工作项中,设置需要完成多少个工作项时该环节实例才完成的规则。共有三种规则,只能选取其中一种。
全部完成
当一个人工环节实例所产生的所有工作项都完成时,该环节实例才完成。
完成个数
当一个人工环节实例所产生的所有工作项中,有设定数目的工作项完成时,该环节实例才完成。
完成百分比
当一个人工环节实例所产生的所有工作项中,有设定比例的工作项完成时,该环节实例才完成。
未完成工作项自动终止
这是针对第2和第3两种完成规则的一项配置,单选"是"或"否"。
是:当环节实例结束时,流程引擎对于剩余未完成的工作项做"停止"处理。
否:当环节实例结束时,剩余未完成的工作项仍然处于"运行"状态。此时无论是否处理这些工作项,对运行的流程实例都不会造成任何影响,只有当流程实例结束时,引擎才会将这些工作项终止 。
5. 设置自由流
在人工环节图元上点击右键菜单,选择环节属性菜单,打开环节属性对话框,选择自由流tab下图所示。
自由流是指当一个环节完成后,不按照流程定义中的执行顺序启动后面的环节,而是根据定义为自由流的环节中定义的环节范围内指定任意的一个或多个环节执行。
自由范围设置策略
指定该环节在自由流转时的后继环节范围的策略。共有三种策略,只能选取其中的一种。现以如下的一个流程图示例来说明这三种配置的区别
如在C上设置了"在该流程范围内任意自由"即表示在流程运行到C时,执行
者可以从流程中选择除开始和C之外的所有环节中的一个或若干个作为环节C的后继环节。具体包括A、B、D、E、F,以及结束。
在指定环节列表范围内自由
例如在C上设置了"在指定环节列表范围内自由",点击增加按钮即可以选择C的后继环节,可供选择的范围是除开始和C之外的所有环节,如下图所示:
假如选择了A、B、D这3个环节,即表明流程运行到C时,执行者可以从A、B、D三个环节中选定一个或若干作为C的后继环节。
在后继环节范围内自由
例如在C上设置了"在后继环节范围内自由",即表明流程运行到C时,执行者可以从D、E、F和结束这4个环节中选定一个或若干作为C的后继环节。
自由流设置规则
自由流设置规则中有一个"流向的目标环节仅限于人工环节"复选框,如果选中,表明后继环节自由范围只能是人工环节,否则就包括人工环节、自动环节以及结束环节。
若在某个人工环节上设置了"自由流",并在运行时为其指定了后继环节,那么引擎将不再按分支模式及连接线条件来决定此环节的后继环节;
若在某个人工环节上设置了"自由流",但在运行时该环节的执行者并没有为
其指定后继环节,那么引擎仍然按分支模式及连线上的条件决定此环节的后继环节。
2.2.5.3 设置自动环节属性
1. 设置基本属性
在自动环节图元上点击右键菜单,选择环节属性菜单,打开环节属性对话框,选择基本属性tab页。如下图所示。
参数名称
参数意义
环节ID
环节名称
分支模式
聚合模式
描述
环节定义ID,设计器自动生成唯一ID。
环节定义名称,设计器默认包含值,用户可以重新编辑,不可为空
环节分支模式,默认值单一分支
环节聚合模式,默认值单一聚合
开始环节信息描述
2. 设置基本属性
在自动环节图元上点击右键菜单,选择环节属性菜单,打开环节属性对话框,选择基本属性tab页。如下图所示。
执行逻辑:Spring Bean id的名称,该bean需要实现接口
ppAction,默认调用execute方法,为避免过多的执行逻辑创建类,也可以在实现类中添加方法,方法参数与execute方法参数相同,这时执行逻辑值格式为:beanName#methodName
结束方式:自动环节运行后,自动启动结束,启动下一个环节,如果选择人工,需要人工手
动结束。默认值为自动。
调用方式:值执行逻辑的调用方式,同步为环节执行必须等待执行逻辑执行结束,才可以往
下运行,与流程运行在同一个线程中,异步为执行逻辑提交到线程池中执行。
事务策略:Join执行逻辑事务与运行环节线程属于同一个事物,Suspend执行逻辑执行时创
建一个新事物
异常处理策略:在执行逻辑运行的过程中发生异常时,所采取的一种处理策略。共分5
种策略,根据业务需要选择其中的一种。
回滚异常
自动活动配置的逻辑出错直接回滚异常,回滚到上个事务分割点。
忽略异常
自动活动配置的逻辑出错忽略异常,自动活动完成,继续执行后继动作。默认配置。
进入异常状态,等待人工干预
自动活动出错进入异常状态不继续流转。
自动执行单步回退,活动终止
自动活动出错,直接执行单步回退,回退到上个节点,当前自动活动终止。
自动执行规则逻辑
自动活动出错后,自动执行设定的一个"规则逻辑",当规则逻辑执行完后,活动结束,继续执行后继活动。规则逻辑值Spring Bean id,bean需要实现接口
cationExecptionAction
2.2.5.4 设置子流程属性
1. 设置基本属性
在子流程图元上点击右键菜单,选择环节属性菜单,打开环节属性对话框,选择基本属性tab页。如下图所示。
参数名称
参数意义
环节ID
环节名称
分支模式
聚合模式
描述
环节定义ID,设计器自动生成唯一ID。
环节定义名称,设计器默认包含值,用户可以重新编辑,不可为空
环节分支模式,默认值单一分支
环节聚合模式,默认值单一聚合
开始环节信息描述
2. 高级属性
在子流程图元上点击右键菜单,选择环节属性菜单,打开环节属性对话框,选择高级属性tab页。如下图所示。
参数名称
调用方式
参数意义
子流程的调用方式分为"同步"和"异步"方式,默认为"同步",根据实际业务需要来选择。它们各自的含义如下:
同步:以"同步"的方式调用子流程,等待子流程运行完成后,该子流程活动才结束;
异步:以"异步"的方式调用子流程,当前活动在子流程启动后就结束,而无需等待子流程运行完成。
子流程
通过点击<选择>按钮所弹出的对话框来设置子流程。
2.2.5.5 设置WebService环节属性
1. 设置基本属性
在WebService环节图元上点击右键菜单,选择环节属性菜单,打开环节属性对话框,选择基本属性tab页。如下图所示。
参数名称
参数意义
环节ID
环节名称
分支模式
聚合模式
描述
环节定义ID,设计器自动生成唯一ID。
环节定义名称,设计器默认包含值,用户可以重新编辑,不可为空
环节分支模式,默认值单一分支
环节聚合模式,默认值单一聚合
开始环节信息描述
2.2.5.6 设置结束环节属性
在结束图元上点击右键菜单,选择环节属性菜单,打开环节属性对话框,显示结束环节基本属性如下图所示
参数名称
参数意义
环节ID
环节名称
环节定义ID,设计器自动生成唯一ID。
环节定义名称,设计器默认包含值,用户可以重新编辑,不可为空
聚合模式
描述
开始环节聚合模式,默认值单一聚合
开始环节信息描述
2.2.6 设置连接线属性
双击流程编辑器中的一根连接线,弹出连接线的属性窗口,如下图所示。
参数名称
参数意义
显示名称
优先级
连接线在流程图中显示的名称。
该连接线被实例化的优先级别,从高到低依次分为高、次高、中、次中、低、次低6个级别。当环节的分支模式为"单一分支",而该环节引出的若干分支的判断条件都满足的情况下,系统将以连接线的优先级级别的高低来判断该执行哪个环节。
选中此项即表明该连接线是默认连接线,表达式不可编辑。一个环节后如果引出多条连接线,则只能有一条为默认,其它均是有判断条件的连接线。非默认连接线用"*"标注。当所有的判断条件均不满足时,业务流程会走默认连接线。
利用一些常用的比较操作来进行条件判断的表达式。左值支持xpath,相应格式值为:xp:变量:/Users/User/name
复杂表达式使用aviator 表达式解析殷勤boolean表达式,复杂表达式中可以使用相关数据中的任何变量。
/p/aviator/
连线信息的描述
默认连线
简单表达式
复杂表达式
描述
2.2.7 流程/环节通用属性
1. 设置触发事件
触发事件分为流程的触发事件和活动的触发事件,流程和活动的触发事件除了触发时机不同之外,其余设置都是一样的。设置界面如下图:
流程的触发事件
流程触发事件表示按照流程定义中的设置,流程实例在运行到某个阶段所需要流程引擎做某种类型的动作。"某个阶段"即为事件的"触发时机","某种类型的动作"即为"事件动作"。事件触发的顺序按照事件设置时候的顺序执行。
触发时机
包括流程级别的触发时机,如下图下拉框所示:
流程启动前:表示指定的事件在流程创建后启动前触发,此时流程实例处于"待启动"状态;
流程启动后:表示指定的事件在流程启动后触发,即流程状态设置为启动后
进行事件的触发;
流程完成前:表示指定的事件在流程实例完成前触发,即流程实例状态在"完成"之前进行事件的触发;
流程完成后:表示指定的事件在流程实例完成后触发,即流程实例状态在"完成"之后进行事件的触发;
事件动作
事件触发时执行的动作。值为Spring Bean id,bean实现接口为:
ssTriggerEvent,接口包含四个方法,每一个触发时机对应一个方法。
调用方式
同步:业务流程引擎等待触发事件调用的操作执行完之后再运行。
异步:业务流程引擎无需等待触发事件调用的操作执行完就可以直接运行。
事务策略
业务流程引擎触发事件动作时有两种事务策略,Suspend和Join。
Suspend:被触发的事件与业务流程引擎是分开的事务。事务由触发事件动作单独控制。
Join:被触发的事件与业务流程引擎是一个事务,事务由业务流程引擎控制。
异常处理
忽略异常:当事件动作执行过程中产生异常时,业务流程引擎继续执行后面的操作,不把事务回滚,异常在日志中进行记录。
回滚异常:当事件动作执行过程中产生异常时,业务流程引擎回滚事务,异常在日志中进行记录。
描述
对该事件动作的描述,为中/英文字符串,可以为空。
环节的触发事件
环节触发事件表示按照流程定义的设置在环节实例运行到某个阶段所需要流程引擎做某种类型的动作。"某个阶段"即为事件的"触发时机","某种类型的动
作"即为"事件动作"。bean实现接口为:
ityTriggerEvent,接口包含四个方法,每一个触发时机对应一个方法。
除了"触发时机"外,环节触发事件中的"事件动作"、"调用方式"、"事务策略",以及"异常处理"都和流程的触发事件中的含义、操作一致,此处不再赘述,如需查看请参考流程的触发事件中的相关描述。
环节启动前:表示指定的事件在环节实例启动前触发;
环节启动后:表示指定的事件在环节实例启动后触发;
环节完成前:表示指定的事件在环节实例完成前触发;
环节完成后:表示指定的事件在环节实例完成后触发;
2. 设置启动策略
在人工环节、自动环节、子流程环节、结束环节的属性设置中均有"启动策略"Tab页,它们在意义和设置上是一致的,现以人工环节的"启动策略"设置为例进行说明。在人工环节的属性对话框中,点击"启动策略"Tab页,即显示如下图所示的设置界面。
启动策略表示在流程实例运行过程中,当流程实例流转至此活动时,该活动将以何种方式启动。
激活规则
直接运行:只要当前活动的前驱活动执行完,并且当前活动满足启动条
件,即可转入"运行"状态。这是"启动策略"的默认配置。
待激活:当前活动的前驱活动执行完后不管当前活动是否满足启动条件,都将转入"待激活"状态。直到外界调用ityInstService#IActivityInstService方法才能激活该环节。
由规则逻辑返回值确定:在当前活动满足启动条件的前提下,由一个逻辑的返回值来确定是否启动该环节,值为Spring Bean id, bean需要实现接口ateRuleAction
重新启动规则
针对"人工环节"除了可以设置启动规则以外,还可设置"重新启动规则",是指当环节被重新启动时会根据规则进行的一些操作。
最初参与者:人工环节实例发生"重启"时,该活动实例所对应的工作项以它首次被启动时的参与者作为新的参与者。
最终参与者:人工环节实例发生"重启"时,该活动实例所对应的工作项以最近一次执行该环节的执行者作为本次重启的参与者。
3. 设置扩展属性
流程设计器为用户提供了编辑流程和环节的扩展属性功能,编辑流程和环节时可以根据需要添加用户自定义的扩展属性,扩展属性以键值对方式存在。编辑页面如下图
3. 开发参考
3.1 部署指南
3.1.1 部署环境要求
JDK:要求5.0或以上版本
服务器:可以部署在任何服务器
3.1.2 Jar部署
直接把(x.x.x代表版本号)添加到项目依赖中,同时把StarFlow依赖的相关jar也添加进来。依赖jar存放在StarFlow lib目录中。如果不使用WebService环节,lib目录下fm和ws两个子目录,包含的jar可以不添加。
3.1.3 配置文件设置
StarFlow依赖Spring,有一个spring配置文件resource/,在项目整合时,需要把配置文件中bean添加到项目的配置文件中。
resource/ties存放StarFlow参数,如果修改参数值,需要把修改后的参数值放入项目classpath目录中。ties包含的参数设置为:
#主键缓存数目
= 10
#使用webService环节,需要设置为true
vice = true
#流程殷勤是否在事务环境下运行true
ction =true
3.2 典型场景开发指南
3.2.1 请假流程实例
本实例是在StarFrame集成环境下的演示,模拟一个公司的请假流程。设计流程图如下:
流程属性设置
人工环节属性只设置参与者值,其它属性只为默认。
环节
部门经理
总经理
申请人确认
参与者
用户:melin
用户:admin
流程启动者
部门经理有两条分支线,只有部门经理同意,且请假超过三天,流程才流转到总经理环节。到总经理的分支线条件表达式为:days>3 && status=="Y"。到申请人确认的分支线为默认分支线。
申告页面
流程发起需要有一个表单页面,填写相关业务数据。根据业务数据值查找流程,流程启动成功后,获取流程实例ID,存入业务数据表中。申告页面如下图:
流程启动执行代码,这里为了演示,启动流程固定为:flow.51
IProcessInstanceService procInstService =
tance().getProcessInstanceService();
String userId = inUserId();
//创建并启动流程
ProcessInstance processInstance =
AndStartProcess("flow.51", userId);
cessInstId(cessInstId());
(leave);
("请假流程【{}】创建成功!", e());
部门经理
流程启动成功后,流转到部门经理环节。使用账号melin登入系统。在我的任务查看到请假流程。工单名称链接关联环节表单,这里设置了固定页面,也可以通过页面模板管理设置。当前环节链接可以查看流程运行图。
点击提交按钮,跟新业务数据,并调用方法finishWorkItem。
IWorkItemService workItemService =
tance().getWorkItemService();
(leave);
//设置请假天数到相关数据区,流程以此来判断走那个分支
Map
("days", s());
("status", tus());
ressConditions(conditions);
String userId = inUserId();
WorkItem(workItemId, userId);
总经理
部门经理环节结束后,请假流程流转到总经理环节,执行过程与部门经理环节相同。此时流程监控图如下:
3.3 引擎对外接口
为了增强流程引擎扩展性,流程引擎对外提供一些接口
接口
接口描述
IActivateRuleAction
环节启动策略,由规则逻辑确定。
@param processInstance 流程实例
@param activityInst 环节实例
@return Boolean 是否直接运行
IActivityTriggerEvent
环节触发事件接口
@param exception
@param processInstance 流程实例
@param activityInst 环节实例
IApplicationExecptionAction
环节异常策略,执行规则逻辑
IParticipantService
从规则逻辑中获取参与者
@param processInstance 流程实例
@return List
IProcessTriggerEvent
IToolAppAction
流程触发事件接口
自动环节执行动作,需要实现此接口
@param processInstance 流程实例
@param activityInst 环节实例
@return Object
IWFOMService
如果多工作项策略选择按照操作员个数完成工作项,需要提供该接口的实现
@param type 结构或角色(organization && role)
@param id 机构和角色的id
@return List
3.4 附录
版权声明:本文标题:StarFlow帮助文档 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://roclinux.cn/p/1708357169a521226.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论