Example #1
0
        /// <summary>
        /// 保存工作流程信息
        /// </summary>
        /// <param name="model">工作流程信息</param>
        /// <returns>是否成功</returns>
        private ActionResult SavePackage(WorkflowPackageViewModel model)
        {
            ActionResult result       = new ActionResult();
            FunctionNode functionNode = new FunctionNode();

            if (string.IsNullOrEmpty(model.ObjectID))
            {
                if (!ValidateExist(model.Code, out result))
                {
                    return(result);
                }
                functionNode.ParentCode = model.Folder;
                functionNode.Code       = model.Code.Trim();
                functionNode.NodeType   = FunctionNodeType.BizWorkflowPackage;
                int sortKey;
                if (Int32.TryParse(model.SortKey, out sortKey))
                {
                    functionNode.SortKey = sortKey;
                }
                functionNode.DisplayName = model.DisplayName.Trim();
                result.Extend            = model.Folder;
                //添加流程包里的数据
                result.Success = this.Engine.AppPackageManager.AddAppPackage(functionNode,
                                                                             (StorageType)int.Parse(model.StorageType), model.IsShared, model.IsQuotePacket, model.BindPacket);

                //使用了共享包,复制共享包的流程模型
                if (model.IsQuotePacket)
                {
                    //复制流程包的流程模板
                    OThinker.H3.WorkflowTemplate.WorkflowClause[] WorkflowClauses = this.Engine.WorkflowManager.GetClausesBySchemaCode(model.BindPacket);
                    if (null != WorkflowClauses && WorkflowClauses.Length != 0)
                    {
                        //复制所有的父流程模板
                        WorkflowClauses = WorkflowClauses.Where(s => s.IsShared).ToArray();
                        for (int i = 0; i < WorkflowClauses.Length; i++)
                        {
                            string workflowClauseCode = i == 0 ? model.Code : model.Code + i;
                            //使用共享包的,用共享包的模型创建
                            WorkflowTemplate.DraftWorkflowTemplate template = this.Engine.WorkflowManager.GetDraftTemplate(WorkflowClauses[i].WorkflowCode);
                            if (template == null)
                            {
                                continue;
                            }
                            template.WorkflowCode = workflowClauseCode;
                            this.Engine.WorkflowManager.SaveDraftTemplate(this.UserValidator.UserID, template);
                            //添加流程包时已经默认增加了一个流程模板
                            if (i > 0)
                            {
                                WorkflowTemplate.WorkflowClause wClause = new WorkflowTemplate.WorkflowClause(model.BindPacket, workflowClauseCode, model.DisplayName, WorkflowClauses[i].SortKey);
                                wClause.OwnSchemaCode = model.Code;
                                this.Engine.WorkflowManager.AddClause(wClause);
                            }
                        }
                    }
                }
            }
            else
            {
                functionNode = this.Engine.FunctionAclManager.GetFunctionNode(model.ObjectID);
                int sortKey;
                if (Int32.TryParse(model.SortKey, out sortKey))
                {
                    functionNode.SortKey = sortKey;
                }
                functionNode.DisplayName = model.DisplayName.Trim();
                string nodeParentId = this.Engine.FunctionAclManager.GetFunctionNodeByCode(functionNode.ParentCode).ObjectID;
                functionNode.ParentCode = model.Folder;
                result.Success          = this.Engine.FunctionAclManager.UpdateFunctionNode(functionNode) == ErrorCode.SUCCESS;
                result.Extend           = nodeParentId;
            }
            return(result);
        }
Example #2
0
        /// <summary>
        /// 导出流程包
        /// </summary>
        /// <param name="PackageCode"></param>
        /// <returns></returns>
        public object Export(string PackageCode)
        {
            return(ExecuteFileResultFunctionRun(() =>
            {
                Acl.FunctionNode PackageNode = this.Engine.FunctionAclManager.GetFunctionNodeByCode(PackageCode);

                //流程包
                XmlElement BizWorkflowPackage = XmlDoc.CreateElement(FunctionNodeType.BizWorkflowPackage.ToString());
                BizWorkflowPackage.AppendChild(CreateXmlElement("PackageCode", PackageNode.Code));
                BizWorkflowPackage.AppendChild(CreateXmlElement("PackageName", PackageNode.DisplayName));
                XmlDoc.AppendChild(BizWorkflowPackage);
                BizWorkflowPackage.InnerXml += Convertor.ObjectToXml(PackageNode);

                //数据模型
                BizObjectSchema Schema = this.Engine.BizObjectManager.GetDraftSchema(PackageCode);
                if (Schema != null)
                {
                    BizWorkflowPackage.InnerXml += Convertor.ObjectToXml(Schema);

                    //监听实例
                    BizListenerPolicy policy = this.Engine.BizObjectManager.GetListenerPolicy(Schema.SchemaCode);
                    if (policy != null)
                    {
                        BizWorkflowPackage.InnerXml += Convertor.ObjectToXml(policy);
                    }
                    //定时作业
                    ScheduleInvoker[] scheduleInvokers = this.Engine.BizObjectManager.GetScheduleInvokerList(Schema.SchemaCode);
                    if (scheduleInvokers != null && scheduleInvokers.Length > 0)
                    {
                        XmlElement invokers = XmlDoc.CreateElement("ScheduleInvokers");
                        foreach (ScheduleInvoker item in scheduleInvokers)
                        {
                            invokers.InnerXml += Convertor.ObjectToXml(item);
                        }
                        BizWorkflowPackage.AppendChild(invokers);
                    }
                    //查询列表
                    BizQuery[] queries = this.Engine.BizObjectManager.GetBizQueries(Schema.SchemaCode);
                    if (queries != null && queries.Length > 0)
                    {
                        XmlElement bizQueries = XmlDoc.CreateElement("BizQueries");
                        foreach (BizQuery query in queries)
                        {
                            bizQueries.InnerXml += Convertor.ObjectToXml(query);
                        }
                        BizWorkflowPackage.AppendChild(bizQueries);
                    }
                }

                //表单
                BizSheet[] Sheets = this.Engine.BizSheetManager.GetBizSheetBySchemaCode(PackageCode);
                XmlElement workflowSheets = XmlDoc.CreateElement("BizSheets");
                if (Sheets != null)
                {
                    foreach (BizSheet s in Sheets)
                    {
                        workflowSheets.InnerXml += Convertor.ObjectToXml(s);
                    }
                }
                BizWorkflowPackage.AppendChild(workflowSheets);

                //流程
                WorkflowTemplate.WorkflowClause[] WorkflowClauses = this.Engine.WorkflowManager.GetClausesBySchemaCode(PackageCode);
                XmlElement workflowTemps = XmlDoc.CreateElement("WorkflowTemplates");
                if (WorkflowClauses != null)
                {
                    foreach (WorkflowTemplate.WorkflowClause WorkflowClause in WorkflowClauses)
                    {
                        WorkflowTemplate.DraftWorkflowTemplate workflowTemplate = this.Engine.WorkflowManager.GetDraftTemplate(WorkflowClause.WorkflowCode);
                        //发布后才能导出
                        if (workflowTemplate == null)
                        {
                            continue;
                        }
                        XmlElement workflowTempElement = XmlDoc.CreateElement("WorkflowTemplate");
                        //流程名称
                        workflowTempElement.AppendChild(this.CreateXmlElement("WorkflowTemplateName", WorkflowClause.WorkflowName));
                        //流程图
                        XmlElement workflowDocument = XmlDoc.CreateElement("WorkflowDocument");
                        workflowTemplate.SaveAsXml(XmlDoc, workflowDocument);
                        workflowTempElement.AppendChild(workflowDocument);

                        //流程模拟
                        XmlElement simulationElement = XmlDoc.CreateElement("Simulations");
                        InstanceSimulation[] simulations = this.Engine.SimulationManager.GetSimulationByWorkflow(workflowTemplate.WorkflowCode);
                        if (simulations != null && simulations.Length > 0)
                        {
                            foreach (InstanceSimulation simulation in simulations)
                            {
                                simulationElement.InnerXml += Convertor.ObjectToXml(simulation);
                            }
                        }
                        workflowTempElement.AppendChild(simulationElement);

                        //流程模板簇
                        workflowTempElement.InnerXml += Convertor.ObjectToXml(WorkflowClause);

                        //添加流程模板
                        workflowTemps.AppendChild(workflowTempElement);
                    }
                }
                BizWorkflowPackage.AppendChild(workflowTemps);

                //导出文件
                string path = Server.MapPath("~/TempImages/");
                string fileName = PackageCode + ".xml";

                XmlDoc.Save(path + fileName);

                return File(path + fileName, "application/octect-stream", fileName);
            }));
        }