在实践中不断总结和提升
最近有好几个客户都提出,需要实现在上一个流程节点办理的时候,由用户去选择下一步任务的执行人。
?
这种需要在我们的工作流系统中,早就有相关的实现。是在下一步节点任务的参与人先设置一个虚拟的审核人checker。然后用户在上一个节点办理的时候,将选择的用户id存到这个checker中,再将这个checker以变量的形式送到流程引擎中,流程引擎在创建下一步任务的时候,就将用户选择的人生成到任务的参与人了。也可以多选,多选的用户id以逗号分隔的方式存到checker变量中,选择后的值为 USR_0000001,USR_0000002,USR_0000003... 这样。
但是又有客户提出,需要在上一个节点办理的时候,由用户去选择下一步骤任务的执行人,并且这个选择范围是在流程设计器中圈定,如审核报销单的时候,审核人必须是部门经理,再在每个流程实例运行的时候,由上一步填写人提交的时候,去选择一个部门经理来审核。
?
这种需求还是按上面那种方式来处理,在下一步节点任务参与人先设置一个虚拟的审核人checker,然后在上一步节点办理的表单中,选择下一步任务的参与人列表,只列出部门经理来。这样也能达到客户的要求。
?
但是,又有客户提出了,圈定的范围必须要在流程设计器中定义任务的时候,先圈定好,在上一步节点办理的表单中,读出这个范围,再由用户去选择,这样就不必在表单中固定好选择范围
?
这种需求我们现在的产品中没有,客户是上帝,提出的又是合理的需求,我们必须要想想怎样去实现了.....
?
开始总想着在流程设计器任务节点属性中,加上定义范围的功能,但这样太繁琐了,要定义任务参与人,又要定义任务可选择的范围,而且可能是按用户,按角色,按群组等等。。。。。太繁琐了,不是好方案
应该借助任务参与人的这个范围,而且客户提出的也是,在任务定义的时候,定义的任务参与人就是可选择的范围,增加表来存储用户的选择结果也不是好的方案,会使得得复杂和繁琐。
?
还是利用一个临时变量appoint_nexttask_operator来处理又简单又能解决问题,在上一步节点的办理表单中,读出下一步任务节点的参与人列表(利用流程引擎的API来获取),将用户选择的结果存到appoint_nexttask_operator这个变量中,将此变量送到流程引擎中,流程引擎在生成任务之前,先判断这个变量是否有值,有值,就将此变量中的值生成到任务参与人,没有则用流程定义时的参与人。也可以多选,用逗号分隔。
?
^_^,这样,也不用额外增加定义的表等,就能完美的解决这个需求了,读出下一步任务节点的参与人,我们利用api写一个通用的方法,在表单中只要调用进来,就可以了。
?
在定义的时候,可以加用户,角色等
在第一个节点办理的表单中,读出任务定义的参与人
?
选择后,就是下一步的审核人了。