步骤设置-子流程

子流程是指在一个流程里面嵌套另一个流程,可以设置子流程审批完成再进入后面的步骤等策略。比如出差流程中途需要向财务申请预支费用需要发起一个账务付款流程,待账务付款流程审批完成后再进行后面的审批。

image.png

子流程:选择要在子流程步骤发起的子流程。

子流程策略:

    子流程发起即可提交:在子流程发起后此步即可提交到后续步骤。

    子流程完成才能提交:必须要等到子流程实例审批完成后此步骤才可以提交到后续步骤。

    子流程发起后自动提交:在子流程发起后此步骤自动提交到后续步骤(后续步骤要能找到默认处理人)。

    子流程完成后自动提交:在子流程实例审批完成后此步骤自动提交到后续步骤(后续步骤要能找到默认处理人)。

实例类型:

    所有人同一实例:子流程步骤如果有多个接收人,所有人同一实例,即子流程第一步有多个处理人,根据处理策略处理。

    每个人单独实例:子流程步骤如果有多个接收人,每个人单独一个实例。

激活前事件:

    事件用于产生子流程对应的表单数据,及返回子流程实例id(表单数据id), 任务标题。

    示例:

    /**
     * 测试子流程激活事件
     *
     * @param paramsModel FlowEventParamsModel
     * @return String json格式:[{userId:"接收人id",instanceId:"子流程实例id",title:"子流程任务标题"}]
     */
    @MethodReflectAuthorize
    public String subflowActivateEvent(FlowEventParamsModel paramsModel) {
        //这里组织子流程业务数据。
        ConnService connService1 = SpringBeanUtils.getBeanByClass(ConnService.class);
        LinkedHashMap<String, Object> linkedHashMap = connService1.getTableOneMap(paramsModel.getConnModel(), "select * from "
                + paramsModel.getTable() + " where " + paramsModel.getPrimaryKey() + "=" + paramsModel.getInstanceId());
    
        ObjectMapper objectMapper = JSONUtils.getObjectMapper();
        //返回子流程的业务数据id和任务标题。
        //如果是所有人同一实例,则只在子流程对应的业务表中添加一条数据,所有接收人返回一样的实例id和任务标题。
        //如果是所有人同一实例,直接返回ObjectNode: {instanceId:"",title:""}字符串,不用返回ArrayNode。
        /*long subflowInstanceId = IdGeneratorUtils.nextId();
        String subflowTitle = linkedHashMap.get("title") + "-子流程";
        linkedHashMap.put("id", subflowInstanceId);
        linkedHashMap.put("title", subflowTitle);
        connService1.insertData(paramsModel.getConnModel(), linkedHashMap, paramsModel.getTable(), false, null,
                paramsModel.getPrimaryKey());
        ObjectNode objectNode1 = objectMapper.createObjectNode();
        objectNode1.put("instanceId", subflowInstanceId);
        objectNode1.put("title", subflowTitle);
        return objectNode1.toString();*/
    
        //如果是每个人单独实例,则需要每个人添加一条数据,对应一个单独的实例id和任务标题。
        List<UserModel> receiverList = paramsModel.getSubFlowReceiverList();
        ArrayNode arrayNode = objectMapper.createArrayNode();
        for (UserModel userModel : receiverList) {
            long subflowInstanceId1 = IdGeneratorUtils.nextId();
            String subflowTitle = linkedHashMap.get("title") + "-子流程-" + subflowInstanceId1;
            linkedHashMap.put("id", subflowInstanceId1);
            linkedHashMap.put("title", subflowTitle);
            connService1.insertData(paramsModel.getConnModel(), linkedHashMap, paramsModel.getTable(), false, null,
                    paramsModel.getPrimaryKey());
            ObjectNode objectNode = objectMapper.createObjectNode();
            objectNode.put("userId", userModel.getId());
            objectNode.put("instanceId", subflowInstanceId1);
            objectNode.put("title", subflowTitle);
            arrayNode.add(objectNode);
        }
    
        return arrayNode.toString();
    }

    事件方法返回:

        如果是所有人同一实例: {instanceId:"子流程业务数据id",title:"子流程标题"}

        如果是每个人单独实例: [{userId:"接收人id",instanceId:"子流程业务数据id",title:"子流程标题"},...]

联系QQ:493501010电话:136 0832 5512(微信同号)邮箱:road@roadflow.net
Copyright 2014 - 2024 重庆天知软件技术有限公司 版权所有