七、业务流程动作
由于业务流程运行企业工作流中,企业工作流与外界交互的唯一手段就是通过业务动作。在业务表单里查询和提交业务数据是通过业务动作实现的,同样的,流程的各种动作也是基于业务动作来实现的。
业务流程的各种操作,一般都由讯问和实际做两大类业务动作构成,只有个别操作没有提供关于讯问的业务动作。所有讯问的业务动作都只是基于内存的推导和运算,把相关需要计算的规则,环节和执行者都计算完毕后生成ProcessControl,而不留下任何痕迹。实际做的业务动作都是根据传入的ProcessControl完成实际的操作,并且把结果存入数据库。
业务流程默认提供的业务动作都是系统级别的,不需要在Activity里主动引用就可以直接调用的。基本所有的业务流程的业务动作都是两个动作一起组合起来实现一个流程操作,例如流转操作是由 advanceProcessQueryAction动作先查出ProcessControl,然后advanceProcessAction动作根据ProcessControl实际流转。
业务流程所有业务动作都是基于待办任务公布的,不但业务流程本身可以用,协同任务也可以用。也就是说只要是待办任务的操作,基本都可以调用业务流程的业务动作。
1 启动
启动的本质是根据业务流程定义产生新的业务流程实例,并且为业务流程的入口活动环节生成待办任务。需要注意的是,启动不一定只能给入口活动环节生成待办任务,只是在界面模型层里系统默认提供的流程启动函数是那样实现的,其实启动时可以给业务流程中任何活动环节生成待办任务,也就是说业务流程未必一定要从入口启动,还可以从中间某个环节启动。
启动操作由startProcessQueryAction和startProcessAction两个业务动作组成。
*startProcessQueryAction
启动讯问,在实际启动前讯问有哪些入口环节,每个入口环节可以选择哪些执行者等信息。startProcessQueryAction不会实际让业务流程启动,它只是在内存里推导运行了整个启动的过程,然后把运行结果以ProcessControl的形式返回而不会留下任何痕迹。基于ProcessControl可以弹对话框选环节和选执行者,还可以在代码中修改ProcessControl实现代码控制启动。通过修改ProcessControl可以实现任意复杂的启动方式,从任意环节和任意人启动流程。
在调用startProcessQueryAction时首先计算的是启动规则,然后从开始环节往后找到入口环节,计算入口环节的执行规则后生成ProcessControl,所以在开始环节和入口环节中间的任何其他类型的环节和规则都将会被计算。
*startProcessAction
实际启动,调用这个业务动作实际生成业务流程实例和指定入口环节的待办任务,并且存入数据库。只是在界面模型层里系统默认提供的流程启动函数其实就是直接调用了startProcessAction。通过传入ProcessControl参数可以实现对启动的控制,而当传入的ProcessControl值为NULL时它在BusinessServer内部首先调用了startProcessQueryAction获取到ProcessControl的值后再进行实际启动的。
其实startProcessAction本身不会产生任何计算规则和计算环节的行为,它仅仅就是根据ProcessControl实现启动。
界面模型层提供的工作流组件提供的有启动函数start,直接调用startProcessAction动作,且ProcessControl参数值为NULL。
2 流转
流转的本质首先是把当前待办任务的状态设置为已结束(tsFinished),然后为下一步活动环节生成新的待办任务,当前待办任务和新待办任务间使用前后关系关联。
流转操作由advanceProcessQueryAction和advanceProcessAction两个业务动作组成。
*advanceProcessQueryAction
流转讯问,在实际流转前讯问当前活动环节的下一步有多少个活动环节,每个活动环节有多少执行者。advanceProcessQueryAction实际上不会为下一步环节生成待办任务,它只是把流转的运行过程在内存里推导运行了一遍,然后把运行结果以ProcessControl形式返回,不会留下任何痕迹。基于ProcessControl可以弹出流转话框选择下一步环节和选择执行者,还可以在代码中修改ProcessControl实现代码控制流转。通过操作ProcessControl可以实现任意复杂的流转,像跳转和自由流就是通过操作ProcessControl来实现的。
在调用advanceProcessQueryAction时首先计算当前活动环节的流转规则,然后基于当前活动环节往后找到下一步活动环节,计算这些活动环节的执行规则后生成ProcessControl。所以在当前活动环节和下一步活动环节之间的所有环节和规则都将被计算。
*advanceProcessAction
实际流转,调用此业务动作把当前待办任务结束后生成下一步活动环节的待办任务,并且存入数据库。通过传入ProcessControl参数可以实现对流转的自定义,而当传入的ProcessControl为NULL时它在BusinessServer内部首先调用了advanceProcessQueryAction获取到ProcessControl的值后再进行实际流转的。
其实advanceProcessAction本身不会产生任何计算规则和计算环节的行为,它仅仅就是根据ProcessControl实现流转。
执行完毕advanceProcessAction以后,如果当前业务流程实例的所有待办任务都已处理完成,则自动触发finishProcessAction把当前业务流程实例的状态也设置为已结束(tesFinished)。
界面模型层的工作流wf组件上有流转操作的函数,它们分别是advanceQuery/advanceQueryExt和advance/advanceExt。advanceQuery/advanceQueryExt首先调用advanceProcessQueryAction动作获取ProcessControl,判断是否需要弹出流转对话框,如果需要则基于ProcessControl构造流转对话框,并且把流转对话框的选择结果再存入ProcessControl,最后传入ProcessControl调用advanceProcessAction动作。advance/advanceExt则直接调用advanceProcessAction动作,ProcessControl参数值传入为NULL。由于advance/advanceExt减少了ProcessControl的传递,所以速度上会比advanceQuery/advanceQueryExt要高一些。
3 回退
回退的本质首先是把当前待办任务状态设置为已退回(tesReturned),然后给曾经经过的指定的活动环节生成新的待办任务。当前待办任务和新待办任务间使用前后关系关联。
回退操作由backProcessQueryAction和backProcessAction两个业务动作组成。
*backProcessQueryAction
回退讯问,在实际回退前讯问当前活动环节能回退到哪些活动环节,每个活动环节有多少执行者。backProcessQueryAction只是把回退的运行过程在内存里推导运行了一遍,然后把运行结果以ProcessControl形式返回,不会留下任何痕迹。基于ProcessControl可以弹回退话框选择回退的活动环节和选择执行者,还可以在代码中修改ProcessControl实现代码控制回退。通过操作ProcessControl可以实现任意复杂的回退,甚至是业务流程定义和规则中本来就不支持的。
在调用backProcessQueryAction时首先计算当前活动环节的回退规则,然后再根据回退规则找出能退到哪些活动环节去,在获取到这些活动环节曾经的待办任务后生成ProcessControl。所以在回退时只会计算当前环节的回退规则,而不会产生其他任何计算行为。
*backProcessAction
实际流转,调用此业务动作把当前待办任务结束后生成目标活动环节的待办任务,并且存入数据库。通过传入ProcessControl参数可以实现对回退的控制,而当传入的ProcessControl为NULL时它的代码实现其实是首先调用了backProcessQueryAction获取到ProcessControl的值后再进行实际回退。
其实backProcessAction本身不会产生任何计算规则和计算环节的行为,它仅仅就是根据ProcessControl实现回退。
界面模型层的工作流wf组件上有两个关于回退操作的函数,它们分别是backQuery/backQueryExt和back/backExt。backQuery/backQueryExt首先调用backProcessQueryAction动作获取ProcessControl,判断是否需要弹出流转对话框,如果需要则基于ProcessControl构造流转对话框,并且把流转对话框的选择结果再存入ProcessControl,最后传入ProcessControl调用backProcessAction动作。back/backExt则直接调用backProcessAction动作,ProcessControl参数值传入为NULL。由于back/backExt减少了ProcessControl的传递,所以速度上会比backQuery/backQueryExt要高一些。
4 转发
转发的本质首先是把当前待办任务的状态设置为已转发(tesTransmited),然后基于当前活动环节给其他执行者生成新的待办任务。当前待办任务和新待办任务采用前后关系关联。
转发操作由transferTaskQueryAction和transferTaskAction两个业务动作组成。
*transferTaskQueryAction
转发讯问,在实际转发前讯问当前活动环节能转发给哪些执行者。transferTaskQueryAction只是把转发的运行过程在内存里推导运行了一遍,然后把运行结果以ProcessControl形式返回。基于ProcessControl可以弹转发话框选择执行者,还可以在代码中修改ProcessControl实现代码控制转发。通过操作ProcessControl可以实现任意复杂的转发,甚至是业务流程定义和规则中本来就不支持的。
在调用transferTaskQueryAction时首先计算当前活动环节的转发规则,然后根据转发规则后生成ProcessControl。所以在转发时只会计算当前环节的转发规则,而不会产生其他任何计算行为。
*transferTaskAction
实际流转,调用此业务动作把当前待办任务结束后给选择的执行者生成新待办任务,并且存入数据库。通过传入ProcessControl参数可以实现对转发的控制,而当传入的ProcessControl为NULL时它的代码实现其实是首先调用了transferTaskQueryAction获取到ProcessControl的值后再进行实际转发。
其实transferTaskAction本身不会产生任何计算规则和计算环节的行为,它仅仅就是根据ProcessControl实现转发。
界面模型层的工作流wf组件上有两个关于转发操作的函数,它们分别是transferQuery/transferQueryExt和transfer/transferExt。transferQuery/transferQueryExt首先调用transferTaskQueryAction动作获取ProcessControl,判断是否需要弹出流转对话框,如果需要则基于ProcessControl构造流转对话框,并且把流转对话框的选择结果再存入ProcessControl,最后传入ProcessControl调用transferTaskAction动作。transfer/transferExt则直接调用transferTaskAction动作,ProcessControl参数值传入为NULL。由于transfer/transferExt减少了ProcessControl的传递,所以速度上会比transferQuery/transferQueryExt要高一些。
5 终止
终止的本质就是把当前业务流程实例和其下所有待办任务的状态都设置为已终止(tesAborted)。
终止操作由abortProcessQueryAction和abortProcessAction两个业务动作组成。
*abortProcessQueryAction
终止讯问,在实际终止前讯问需要通知给哪些相关人。abortProcessQueryAction根据在业务过程(Process)上设置的通知规则生成ProcessControl。基于ProcessControl可以弹出通知对话框选择执行者,还可以在代码中修改ProcessControl实现代码控制终止时通知。
在调用abortProcessAction时首先计算业务过程(Process)上的通知规则,然后根据通知规则后生成ProcessControl。所以在终止时只会计算当前业务过程的通知规则,而不会产生其他任何计算行为。
*abortProcessAction
实际终止,调用此业务动作把更新当前业务流程实例和其所有待办任务的状态为已终止(tesAborted),并且存入数据库。通过传入ProcessControl参数可以实现对终止时通知的控制,而当传入的ProcessControl为NULL时abortProcessAction的代码实现其实是首先调用了abortProcessQueryAction获取到ProcessControl的值后再进行实际终止。
其实abortProcessAction本身不会产生任何计算规则和计算环节的行为,它仅仅就是根据ProcessControl实现终止。
界面模型层的工作流wf组件上有两个关于终止操作的函数,它们分别是abortQuery/abortQueryExt和abort/abortExt。abortQuery/abortQueryExt首先调用abortProcessQueryAction动作获取ProcessControl,判断是否需要弹出流转对话框,如果需要则基于ProcessControl构造流转对话框,并且把流转对话框的选择结果再存入ProcessControl,最后传入ProcessControl调用abortProcessAction动作。abort/abortExt则直接调用abortProcessAction动作,ProcessControl参数值传入为NULL。由于abort/abortExt减少了ProcessControl的传递,所以速度上会比abortQuery/abortQueryExt要高一些。
6 暂停
暂停的本质就是把当前业务流程实例和其所有待办任务的状态都设置为已暂停(tesPaused)。暂停和终止在代码实现上是没什么区别的,从业务上说两者区别在于暂停可以再次被恢复,而终止则指的是以后都不再处理了。
暂停操作由suspendProcessQueryAction和suspendProcessAction两个业务动作组成。
*suspendProcessQueryAction
暂停讯问,在实际暂停前讯问需要通知给哪些相关人。suspendProcessQueryAction根据在业务过程(Process)上设置的通知规则生成ProcessControl。基于ProcessControl可以弹出通知对话框选择执行者,还可以在代码中修改ProcessControl实现代码控制暂停时通知。
在调用suspendProcessQueryAction时首先计算业务过程(Process)上的通知规则,然后根据通知规则后生成ProcessControl。所以在终止时只会计算当前业务过程的通知规则,而不会产生其他任何计算行为。
*suspendProcessAction
实际暂停,调用此业务动作把更新当前业务流程实例和其所有待办任务的状态为已暂停(tesPaushed),并且存入数据库。通过传入ProcessControl参数可以实现对终止时通知的控制,而当传入的ProcessControl为NULL时suspendProcessAction的代码实现其实是首先调用了suspendProcessQueryAction获取到ProcessControl的值后再进行实际终止。
其实suspendProcessAction本身不会产生任何计算规则和计算环节的行为,它仅仅就是根据ProcessControl实现终止。
界面模型层的工作流wf组件上有两个关于暂停操作的函数,它们分别是suspendQuery/suspendQueryExt和suspend/suspendExt。suspendQuery/suspendQueryExt首先调用suspendProcessQueryAction动作获取ProcessControl,判断是否需要弹出流转对话框,如果需要则基于ProcessControl构造流转对话框,并且把流转对话框的选择结果再存入ProcessControl,最后传入ProcessControl调用suspendProcessAction动作。suspend/suspendExt则直接调用suspendProcessAction动作,ProcessControl参数值传入为NULL。由于suspend/suspendExt减少了ProcessControl的传递,所以速度上会比suspendQuery/suspendQueryExt要高一些。
7 唤醒
唤醒的本质就是把当前业务流程实例和其所有待办任务中所有状态为已暂停(tesPaushed)的都把状态设置为待办中(tesReady)。使其能重新得到处理。
唤醒操作只有resumeProcessAction一个业务动作。
8 处理
处理是指在待办任务页面,任务中心或者其他任何能看到待办任务的地方打开待办任务相关的业务表单进行处理,此时会调用executeTaskAction实现待办任务打开时的一些自动特性。
*executeTaskAction
此业务动作是在待办任务页面或者任务中心处理待办任务时自动调用的,实现一些打开时的自动特性。例如打开时抢占,打开时结束,打开时流转。
9 回收
回收的本质就是把当前待办任务的状态设置为已取消(tesCanceled),然后基于当前活动环节的前序环节给任务的提交者生成新的待办任务。当前待办任务和新待办任务采用前后关系关联。
回收操作只有withdrawTaskAction一个业务动作。
10 重新启动
重新启动的本质就是把已经完成的流程实例根据选择的活动环节和处理人,给处理人生成此活动环节的待办任务,并把流程实例的任务状态完成(tesFinished)修改为正在处理(tesExecuting),使其流程实例能重新得到处理。
重新启动操作由restartProcessQueryAction和restartProcessAction两个业务动作组成。
*restartProcessQueryAction
重新启动讯问,在实际重新启动前讯问当前流程实例的所有活动环节,每个活动环节有多少执行者。restartProcessQueryAction实际上不会生成待办任务,它只是把重新启动的运行过程在内存里推导运行了一遍,然后把运行结果以ProcessControl形式返回,不会留下任何痕迹。基于ProcessControl可以弹出流转话框选择重新启动的活动环节和选择执行者。
*restartProcessAction
实际重新启动,调用此业务动作把当前流程实例的状态修改为正在处理并根据选择的活动环节和执行者当前待办任务结束生成此活动环节的待办任务,并且存入数据库。
11 特送
特送的本质是一个流程实例流转到某个环节时管理员或者有权限的人可以将这条任务流转到任何环节任何人去执行。特送首先是把当前待办任务的状态设置为已结束(tsFinished),然后为通过选择的活动环节和执行者生成新的待办任务,当前待办任务和新待办任务间使用前后关系关联。
特送操作由specialProcessQueryAction和specialProcessAction两个业务动作组成。 *specialProcessQueryAction 特送讯问,在实际特送前讯问当前流程实例的所有活动环节,每个活动环节有多少执行者。specialProcessQueryAction实际上不会生成待办任务,它只是把特殊的运行过程在内存里推导运行了一遍,然后把运行结果以ProcessControl形式返回,不会留下任何痕迹。基于ProcessControl可以弹出流转话框选择特送的活动环节和选择执行者。
*specialProcessAction
实际特送,调用此业务动作把当前待办任务的状态修改为已结束并根据选择的活动环节和执行者当前待办任务结束生成此活动环节的待办任务,并且存入数据库。
12 批流转
同一个业务流程不同流程实例的同一个环节的多条待办可以批量进行流转,业务表单字段的值可以根据业务环节上定义的批处理表单字段进行数据同步。批流转实际操作还是流转动作。