public JsonResult ExecuteDeploy(string code, string node)
        {
            return(ExecuteFunctionRun(() =>
            {
                ActionResult result = new ActionResult();
                FunctionNodeType nodeType = FunctionNodeType.Function;
                if (string.IsNullOrEmpty(code) ||
                    !Enum.TryParse <FunctionNodeType>(node, out nodeType))
                {
                    result.Extend = new
                    {
                        State = false,
                        ErroMsg = "SysDeploymen.Msg0"
                    };
                    return Json(result.Extend, JsonRequestBehavior.AllowGet);
                }

                string loginName = this.Session["LoginName"].ToString();
                string password = this.Session["Password"].ToString();
                DeploymentProcess deploymentProcess = new DeploymentProcess(this, loginName, password);
                deploymentProcess.Connection();
                object obj = deploymentProcess.OneButtonDeployment(nodeType, code);
                deploymentProcess.Dispose();
                return Json(obj, JsonRequestBehavior.AllowGet);
            }));
        }
        /// <summary>
        /// 获取目录下拉列表
        /// </summary>
        /// <returns></returns>
        private List <Item> GetFloders(string objectType, string parentId)
        {
            List <Item>      itemList = new List <Item>();
            FunctionNodeType nodeType = string.IsNullOrWhiteSpace(objectType) ? FunctionNodeType.BizWorkflowPackage : (FunctionNodeType)Enum.Parse(typeof(FunctionNodeType), objectType);

            FunctionNode[] reportnode = this.Engine.FunctionAclManager.GetFunctionNodesByNodeType(FunctionNodeType.Report);
            if (reportnode != null)
            {
                foreach (FunctionNode report in reportnode)
                {
                    itemList.Add(new Item(string.IsNullOrWhiteSpace(report.DisplayName) ? report.Code : report.DisplayName,
                                          report.Code));//提供一个可以选择新建报表页在跟目录的机会
                }
            }

            FunctionNode[] folders = nodeType == FunctionNodeType.ReportFolder ?
                                     this.Engine.FunctionAclManager.GetFunctionNodesByNodeType(FunctionNodeType.ReportFolder) :
                                     new FunctionNode[] { this.Engine.FunctionAclManager.GetFunctionNode(parentId) };
            if (folders != null)
            {
                foreach (FunctionNode folder in folders)
                {
                    itemList.Add(new Item(string.IsNullOrWhiteSpace(folder.DisplayName) ? folder.Code : folder.DisplayName,
                                          folder.Code));
                }
            }
            return(itemList);
        }
Ejemplo n.º 3
0
        public JsonResult SaveWorkflowPackage(WorkflowPackageViewModel model)
        {
            return(ExecuteFunctionRun(() =>
            {
                ActionResult result = new ActionResult(false);
                if (this.WorkflowLimit != 0)
                {
                    int workflowCount = this.Engine.Query.Count(OThinker.H3.WorkflowTemplate.WorkflowClause.TableName,
                                                                new string[] {
                        OThinker.H3.WorkflowTemplate.WorkflowClause.PropertyName_State + "=" + (int)OThinker.H3.WorkflowTemplate.WorkflowState.Active
                    });
                    if (workflowCount >= this.WorkflowLimit)
                    {
                        result.Success = false;
                        result.Message = "WorkflowPackage.OverLimit";
                        return Json(result, JsonRequestBehavior.AllowGet);
                    }
                }
                FunctionNodeType nodeType = string.IsNullOrWhiteSpace(model.ObjectType) ? FunctionNodeType.BizWorkflowPackage : (FunctionNodeType)Enum.Parse(typeof(FunctionNodeType), model.ObjectType);

                if (!Validator(nodeType, model, out result))
                {
                    return Json(result, JsonRequestBehavior.AllowGet);
                }

                if (nodeType == FunctionNodeType.BizWorkflowPackage) //流程包
                {
                    result = SavePackage(model);
                    return Json(result, JsonRequestBehavior.AllowGet);
                }
                else //流程
                {
                    string code = model.Code.Trim();
                    if (this.Engine.WorkflowManager.GetDraftTemplate(code) != null)
                    {
                        result.Success = false;
                        result.Message = "WorkflowPackage.Msg8";
                        return Json(result, JsonRequestBehavior.AllowGet);
                    }
                    int sortKey;
                    Int32.TryParse(model.SortKey, out sortKey);
                    OThinker.H3.DataModel.BizObjectSchema schema = this.Engine.BizObjectManager.GetDraftSchema(model.Folder);

                    WorkflowTemplate.WorkflowClause wClause = new WorkflowTemplate.WorkflowClause(model.Folder, code, model.DisplayName, sortKey);
                    wClause.IsShared = schema.IsShared;
                    if (schema.IsQuotePacket)
                    {
                        //使用共享包的,用共享包的模型创建
                        wClause = new WorkflowTemplate.WorkflowClause(schema.BindPacket, code, model.DisplayName, sortKey);
                        //加自己的标识
                        wClause.OwnSchemaCode = schema.SchemaCode;
                    }
                    result.Success = this.Engine.WorkflowManager.AddClause(wClause);
                    result.Extend = model.ParentId;
                }

                return Json(result, JsonRequestBehavior.AllowGet);
            }));
        }
 public List <OThinker.H3.Controllers.ViewModels.WorkflowNode> GetWorkflowNodeByParentCode(
     string parentCode,
     string searchKey,
     FunctionNodeType targetNodeType,
     bool ShowFavorite,
     List <FunctionNode> nodes,
     List <string> favoriteWorkflowCodes,
     List <string> aclWorkflowCodes,
     List <PublishedWorkflowTemplateHeader> headers,
     Dictionary <string, string> WorkflowIcons,
     Dictionary <string, string> WorkflowIconFileNames)
 {
     return(GetWorkflowNodeByParentCode(parentCode, searchKey, targetNodeType, ShowFavorite, nodes, favoriteWorkflowCodes, aclWorkflowCodes, headers, WorkflowIcons, WorkflowIconFileNames, false, false));
 }
Ejemplo n.º 5
0
        private AbstractPortalTreeHandler CreateHandler(string FunctionType, string ContainDraft, string IsBizObjectMode, string IsSharedPacket)
        {
            FunctionNodeType nodeType = (FunctionNodeType)Enum.Parse(typeof(FunctionNodeType), FunctionType);

            switch (nodeType)
            {
            case FunctionNodeType.ProcessModel:    //流程模型
            case FunctionNodeType.BizWFFolder:
            case FunctionNodeType.BizFolder:
            case FunctionNodeType.BizWorkflowPackage:
                return(new WorkflowHandler(ContainDraft, IsBizObjectMode, IsSharedPacket, this));

            default:
                return(new FunctionHandler(this));
            }
        }
        /// <summary>
        /// 获取加载数据地址
        /// </summary>
        /// <param name="typeCode">加载数据类型,如加载组织,加载公司,加载部门</param>
        /// <param name="funCode">加载数据的编码,如公司ID,部门ID</param>
        /// <returns></returns>
        protected string GetLoadDataUrl(string FunctionId, string FunctionCode, FunctionNodeType FunctionType, string OwnSchemaCode = "")
        {
            string loadDataUrl = string.Format(controller.PortalRoot + "/Index/LoadTreeData/?{0}={1}&{2}={3}&{4}={5}"
                                               , FunctionIDStr
                                               , HttpUtility.UrlEncode(FunctionId)
                                               , FunctionCodeStr
                                               , HttpUtility.UrlEncode(FunctionCode)
                                               , FunctionTypeStr
                                               , HttpUtility.UrlEncode(FunctionType.ToString()));

            if (!string.IsNullOrEmpty(OwnSchemaCode))
            {
                loadDataUrl = string.Format(loadDataUrl + "&{0}={1}", OwnSchemaCodeStr, HttpUtility.UrlEncode(OwnSchemaCode));
            }
            return(loadDataUrl);
        }
Ejemplo n.º 7
0
        private AbstractPortalTreeHandler CreateHandler(string functionType)
        {
            FunctionNodeType nodeType = (FunctionNodeType)Enum.Parse(typeof(FunctionNodeType), functionType);

            switch (nodeType)
            {
            case FunctionNodeType.Organization:    //加载组织机构子节点
                return(new OrganizationHandler(this));

            case FunctionNodeType.ProcessModel:     //流程模型
            case FunctionNodeType.Report:           //报表模型qiancheng
            case FunctionNodeType.ReportFolder:     //报表目录
            case FunctionNodeType.ReportFolderPage: //报表页
            case FunctionNodeType.BizWFFolder:
            case FunctionNodeType.BizFolder:
                return(new ProcessModelHandler(this)); //流程目录

            case FunctionNodeType.ServiceFolder:       //业务服务目录
                return(new BizServiceChildren(this));

            case FunctionNodeType.RuleFolder:    //业务规则目录
                return(new RuleFolderChildren(this));

            case FunctionNodeType.BizRule:
                return(new BizRuleChildren(this));

            case FunctionNodeType.BizWorkflowPackage:    //流程包
                return(new WrokflowPackageChildren(this));

            case FunctionNodeType.BizObject:    //数据模型
                return(new BizOjectChildren(this));

            case FunctionNodeType.Apps:    //应用程序
                return(new AppsChildren(this));

            case FunctionNodeType.AppNavigation:    //应用列表
                return(new AppNavigationChildren(this));

            case FunctionNodeType.BPAReportSource:      //数据源
            case FunctionNodeType.ReportTemplateFolder: //报表模板目录
                return(new ReportTreeHander(this));

            default:
                return(new FunctionHandler(this));
            }
        }
Ejemplo n.º 8
0
        /// <summary>
        /// 表单信息验证
        /// </summary>
        /// <param name="NodeType">节点类型</param>
        /// <param name="model">工作流程信息</param>
        /// <param name="result">out:验证结果</param>
        /// <returns>验证是否通过</returns>
        private bool Validator(FunctionNodeType NodeType, WorkflowPackageViewModel model, out ActionResult result)
        {
            result = new ActionResult();
            if (string.IsNullOrWhiteSpace(model.Code.Trim()) ||
                string.IsNullOrWhiteSpace(model.DisplayName.Trim()))
            {
                result.Success = false;
                result.Message = "WorkflowPackage.Msg2";
                return(false);
            }
            if (model.Code.Trim().Replace(" ", string.Empty).Length != model.Code.Trim().Length)
            {
                result.Success = false;
                result.Message = "WorkflowPackage.Msg3";
                return(false);
            }

            int MaxColeLength = NodeType == FunctionNodeType.BizWorkflowPackage ? BizObjectSchema.MaxCodeLength : FunctionNode.MaxCodeLength;

            if (model.Code.Trim().Length > MaxColeLength)
            {
                result.Success = false;
                result.Message = "WorkflowPackage.Msg4";
                result.Extend  = MaxColeLength;
            }

            //校验编码规范
            System.Text.RegularExpressions.Regex regex = new System.Text.RegularExpressions.Regex(BizObjectSchema.CodeRegex);
            if (!regex.Match(model.Code.Trim()).Success)
            {
                result.Success = false;
                result.Message = "WorkflowPackage.SchemaMsg";
                return(false);
            }

            if (model.DisplayName.Trim().Length > FunctionNode.MaxNameLength)
            {
                result.Success = false;
                result.Message = "WorkflowPackage.Msg4";
                result.Extend  = FunctionNode.MaxNameLength;
                return(false);
            }
            return(true);
        }
        private AbstractPortalTreeHandler CreateHandler(ControllerBase context, FunctionNodeType nodeType)
        {
            switch (nodeType)
            {
            case FunctionNodeType.Organization:    //加载组织机构子节点
                return(new OrganizationHandler(context));

            case FunctionNodeType.ProcessModel:    //流程模型
            case FunctionNodeType.BizWFFolder:
            case FunctionNodeType.BizFolder:
                return(new ProcessModelHandler(context)); //流程目录

            case FunctionNodeType.ServiceFolder:          //业务服务目录
                return(new BizServiceChildren(context));

            case FunctionNodeType.RuleFolder:    //业务规则目录
                return(new RuleFolderChildren(context));

            case FunctionNodeType.BizRule:
                return(new BizRuleChildren(context));

            case FunctionNodeType.BizWorkflowPackage:    //流程包
                return(new WrokflowPackageChildren(context));

            case FunctionNodeType.BizObject:    //数据模型
                return(new BizOjectChildren(context));

            case FunctionNodeType.Apps:    //应用程序
                return(new AppsChildren(context));

            case FunctionNodeType.AppNavigation:    //应用列表
                return(new AppNavigationChildren(context));

            case FunctionNodeType.BPAReportSource:      //数据源
            case FunctionNodeType.ReportTemplateFolder: //报表模板目录
                return(new ReportTreeHander(context));

            default:
                return(new FunctionHandler(context));
            }
        }
        public JsonResult SaveWorkflowPackage(ReportPagePackageViewModel model)
        {
            return(ExecuteFunctionRun(() =>
            {
                ActionResult result = new ActionResult();

                FunctionNodeType nodeType = string.IsNullOrWhiteSpace(model.ObjectType) ? FunctionNodeType.BizWorkflowPackage : (FunctionNodeType)Enum.Parse(typeof(FunctionNodeType), model.ObjectType);

                if (!Validator(nodeType, model, out result))
                {
                    return Json(result, JsonRequestBehavior.AllowGet);
                }

                if (nodeType == FunctionNodeType.ReportFolder) //报表页
                {
                    result = SavePackage(model);
                    return Json(result, JsonRequestBehavior.AllowGet);
                }
                return Json(result, JsonRequestBehavior.AllowGet);
            }));
        }
Ejemplo n.º 11
0
        private AbstractPortalTreeHandler CreateHandler(string functionType)
        {
            FunctionNodeType nodeType = (FunctionNodeType)Enum.Parse(typeof(FunctionNodeType), functionType);

            switch (nodeType)
            {
            case FunctionNodeType.Organization:    //加载组织机构子节点
                return(new OrganizationHandler(this));

            //case FunctionNodeType.ProcessModel://流程模型
            //case FunctionNodeType.BizWFFolder:
            //case FunctionNodeType.BizFolder:
            //    return new ProcessModelHandler(context);//流程目录
            case FunctionNodeType.ServiceFolder:    //业务服务目录
                return(new BizServiceChildren(this));

            case FunctionNodeType.RuleFolder:    //业务规则目录
                return(new RuleFolderChildren(this));

            case FunctionNodeType.BizRule:
                return(new BizRuleChildren(this));

            //case FunctionNodeType.BizWorkflowPackage://流程包
            //    return new WrokflowPackageChildren(context);
            //case FunctionNodeType.BizObject://数据模型
            //    return new BizOjectChildren(context);
            //case FunctionNodeType.Apps://应用程序
            //    return new AppsChildren(context);
            //case FunctionNodeType.AppNavigation://应用列表
            //    return new AppNavigationChildren(context);
            //case FunctionNodeType.BPAReportSource://数据源
            //case FunctionNodeType.ReportTemplateFolder://报表模板目录
            //    return new ReportTreeHander(context);
            default:
                var obj   = UserValidator;
                var child = this.UserValidator;
                return(new FunctionHandler(this));
            }
        }
        public List <OThinker.H3.Controllers.ViewModels.WorkflowNode> GetWorkflowNodeByParentCode(
            string parentCode,
            string searchKey,
            FunctionNodeType targetNodeType,
            bool ShowFavorite,
            List <FunctionNode> nodes,
            List <string> favoriteWorkflowCodes,
            List <string> aclWorkflowCodes,
            List <PublishedWorkflowTemplateHeader> headers,
            Dictionary <string, string> WorkflowIcons,
            Dictionary <string, string> WorkflowIconFileNames,
            bool IsShared,
            bool Isbilingual)
        {
            List <OThinker.H3.Controllers.ViewModels.WorkflowNode> WorkflowNodes = new List <OThinker.H3.Controllers.ViewModels.WorkflowNode>();

            List <FunctionNode> childrenNodes = this.GetChildNodesByParentCode(parentCode, nodes, targetNodeType);// nodes.Where(p => p.ParentCode.ToLower() == parentCode.ToLower()).ToList();

            if (childrenNodes == null || childrenNodes.Count == 0)
            {
                return(null);
            }
            if (IsShared)
            {
                childrenNodes = childrenNodes.Where(s => s.NodeType != FunctionNodeType.BizObject).ToList();
            }
            System.Collections.ArrayList sortedChildrenNodes = new System.Collections.ArrayList();
            System.Collections.ArrayList keyList             = new System.Collections.ArrayList();
            foreach (FunctionNode c in childrenNodes)
            {
                sortedChildrenNodes.Add(c);
                keyList.Add(c.SortKey);
            }
            sortedChildrenNodes = OThinker.Data.Sorter.Sort(keyList, sortedChildrenNodes);

            List <PublishedWorkflowTemplateHeader> tmpHeaders;

            //读取常用流程
            if (parentCode == FunctionNode.Category_ProcessModel_Code && ShowFavorite)
            {
                string DisplayName = string.Empty;
                string Icon        = string.Empty;
                if (Isbilingual)
                {
                    DisplayName = "常用流程"; Icon = "fa fa-folder-o";
                }
                else
                {
                    DisplayName = "FrequentFlow"; Icon = null;
                }
                OThinker.H3.Controllers.ViewModels.WorkflowNode FavoriteNode = new OThinker.H3.Controllers.ViewModels.WorkflowNode()
                {
                    IsLeaf      = false,
                    ObjectID    = Guid.NewGuid().ToString(),
                    DisplayName = DisplayName,
                    children    = new List <OThinker.H3.Controllers.ViewModels.WorkflowNode>(),
                    Icon        = Icon
                };
                foreach (string workflowcode in aclWorkflowCodes)
                {
                    tmpHeaders = FindTemplateHeaders(headers, workflowcode);
                    if (tmpHeaders != null)
                    {
                        foreach (PublishedWorkflowTemplateHeader tmpHeader in tmpHeaders)
                        {
                            if (favoriteWorkflowCodes.Where(c => string.Compare(c, tmpHeader.WorkflowCode, true) == 0).Count() != 0)
                            {
                                FavoriteNode.children.Add(new OThinker.H3.Controllers.ViewModels.WorkflowNode()
                                {
                                    IsLeaf        = true,
                                    ObjectID      = tmpHeader.ObjectID,
                                    Code          = tmpHeader.WorkflowCode,
                                    DisplayName   = this.GetDisplayName(nodes, tmpHeader.WorkflowCode, tmpHeader.DisplayName),
                                    PublishedTime = tmpHeader.PublishTime.ToShortDateString(),
                                    Version       = tmpHeader.WorkflowVersion,
                                    Frequent      = 1,
                                    Icon          = "icon-liuchengmoxing"
                                });
                            }
                        }
                    }
                }
                if (FavoriteNode.children.Count > 0)
                {
                    WorkflowNodes.Add(FavoriteNode);
                }
            }

            foreach (FunctionNode node in sortedChildrenNodes)
            {
                if (targetNodeType != node.NodeType && node.NodeType != FunctionNodeType.BizObject && node.NodeType != FunctionNodeType.BizFolder && node.NodeType != FunctionNodeType.BizWFFolder)
                {
                    continue;
                }

                if (searchKey != string.Empty &&
                    (node.DisplayName.IndexOf(searchKey) == -1 && (node.NodeType == FunctionNodeType.BizWorkflowPackage || node.NodeType == FunctionNodeType.BizObject || node.NodeType == FunctionNodeType.BizWorkflow)))
                {
                    continue;
                }

                switch (node.NodeType)
                {
                case FunctionNodeType.BizWorkflowPackage:
                    tmpHeaders = FindTemplateHeaders(headers, node.Code);

                    WorkflowNodes.Add(new OThinker.H3.Controllers.ViewModels.WorkflowNode()
                    {
                        IsLeaf        = true,
                        ObjectID      = node.ObjectID,                         // tmpHeader.ObjectID,
                        Code          = node.Code,                             //.WorkflowCode,
                        DisplayName   = node.DisplayName,                      // string.IsNullOrEmpty(tmpHeader.DisplayName) ? node.DisplayName : tmpHeader.DisplayName,
                        PublishedTime = DateTime.MinValue.ToShortDateString(), // tmpHeader.PublishTime,
                        Version       = -1,                                    // tmpHeader.WorkflowVersion,
                        Icon          = "icon-liuchengshujumoxing",
                        Frequent      = 0                                      //(favoriteWorkflowCodes.Where(c => string.Compare(c, tmpHeader.WorkflowCode, true) == 0).Count() != 0 ? 1 : 0)
                    });
                    break;

                case FunctionNodeType.BizObject:
                    WorkflowNodes.Add(new OThinker.H3.Controllers.ViewModels.WorkflowNode()
                    {
                        IsLeaf        = true,
                        ObjectID      = node.ObjectID,                         // tmpHeader.ObjectID,
                        Code          = node.Code,                             //.WorkflowCode,
                        DisplayName   = node.DisplayName,                      // string.IsNullOrEmpty(tmpHeader.DisplayName) ? node.DisplayName : tmpHeader.DisplayName,
                        PublishedTime = DateTime.MinValue.ToShortDateString(), // tmpHeader.PublishTime,
                        Version       = -1,                                    // tmpHeader.WorkflowVersion,
                        Icon          = "icon-zhushujushili",
                        Frequent      = 0                                      //(favoriteWorkflowCodes.Where(c => string.Compare(c, tmpHeader.WorkflowCode, true) == 0).Count() != 0 ? 1 : 0)
                    });
                    break;

                case FunctionNodeType.BizWorkflow:
                    tmpHeaders = FindTemplateHeaders(headers, node.Code);
                    foreach (PublishedWorkflowTemplateHeader tmpHeader in tmpHeaders)
                    {
                        WorkflowNodes.Add(new OThinker.H3.Controllers.ViewModels.WorkflowNode()
                        {
                            IsLeaf        = true,
                            ObjectID      = tmpHeader.ObjectID,
                            Code          = tmpHeader.WorkflowCode,
                            DisplayName   = string.IsNullOrEmpty(tmpHeader.DisplayName) ? node.DisplayName : tmpHeader.DisplayName,
                            PublishedTime = tmpHeader.PublishTime.ToShortDateString(),
                            Version       = tmpHeader.WorkflowVersion,
                            Icon          = "icon-liuchengmoxing",
                            Frequent      = (favoriteWorkflowCodes.Where(c => string.Compare(c, tmpHeader.WorkflowCode, true) == 0).Count() != 0 ? 1 : 0)
                        });
                        headers.Remove(tmpHeader);
                    }
                    break;

                default:
                    List <OThinker.H3.Controllers.ViewModels.WorkflowNode> nodeChildren = GetWorkflowNodeByParentCode(node.Code,
                                                                                                                      searchKey,
                                                                                                                      targetNodeType,
                                                                                                                      ShowFavorite,
                                                                                                                      nodes, favoriteWorkflowCodes, aclWorkflowCodes, headers,
                                                                                                                      WorkflowIcons,
                                                                                                                      WorkflowIconFileNames,
                                                                                                                      IsShared,
                                                                                                                      false);
                    if (nodeChildren != null && nodeChildren.Count > 0)
                    {
                        WorkflowNodes.Add(new OThinker.H3.Controllers.ViewModels.WorkflowNode()
                        {
                            IsLeaf      = false,
                            ObjectID    = node.ObjectID,
                            Code        = node.Code,
                            DisplayName = node.DisplayName,
                            children    = nodeChildren,
                            Icon        = "fa fa-folder-o"
                        });
                    }
                    break;
                }
            }
            //设置图标
            foreach (OThinker.H3.Controllers.ViewModels.WorkflowNode n in WorkflowNodes)
            {
                if (n.Code != null)
                {
                    if (WorkflowIcons.ContainsKey(n.Code.ToLower()))
                    {
                        n.Icon = WorkflowIcons[n.Code.ToLower()];
                    }
                    if (WorkflowIconFileNames.ContainsKey(n.Code.ToLower()))
                    {
                        n.IconFileName = WorkflowIconFileNames[n.Code.ToLower()];
                    }
                }
                if (n.children != null)
                {
                    foreach (OThinker.H3.Controllers.ViewModels.WorkflowNode child in n.children)
                    {
                        if (child.Code != null)
                        {
                            if (WorkflowIcons.ContainsKey(child.Code.ToLower()))
                            {
                                child.Icon = WorkflowIcons[child.Code.ToLower()];
                            }
                            if (WorkflowIconFileNames.ContainsKey(child.Code.ToLower()))
                            {
                                child.IconFileName = WorkflowIconFileNames[child.Code.ToLower()];
                            }
                        }
                    }
                }
            }
            return(WorkflowNodes);
        }
 private List <FunctionNode> GetChildNodesByParentCode(string parentCode, List <FunctionNode> nodes, FunctionNodeType targetNodeType)
 {
     if (targetNodeType == FunctionNodeType.BizWorkflowPackage)
     {
         List <FunctionNode> children = nodes.Where(p => p.ParentCode.ToLower() == parentCode.ToLower()).ToList();
         return(children);
     }
     else
     {
         List <FunctionNode> results = new List <FunctionNode>();
         nodes = nodes.OrderBy(s => s.DisplayName).OrderBy(s => s.SortKey).ToList();
         foreach (FunctionNode node in nodes)
         {
             if (node.NodeType == targetNodeType)
             {
                 FunctionNode parentNode = nodes.Find(n => n.Code == node.ParentCode && n.NodeType == FunctionNodeType.BizWorkflowPackage);
                 if (parentNode != null && parentNode.ParentCode == parentCode)
                 {
                     node.SortKey = parentNode.SortKey;
                     results.Add(node);
                 }
                 if (parentNode != null && parentNode.ParentCode == FunctionNodeType.BizWorkflowPackage.ToString())
                 {
                     node.SortKey = parentNode.SortKey;
                     results.Add(node);
                 }
             }
             else if ((node.NodeType == FunctionNodeType.BizFolder || node.NodeType == FunctionNodeType.BizWFFolder) &&
                      node.ParentCode == parentCode)
             {
                 results.Add(node);
             }
         }
         return(results);
     }
 }
Ejemplo n.º 14
0
        /// <summary>
        /// 删除文件夹
        /// </summary>
        /// <param name="model"></param>
        /// <returns></returns>
        public JsonResult DeleteFolder(string nodeId, string nodeCode, string objectType)
        {
            return(ExecuteFunctionRun(() =>
            {
                nodeCode = HttpUtility.UrlDecode(nodeCode);
                string nodeType = objectType.ToString() ?? "";
                ActionResult result = new ActionResult(true);
                //Node.ID 与Node.Code值相同

                if (string.IsNullOrWhiteSpace(nodeType) ||
                    nodeType.ToLowerInvariant().Equals(FunctionNodeType.BizWorkflowPackage.ToString().ToLowerInvariant()) ||
                    nodeType.ToLowerInvariant().Equals(FunctionNodeType.BizFolder.ToString().ToLowerInvariant()) ||
                    nodeType.ToLowerInvariant().Equals(FunctionNodeType.BizWFFolder.ToString().ToLowerInvariant())
                    )
                {
                    FunctionNode node = this.Engine.FunctionAclManager.GetFunctionNode(nodeId);
                    if (node.NodeType == FunctionNodeType.BizWorkflowPackage)
                    {
                        DeleteReportSourceAndTemplate(node.Code);//删除关联的报表模板和报表数据源模板
                        FunctionNode[] Fs = this.Engine.FunctionAclManager.GetFunctionNodes();
                        foreach (FunctionNode f in Fs)
                        {
                            if (!string.IsNullOrEmpty(f.Url))
                            {
                                if (f.Url.IndexOf("SchemaCode") > -1)
                                {
                                    string[] memebrs = f.Url.Split('&');
                                    foreach (string schemastring in memebrs)
                                    {
                                        if (schemastring.IndexOf("SchemaCode") > -1)
                                        {
                                            string schemacode = schemastring.Replace("SchemaCode=", "");
                                            if (node.Code == schemacode)
                                            {
                                                this.Engine.FunctionAclManager.RemoveFunctionNode(f.ObjectID, false);
                                            }
                                        }
                                    }
                                }
                            }
                        }
                        this.Engine.LogWriter.Write(string.Format("--------------------->删除节点{0},操作用户{1}",
                                                                  node.DisplayName,
                                                                  this.UserValidator.UserCode));
                        this.Engine.AppPackageManager.DeleteAppPackage(node);
                        this.Engine.WorkflowConfigManager.DeleteFavoriteWorkflow(this.UserValidator.UserID, node.Code);
                    }
                    else if (node.NodeType == FunctionNodeType.ReportTemplateFolder) // 删除报表模板目录
                    {
                        Analytics.Reporting.ReportTemplate[] reportTemplates =
                            this.Engine.Analyzer.GetReportTemplateByFolderCode(node.Code);
                        //存在报表模板不能直接删除
                        if (reportTemplates != null && reportTemplates.Length > 0)
                        {
                            result.Success = false;
                        }
                        else
                        {
                            result.Success = this.Engine.FunctionAclManager.RemoveFunctionNode(nodeId, false);
                        }
                    }
                    else
                    {
                        if (node.NodeType == FunctionNodeType.RuleFolder)
                        {
                            //检测是否有子目录
                            FunctionNode[] Folders = this.Engine.FunctionAclManager.GetFunctionNodesByParentCode(nodeCode);
                            BizService[] bizServices = this.Engine.BizBus.GetBizServicesByFolderCode(nodeCode);
                            if ((Folders != null && Folders.Length > 0) || (bizServices != null && bizServices.Length > 0))
                            {
                                result.Success = false;
                                result.Message = "msgGlobalString.HasChildNotDelete";
                                return Json(result);
                            }
                            result.Success = this.Engine.FunctionAclManager.RemoveFunctionNode(nodeId, false);
                        }//流程目录
                        else if (node.NodeType == FunctionNodeType.BizWFFolder)
                        {
                            //检测是否有子目录
                            FunctionNode[] Folders = this.Engine.FunctionAclManager.GetFunctionNodesByParentCode(nodeCode);
                            DataModel.BizObjectSchema bizSchema = this.Engine.BizObjectManager.GetPublishedSchema(nodeCode);
                            if ((Folders != null && Folders.Length > 0) || bizSchema != null)
                            {
                                result.Success = false;
                                result.Message = "msgGlobalString.HasChildNotDelete";
                                return Json(result);
                            }
                            result.Success = this.Engine.FunctionAclManager.RemoveFunctionNode(nodeId, false);
                        }
                        else
                        {
                            result.Success = this.Engine.FunctionAclManager.RemoveFunctionNode(nodeId, false);
                        }
                    }
                }
                else
                {
                    FunctionNodeType type = (FunctionNodeType)Enum.Parse(typeof(FunctionNodeType), nodeType);
                    switch (type)
                    {
                    case FunctionNodeType.BizSheet:
                        var sheet = this.Engine.BizSheetManager.GetBizSheetByCode(nodeCode);
                        if (sheet.IsShared)
                        {
                            //共享流程包,只有主包可以删除共享表单
                            if (nodeId == sheet.ObjectID)
                            {
                                result.Success = this.Engine.BizSheetManager.DeleteBizSheet(nodeCode);
                            }
                            else
                            {
                                result.Success = false;
                            }
                        }
                        else
                        {
                            result.Success = this.Engine.BizSheetManager.DeleteBizSheet(nodeCode);
                        }
                        break;

                    case FunctionNodeType.BizWorkflow:
                        this.Engine.WorkflowManager.RemoveClause(nodeCode);
                        result.Success = true;
                        break;
                    }
                }

                if (result.Success)
                {
                    result.Message = "ProcessFolder.Msg_DeleteSuccess";
                }
                else
                {
                    result.Message = "ProcessFolder.Msg_DeleteFailed";
                    //ajaxResult.ResultMsg = this.PortalResource.GetString("Msg_DeleteFailed") + ":" + this.PortalResource.GetString("AddProcessFolder_Mssg1");
                }

                return Json(result);
            }));
        }
 /// <summary>
 /// 获取流程模板类型加载数据地址
 /// </summary>
 /// <param name="typeCode">加载数据类型,如加载组织,加载公司,加载部门</param>
 /// <param name="funCode">加载数据的编码,如公司ID,部门ID</param>
 /// <param name="containDraft">是否包含设计中的流程模板</param>
 /// <returns></returns>
 protected string GetLoadWorkflowDataUrl(string FunctionId, string FunctionCode, FunctionNodeType FunctionType, bool containDraft, bool IsBizObjectMode)
 {
     return(string.Format(controller.PortalRoot + "/WorkflowTree/CreateWorkflowTree?{0}={1}&{2}={3}&{4}={5}&{6}={7}&{8}={9}"
                          , FunctionIDStr
                          , HttpUtility.UrlEncode(FunctionId)
                          , FunctionCodeStr
                          , HttpUtility.UrlEncode(FunctionCode)
                          , FunctionTypeStr
                          , HttpUtility.UrlEncode(FunctionType.ToString())
                          , ContainDraftStr
                          , HttpUtility.UrlEncode((containDraft ? true : false).ToString().ToLower())
                          , IsBizObjectModeStr
                          , HttpUtility.UrlEncode((IsBizObjectMode ? true : false).ToString().ToLower())));
 }
 /// <summary>
 /// 获取流程模板类型加载数据地址
 /// </summary>
 /// <param name="typeCode">加载数据类型,如加载组织,加载公司,加载部门</param>
 /// <param name="funCode">加载数据的编码,如公司ID,部门ID</param>
 /// <returns></returns>
 protected string GetLoadWorkflowDataUrl(string FunctionId, string FunctionCode, FunctionNodeType FunctionType)
 {
     return(GetLoadWorkflowDataUrl(FunctionId, FunctionCode, FunctionType, false, false));
 }