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

.NET MVC CORE开源工作流平台,可视化流程设计器
RoadFlow-Plus8.0.6升级说明

1、流程步骤跳过策略增加了审批过的跳过选项。

    修改文件:\RoadFlow.WebUI\src\roadui-pages\flow\design\step.vue

    image.png

 <el-tooltip content="接收人前面步骤已经审批过时跳过" placement="top-start">
    <el-checkbox v-model="stepSet.strategy.skipApproved" :true-label="1" :false-label="0" style="margin-left:-3px;vertical-align:middle;">审批过</el-checkbox>
 </el-tooltip>

    修改文件:\RoadFlow.Service\Flow\FlowRunService.cs

    image.png

    //如果是前面步骤审批过时跳过
    if (!isSkip && stepSetStrategyJsonObject.GetInt("skipApproved") == 1)
    {
        if (string.IsNullOrWhiteSpace(members))
        {
            members = GetHandler(flowJsonObject, stepSetJsonObject, currentFlowTaskModel, formDataJsonObject, groupTasks, userId, flowEventParamsModel);
        }
        //循环下一步接收人,如果所有接收人都在前面步骤已经处理过,则跳过。
        var userModelList = orgService.GetOrgUsers(members);
        bool isSkip1 = userModelList.Count > 0;
        List<long> receiverList = groupTasks.Where(s => s.Type.NotIn(5, 11)).Select(s => s.ReceiverId).ToList();
        receiverList.Add(userId);//加上当前处理人
        foreach (var orgUserModel in userModelList)
        {
            isSkip1 = receiverList.Contains(orgUserModel.Id);
            if (!isSkip1)
            {
                break;
            }
        }
        isSkip = isSkip1;
    }

2、增加了流程步骤处理人为子表字段时也可以取值。

    修改文件:\RoadFlow.Service\Flow\FlowRunService.cs

    image.png

    /// <summary>
    /// 得到字段值的处理人员
    /// </summary>
    /// <param name="valueField">值字段</param>
    /// <param name="formDataJsonObject">表单数据</param>
    /// <returns>string</returns>
    private static string GetHandlerFieldValueMembers(string valueField, JsonObject formDataJsonObject)
    {
        //return string.IsNullOrWhiteSpace(valueField) ? string.Empty : formDataJsonObject.GetString(valueField);
        if (string.IsNullOrWhiteSpace(valueField))
        {
            return string.Empty;
        }
        var members = formDataJsonObject.GetString(valueField);
        if (!string.IsNullOrWhiteSpace(members))
        {
            return members;
        }
        //如果没有找得到,则尝试从子表中找。
        var (jsonArray, fieldName) = GetSubTableJsonArray(valueField, formDataJsonObject);
        if (jsonArray != null && jsonArray.Count > 0)
        {
            StringBuilder stringBuilder = new();
            foreach (var jObj in jsonArray)
            {
                string m = jObj.GetString(fieldName);
                if (!string.IsNullOrWhiteSpace(m))
                {
                    stringBuilder.Append(m);
                    stringBuilder.Append(',');
                }
            }
            return stringBuilder.ToString().TrimEnd(',');
        }
        return string.Empty;
    }
    
    /// <summary>
    /// 得到子表数据JsonArray
    /// </summary>
    /// <param name="valueField">值字段</param>
    /// <param name="formDataJsonObject">表单数据json</param>
    /// <returns>(子表数据,子表字段)</returns>
    private static (JsonArray?, string) GetSubTableJsonArray(string valueField, JsonObject formDataJsonObject)
    {
        if (string.IsNullOrWhiteSpace(valueField))
        {
            return (null, string.Empty);
        }
        var strArray = valueField.SplitToArray("_");
        int endIndex = strArray.Length - 1;
        var subTableId = GetSubTableId(strArray, endIndex);
        var jsonArray = formDataJsonObject.GetJsonArray(subTableId);
        while (jsonArray.IsEmpty() && endIndex >= 0)
        {
            subTableId = GetSubTableId(strArray, endIndex);
            jsonArray = formDataJsonObject.GetJsonArray(subTableId);
            endIndex -= 1;
        }
        return (jsonArray, valueField.TrimStartString(subTableId + "_"));
    }
    
    /// <summary>
    /// 根据字段名称得到子表id
    /// </summary>
    /// <param name="strArray">字段名称按_分隔后的数组</param>
    /// <param name="endIndex">结束下标</param>
    /// <returns>string</returns>
    private static string GetSubTableId(string[] strArray, int endIndex)
    {
        StringBuilder stringBuilder = new();
        for (int i = 0; i < endIndex; i++)
        {
            if (i < strArray.Length)
            {
                stringBuilder.Append(strArray[i]);
                stringBuilder.Append('_');
            }
        }
        return stringBuilder.ToString().TrimEnd('_');
    }

3、修改了直接保存表单没有生成流水号的问题。

    修改文件:\RoadFlow.Service\Flow\FlowExecuteService.cs

    image.png

    #region 处理流水号
    var serialNumberJsonArray = paramsJsonObject.GetJsonArray("serialNumber");
    if (!serialNumberJsonArray.IsEmpty())
    {
        foreach (var serialNumberJsonNode in serialNumberJsonArray)
        {
            var fieldId = serialNumberJsonNode.GetString("id");
            //如果序号号id对应的表单数据字段为空,说明还没有生成流水号,才去生成。
            if (string.IsNullOrWhiteSpace(formDataJsonObject.GetString(fieldId)))
            {
                //serialId 序列号ID有可能在前端控件上设置了多个,在前端通过条件判断后这里只有一个,不可能一个字段同时生成两种流水号。
                var maxNumber = serialNumberService.GetMaxSerialNumber(serialNumberJsonNode.GetLong("serialId"));
                if (!string.IsNullOrWhiteSpace(maxNumber))
                {
                    formDataJsonObject[fieldId] = maxNumber;
                }
            }
        }
    }
    #endregion

4、增加了步骤跳过后提示。

    修改文件:\RoadFlow.Service\Flow\FlowRunService.cs

    image.png

    image.png

    image.png

    修改文件:\RoadFlow.Service\Flow\FlowExecuteService.cs

    image.png

    image.png

    image.png

    修改文件:\RoadFlow.WebUI\src\roadui-pages\flow\run\send.vue

    image.png

    修改文件:\RoadFlow.WebUI\src\roadui-pages\flow\run\process.vue

    image.png    

    image.png

5、修改了子表下拉联动二次加载回显问题。

    修改文件:\RoadFlow.Service\Form\FormService.cs

    image.png

6、修改了子表下拉只读时二次加载回显问题。

    修改文件:\RoadFlow.WebUI\src\roadui-pages\form\design\design.js

    image.png

 template += '<span v-else class="rf_form_readonly">{{getSelectLabel(\'' + eventId + '\',scope.row[\'' + fieldName + '\'],scope.row[\'' + subTableKey.toLowerCase() + '\'])}}</span>';

    修改文件:\RoadFlow.WebUI\src\roadui-pages\flow\run\index.vue

    image.png

   //得到select控件只读时的显示label。subTableKey--子表行ID,如果是子表的下拉回显每行的下拉是独立的选项。
    getSelectLabel() {
        return function (id, value, subTableKey) {
            let options = this.formOptions[id];
            if (utils.isUndef(options)) {
                //如果没有找到选项,则用子表行去找。
                if (utils.isDef(subTableKey)) {
                    options = this.formOptions[id + '_' + subTableKey];
                }
                if (utils.isUndef(options)) {
                    return value;
                }
            }
            const option = options.find((opt) => {
                return opt.value === value;
            });
            return utils.isDef(option) ? option.label || value : value;
        }
    },

7、应用设计导出增加了模板导出功能。

    修改文件:\RoadFlow.WebUI\src\roadui-pages\app-design\design\attr.vue

    image.png

    修改文件:\RoadFlow.WebUI\src\roadui-pages\app-design\design\design.js

    image.png

    修改文件:\RoadFlow.WebApi\Controllers\RoadFlowWebApi\AppDesign\AppDesignRunController.cs

    image.png

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