最近碰到个流程实例合单的需求,具体场景类似支付宝合单的场景:
推断了一下该需求在工作流引擎中的实现方案,共享如下:
引擎可增加一个API,如List<ProcessInstance> getMergedProcessInstances(String processInstanceId, String workItemId, Map<String, Object> processVars ),该API用于根据“指定的流程实例Id,工作项ID(如果是类似BPMN的实现也可以是活动ID)以及一组能够用来鉴别可以合单的流程实例的流程变量的Map”来查询符合合单条件的流程实例。开发者可以调用该API来将返回的流程实例的信息显示到界面上,以支付宝的例子为例就是订单流水号。最终用户可以选择要合单的流程实例,然后填入表单其它信息,提交。server端如果发生根据表单信息设置流程变量,则可调用下面的API:void setVariable(Map<String, Object> processVars, String name, Object value),这个API表示为所有的流程实例中的流程变量值能match给定的processVars参数的流程实例的名称为name的流程变量设置值value。同理,完成工作项也可以是finishWorkitem(String processInstanceId, String workItemId, Map<String, Object> processVars). 这里每个api中要传的processVars参数相当于“相关集”的概念。
欢迎提出更好的方案或与我讨论。谢谢!