流程动作

由于流程运行在企业工作流中,企业工作流与外界交互的唯一手段就是通过流程动作。在业务表单里查询和提交业务数据是通过流程动作实现的,同样的,流程的各种操作也是基于流程动作来实现的。

流程的各种操作,一般都由讯问和实际做两大类流程动作构成,只有个别操作没有提供关于讯问的流程动作。所有讯问的流程动作都只是基于内存的推导和运算,把相关需要计算的规则,环节和执行者都计算完毕后生成 ProcessControl,而不留下任何痕迹。实际做的流程动作都是根据传入的 ProcessControl 完成实际的操作,并且把结果存入数据库。

基本所有的流程的流程动作都是两个动作一起组合起来实现一个流程操作,例如流转操作是由 advanceProcessQueryAction 动作先查出 ProcessControl,然后 advanceProcessAction 动作根据 ProcessControl 实际流转。

流程所有流程动作都是基于待办任务公布的,不但流程本身可以用,非流程任务也可以用。也就是说只要是待办任务的操作,基本都可以调用流程动作。

启动

启动的本质是根据流程定义产生新的流程实例,并且为流程的入口活动环节生成待办任务。需要注意的是,启动不一定只能给入口活动环节生成待办任务,只是在界面模型层里,系统默认提供的流程启动函数是那样实现的,其实启动时可以给流程中任何活动环节生成待办任务,也就是说流程未必一定要从入口启动,还可以从中间某个环节启动。

启动操作由 startProcessQueryAction 和 startProcessAction 两个流程动作组成。

  • startProcessQueryAction

启动讯问,在实际启动前,讯问有哪些入口环节,每个入口环节可以选择哪些执行者等信息。startProcessQueryAction 不会实际让流程启动,它只是在内存里推导运行了整个启动的过程,然后把运行结果以 ProcessControl 的形式返回而不会留下任何痕迹。基于 ProcessControl 可以弹对话框选环节和选执行者,还可以在代码中修改 ProcessControl 实现代码控制启动。通过修改 ProcessControl 可以实现任意复杂的启动方式,从任意环节和任意人启动流程。

在调用 startProcessQueryAction 时首先计算的是启动规则,然后从开始环节往后找到入口环节,计算入口环节的执行规则后生成 ProcessControl,所以在开始环节和入口环节中间的任何其他类型的环节和规则都将会被计算。

  • startProcessAction

实际启动,调用这个流程动作实际生成流程实例和指定入口环节的待办任务,并且存入数据库。只是在界面模型层里系统默认提供的流程启动函数其实就是直接调用了 startProcessAction。通过传入 ProcessControl 参数可以实现对启动的控制,而当传入的 ProcessControl 值为 NULL 时,它在流程引擎内部首先调用了 startProcessQueryAction 获取到 ProcessControl 的值后再进行实际启动的。

其实 startProcessAction 本身不会产生任何计算规则和计算环节的行为,它仅仅就是根据 ProcessControl 实现启动。

界面模型层提供的工作流组件提供的有启动函数 start,直接调用 startProcessAction 动作,且 ProcessControl 参数值为 NULL。

启动并流转

工作流组件的提供两种启动时机:

  • 保存时启动:表示业务数据为新增状态时,保存数据后启动流程
  • 流转时启动:表示第一次流转时,先启动流程,再执行流转

两种启动方式,调用两个流程动作

  • 保存时启动,执行“启动”动作。流程启动后,第一个环节为当前环节,发起人为当前人
  • 流转时启动,执行“启动并流转”动作。流程启动并流转后,第一个环节处理人为当前人,状态为已审批,第二个环节为当前环节,发起人为当前人

启动并流转动作由 startAdvanceQueryAction 和 startAdvanceAction 两个流程动作组成

  • startAdvanceQueryAction:集成启动查询和流转查询动作
  • startAdvanceAction:集成启动和流转动作

流转

流转的本质首先是把当前待办任务的状态设置为已结束(tsFinished),然后为下一步活动环节生成新的待办任务,当前待办任务和新待办任务间使用前后关系关联。

流转操作由 advanceProcessQueryAction 和 advanceProcessAction 两个流程动作组成。

  • advanceProcessQueryAction

流转讯问,在实际流转前,讯问当前活动环节的下一步有多少个活动环节,每个活动环节有多少执行者。advanceProcessQueryAction 实际上不会为下一步环节生成待办任务,它只是把流转的运行过程在内存里推导运行了一遍,然后把运行结果以 ProcessControl 形式返回,不会留下任何痕迹。基于 ProcessControl 可以弹出流转话框选择下一步环节和选择执行者,还可以在代码中修改 ProcessControl 实现代码控制流转。通过操作 ProcessControl 可以实现任意复杂的流转,像跳转和自由流就是通过操作 ProcessControl 来实现的。

在调用 advanceProcessQueryAction 时首先计算当前活动环节的流转规则,然后基于当前活动环节往后找到下一步活动环节,计算这些活动环节的执行规则后生成 ProcessControl。所以在当前活动环节和下一步活动环节之间的所有环节和规则都将被计算。

  • advanceProcessAction

实际流转,调用此流程动作把当前待办任务结束后生成下一步活动环节的待办任务,并且存入数据库。通过传入 ProcessControl 参数可以实现对流转的自定义,而当传入的 ProcessControl 为 NULL 时它在流程引擎内部首先调用了 advanceProcessQueryAction 获取到 ProcessControl 的值后再进行实际流转的。

其实 advanceProcessAction 本身不会产生任何计算规则和计算环节的行为,它仅仅就是根据 ProcessControl 实现流转。

执行完毕 advanceProcessAction 以后,如果当前流程实例的所有待办任务都已处理完成,则自动触发 finishProcessAction 把当前流程实例的状态也设置为已结束(tesFinished)。

界面模型层的工作流组件上有流转操作的函数,它们分别是 advanceQuery 和 advance。advanceQuery 首先调用 advanceProcessQueryAction 动作获取 ProcessControl,判断是否需要弹出流转对话框,如果需要则基于 ProcessControl 构造流转对话框,并且把流转对话框的选择结果再存入 ProcessControl,最后传入 ProcessControl 调用 advanceProcessAction 动作。advance 则直接调用advanceProcessAction 动作,ProcessControl 参数值传入为 NULL。由于 advance 减 少了 ProcessControl 的传递,所以速度上会比 advanceQuery 要高一些。

回退

回退的本质首先是把当前待办任务状态设置为已退回(tesReturned),然后给曾经经过的指定的活动环节生成新的待办任务。当前待办任务和新待办任务间使用前后关系关联。

回退操作由 backProcessQueryAction 和 backProcessAction 两个流程动作组成。

  • backProcessQueryAction

回退讯问,在实际回退前,讯问当前活动环节能回退到哪些活动环节,每个活动环节有多少执行者。backProcessQueryAction 只是把回退的运行过程在内存里推导运行了一遍,然后把运行结果以 ProcessControl 形式返回,不会留下任何痕迹。基于 ProcessControl 可以弹回对话框选择回退的活动环节和选择执行者,还可以在代码中修改 ProcessControl 实现代码控制回退。通过操作 ProcessControl 可以实现任意复杂的回退,甚至是流程定义和规则中本来就不支持的。

在调用 backProcessQueryAction 时首先计算当前活动环节的回退规则,然后再根据回退规则找出能退到哪些活动环节去,在获取到这些活动环节曾经的待办任务后生成 ProcessControl。所以在回退时只会计算当前环节的回退规则,而不会产生其他任何计算行为。

  • backProcessAction

实际回退,调用此流程动作把当前待办任务结束后生成目标活动环节的待办任务,并且存入数据库。通过传入 ProcessControl 参数可以实现对回退的控制,而当传入的 ProcessControl 为 NULL 时它的代码实现其实是首先调用了 backProcessQueryAction 获取到 ProcessControl 的值后再进行实际回退。

其实 backProcessAction 本身不会产生任何计算规则和计算环节的行为,它仅仅就是根据 ProcessControl 实现回退。

界面模型层的工作流组件上有两个关于回退操作的函数,它们分别是 backQuery 和 back。backQuery 首先调用 backProcessQueryAction 动作获取 ProcessControl,判断是否需要弹出流转对话框,如果需要则基于 ProcessControl 构造流转对话框,并且把流转对话框的选择结果再存入 ProcessControl,最后传入 ProcessControl 调用 backProcessAction 动作。back 则直接调用 backProcessAction 动作,ProcessControl 参数值传入为 NULL。由于 back 减少了 ProcessControl 的传递,所以速度上会比 backQuery 要高一些。

转发

转发的本质首先是把当前待办任务的状态设置为已转发(tesTransmited),然后基于当前活动环节给其他执行者生成新的待办任务。当前待办任务和新待办任务采用前后关系关联。

转发操作由 transferTaskQueryAction 和 transferTaskAction 两个流程动作组成。

  • transferTaskQueryAction

转发讯问,在实际转发前,讯问当前活动环节能转发给哪些执行者。transferTaskQueryAction 只是把转发的运行过程在内存里推导运行了一遍,然后把运行结果以 ProcessControl 形式返回。基于 ProcessControl 可以弹转发话框选择执行者,还可以在代码中修改 ProcessControl 实现代码控制转发。通过操作 ProcessControl 可以实现任意复杂的转发,甚至是流程定义和规则中本来就不支持的。

在调用 transferTaskQueryAction 时首先计算当前活动环节的转发规则,然后根据转发规则后生成 ProcessControl。所以在转发时只会计算当前环节的转发规则,而不会产生其他任何计算行为。

  • transferTaskAction

实际转发,调用此流程动作把当前待办任务结束后给选择的执行者生成新待办任务,并且存入数据库。通过传入 ProcessControl 参数可以实现对转发的控制,而当传入的 ProcessControl 为 NULL 时它的代码实现其实是首先调用了 transferTaskQueryAction 获取到 ProcessControl 的值后再进行实际转发。

其实 transferTaskAction 本身不会产生任何计算规则和计算环节的行为,它仅仅就是根据 ProcessControl 实现转发。

界面模型层的工作流组件上有两个关于转发操作的函数,它们分别是 transferQuery 和 transfer。transferQuery 首先调用 transferTaskQueryAction 动作获取 ProcessControl,判断是否需要弹出流转对话框,如果需要则基于 ProcessControl 构造流转对话框,并且把流转对话框的选择结果再存入 ProcessControl,最后传入 ProcessControl 调用 transferTaskAction 动作。transfer 则直接调用 transferTaskAction 动作,ProcessControl 参数值传入为 NULL。由于 transfer 减少了 ProcessControl 的传递,所以速度上会比 transferQuery 要高一些。

终止

终止的本质就是把当前流程实例和其下所有待办任务的状态都设置为已终止(tesAborted)。

终止操作由 abortProcessQueryAction 和 abortProcessAction 两个流程动作组成。

  • abortProcessQueryAction

终止讯问,在实际终止前,讯问需要通知给哪些相关人。abortProcessQueryAction 根据在流程(Process)上设置的通知规则生成 ProcessControl。基于 ProcessControl 可以弹出通知对话框选择执行者,还可以在代码中修改 ProcessControl 实现代码控制终止时通知。

在调用 abortProcessAction 时首先计算流程(Process)上的通知规则,然后根据通知规则后生成 ProcessControl。所以在终止时只会计算当前流程的通知规则,而不会产生其他任何计算行为。

  • abortProcessAction

实际终止,调用此流程动作更新当前流程实例和其所有待办任务的状态为已终止(tesAborted),并且存入数据库。通过传入 ProcessControl 参数可以实现对终止时通知的控制,而当传入的 ProcessControl 为 NULL 时 abortProcessAction 的代码实现其实是首先调用了 abortProcessQueryAction 获取到 ProcessControl 的值后再进行实际终止。

其实 abortProcessAction 本身不会产生任何计算规则和计算环节的行为,它仅仅就是根据 ProcessControl 实现终止。

界面模型层的工作流组件上有两个关于终止操作的函数,它们分别是 abortQuery 和 abort。abortQuery 首先调用 abortProcessQueryAction 动作获取 ProcessControl,判断是否需要弹出流转对话框,如果需要则基于 ProcessControl 构造流转对话框,并且把流转对话框的选择结果再存入 ProcessControl,最后传入 ProcessControl 调用 abortProcessAction 动作。abort 则直接调用 abortProcessAction 动作,ProcessControl 参数值传入为 NULL。由于 abort 减少了 ProcessControl 的传递,所以速度上会比 abortQuery 要高一些。

暂停

暂停的本质就是把当前流程实例和其所有待办任务的状态都设置为已暂停(tesPaused)。暂停和终止在代码实现上是没什么区别的,从业务上说两者区别在于暂停可以再次被恢复,而终止则指的是以后都不再处理了。

暂停操作由 suspendProcessQueryAction 和 suspendProcessAction 两个流程动作组成。

  • suspendProcessQueryAction

暂停讯问,在实际暂停前,讯问需要通知给哪些相关人。suspendProcessQueryAction 根据在流程(Process)上设置的通知规则生成ProcessControl。基于 ProcessControl 可以弹出通知对话框选择执行者,还可以在代码中修改 ProcessControl 实现代码控制暂停时通知。

在调用 suspendProcessQueryAction 时首先计算流程(Process)上的通知规则,然后根据通知规则后生成 ProcessControl。所以在终止时只会计算当前流程的通知规则,而不会产生其他任何计算行为。

  • suspendProcessAction

实际暂停,调用此流程动作更新当前流程实例和其所有待办任务的状态为已暂停(tesPaushed),并且存入数据库。通过传入 ProcessControl 参数可以实现对终止时通知的控制,而当传入的 ProcessControl 为 NULL 时 suspendProcessAction 的代码实现其实是首先调用了 suspendProcessQueryAction 获取到 ProcessControl 的值后再进行实际终止。

其实 suspendProcessAction 本身不会产生任何计算规则和计算环节的行为,它仅仅就是根据 ProcessControl 实现终止。

界面模型层的工作流组件上有两个关于暂停操作的函数,它们分别是 suspendQuery 和 suspend。suspendQuery 首先调用 suspendProcessQueryAction 动作获取 ProcessControl,判断是否需要弹出流转对话框,如果需要则基于 ProcessControl 构造流转对话框,并且把流转对话框的选择结果再存入 ProcessControl,最后传入 ProcessControl 调用 suspendProcessAction 动作。suspend 则直接调用 suspendProcessAction 动作,ProcessControl 参数值传入为 NULL。由于 suspend 减少了 ProcessControl 的传递,所以速度上会比 suspendQuery 要高一些。

唤醒

唤醒的本质就是把当前流程实例和其所有待办任务中所有状态为已暂停(tesPaushed)的都把状态设置为待办中(tesReady)。使其能重新得到处理。

唤醒操作只有 resumeProcessAction 一个流程动作。

处理

处理是指在待办任务页面,任务中心或者其他任何能看到待办任务的地方打开待办任务相关的业务表单进行处理,此时会调用 executeTaskAction 实现待办任务打开时的一些自动特性。

  • executeTaskAction

此流程动作是在待办任务页面或者任务中心处理待办任务时自动调用的,实现一些打开时的自动特性。例如打开时抢占,打开时结束,打开时流转。

回收

回收的本质就是把当前待办任务的状态设置为已取消(tesCanceled),然后基于当前活动环节的前序环节给任务的提交者生成新的待办任务。当前待办任务和新待办任务采用前后关系关联。

回收操作只有 withdrawTaskAction 一个流程动作。

重新启动

重新启动的本质就是把已经完成的流程实例根据选择的活动环节和处理人,给处理人生成此活动环节的待办任务,并把流程实例的任务状态由已完成(tesFinished)修改为正在处理(tesExecuting),使其流程实例能重新得到处理。

重新启动操作由 restartProcessQueryAction 和restartProcessAction 两个流程动作组成。

  • restartProcessQueryAction

重新启动讯问,在实际重新启动前,讯问当前流程实例的所有活动环节,每个活动环节有多少执行者。restartProcessQueryAction 实际上不会生成待办任务,它只是把重新启动的运行过程在内存里推导运行了一遍,然后把运行结果以 ProcessControl 形式返回,不会留下任何痕迹。基于 ProcessControl 可以弹出流转话框选择重新启动的活动环节和选择执行者。

  • restartProcessAction

实际重新启动,调用此流程动作把当前流程实例的状态修改为正在处理,并根据选择的活动环节和执行者生成此活动环节的待办任务,并且存入数据库。

特送

特送的本质是一个流程实例流转到某个环节时,管理员或者有权限的人可以将这条任务流转到任何环节任何人去执行。特送首先是把当前待办任务的状态设置为已结束(tsFinished),然后为选择的活动环节和执行者生成新的待办任务,当前待办任务和新待办任务间使用前后关系关联。

特送操作由 specialProcessQueryAction 和 specialProcessAction 两个流程动作组成。

  • specialProcessQueryAction

特送讯问,在实际特送前,讯问当前流程实例的所有活动环节,每个活动环节有多少执行者。specialProcessQueryAction 实际上不会生成待办任务,它只是把特送的运行过程在内存里推导运行了一遍,然后把运行结果以 ProcessControl 形式返回,不会留下任何痕迹。基于 ProcessControl 可以弹出流转话框选择特送的活动环节和选择执行者。

  • specialProcessAction

实际特送,调用此流程动作把当前待办任务的状态修改为已结束,并根据选择的活动环节和执行者生成此活动环节的待办任务,并且存入数据库。

批流转

同一个流程不同流程实例的同一个环节的多条待办可以批量进行流转,业务表单字段的值可以根据业务环节上定义的批处理表单字段进行数据同步。批流转实际操作还是流转动作。

删除

删除的本质就是根据条件删除流程实例,删除的流程实例对应的所有任务都会删除。

可以根据任务id、流程实例id或业务数据和流程编码删除流程实例。如果同一条业务数据允许多次启动,生成多个流程实例,那么按业务数据和流程编码组合删除时就会报错删除失败,删除的时候只能按条件查到一个流程实例。

删除操作只有deletePIAction一个流程动作。

results matching ""

    No results matching ""