.NET CORE开源工作流引擎 - 可视化流程设计器 - 工作流表单设计器 - .NET快速开发平台 - .NET三层代码生成器 - 通用权限管理

.NET MVC CORE开源工作流平台,可视化流程设计器
步骤设置-子流程

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

image.png

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

子流程策略:

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

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

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

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

实例类型:

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

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

激活前事件:

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

    示例:

/// <summary>
/// 子流程激活前事件示例
/// </summary>
/// <param name="model">FlowEventParamsModel</param>
/// <returns>json格式字符串:每个人单独实例:[{"userId":"接收人id","instanceId":"子流程实例id","title":"子流程任务标题"}],所有人同一实例:{"instanceId":"子流程实例id","title":"子流程任务标题"}</returns>
public string SubflowActivateEvent(FlowEventParamsModel model)
{
    //返回子流程的业务数据id和任务标题。
    //如果是每个人单独实例,则需要每个人添加一条数据,对应一个单独的实例id和任务标题。
    if (model.SubFlowInstanceType == 1)
    {
        JsonArray jsonArray = [];
        if (model.SubFlowReceiverList != null)
        {
            foreach (var userModel in model.SubFlowReceiverList)
            {
                var subFlowInstanceId = IdGeneratorUtils.NextId();
                var subFlowTitle = "测试子流程-" + subFlowInstanceId.ToString() + "-" + userModel.Id.ToString();

                //组织子流程业务数据。
                Dictionary<string, object?> dataDict = [];
                dataDict.Add("id", subFlowInstanceId);
                dataDict.Add("title", subFlowTitle);
                dataDict.Add("field1", "测试子流程内容");
                dataDict.Add("field2", 100);
                ConnService.InsertData(model.ConnModel, dataDict, "rf_form_test", false);

                jsonArray.Add(new JsonObject()
                {
                    { "userId", userModel.Id },
                    { "instanceId", subFlowInstanceId },
                    { "title", subFlowTitle }
                });
            }
        }
        return jsonArray.ToString();
    }

    //如果是所有人同一实例,则只在子流程对应的业务表中添加一条数据,所有接收人返回一样的实例id和任务标题。
    //如果是所有人同一实例,直接返回JsonObject: {instanceId:"",title:""}字符串,不用返回JsonArray。
    var subFlowInstanceId1 = IdGeneratorUtils.NextId();
    var subFlowTitle1 = "测试子流程-" + subFlowInstanceId1.ToString();

    //组织子流程业务数据。
    Dictionary<string, object?> dataDict1 = [];
    dataDict1.Add("id", subFlowInstanceId1);
    dataDict1.Add("title", subFlowTitle1);
    dataDict1.Add("field1", "测试子流程内容");
    dataDict1.Add("field2", 100);
    ConnService.InsertData(model.ConnModel, dataDict1, "rf_form_test", false);

    JsonObject jsonObject = new()
    {
        { "instanceId", subFlowInstanceId1 },
        { "title", subFlowTitle1 }
    };
    return jsonObject.ToString();
}

    事件方法返回:

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

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

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