Ejemplo n.º 1
0
        /// <summary>
        /// 获取流程模板
        /// </summary>
        public JsonResult GetWorkflow(string WorkflowCode)
        {
            return(ExecuteFunctionRun(() =>
            {
                DraftWorkflowTemplate DraftWorkflowTemplate = this.Engine.WorkflowManager.GetDraftTemplate(WorkflowCode + string.Empty);

                return Json(DraftWorkflowTemplate, JsonRequestBehavior.AllowGet);
            }));
        }
Ejemplo n.º 2
0
        /// <summary>
        /// 发布流程模板
        /// </summary>
        public JsonResult PublishWorkflow(WorkflowTemplateViewModel model)
        {
            return(ExecuteFunctionRun(() =>
            {
                DraftWorkflowTemplate DraftWorkflowTemplate = ReadRequestWorkflowTemplate(model);
                if (DraftWorkflowTemplate == null)
                {
                    return Json(new { Result = false, Errors = new List <string>()
                                      {
                                          "Designer.WorkflowHandler_Msg1"
                                      } });
                }

                string WorkflowCode = DraftWorkflowTemplate.WorkflowCode;
                WorkflowClause Clause = this.Engine.WorkflowManager.GetClause(WorkflowCode);
                if (Clause == null)
                {
                    return Json(new { Result = false, Errors = new List <string>()
                                      {
                                          "Designer.WorkflowHandler_Msg2"
                                      } });
                }
                DraftWorkflowTemplate.BizObjectSchemaCode = Clause.BizSchemaCode;

                // 先保存流程模板
                if (!this.Engine.WorkflowManager.SaveDraftTemplate(this.UserValidator.UserID, DraftWorkflowTemplate))
                {
                    return Json(new { Result = false, Errors = new List <string>()
                                      {
                                          "Designer.WorkflowHandler_Msg3"
                                      } });
                }

                OThinker.H3.DataModel.BizObjectSchema schema = this.Engine.BizObjectManager.GetPublishedSchema(Clause.BizSchemaCode);
                OThinker.H3.ValidationResult ValidationResult = DraftWorkflowTemplate.Validate(schema);

                if (!ValidationResult.Valid)
                {
                    return Json(ValidationResult);
                }

                PublishResult PublishResult = this.Engine.WorkflowManager.RegisterWorkflow(this.UserValidator.UserID, DraftWorkflowTemplate.WorkflowCode, true);

                if (PublishResult.Result == (long)OThinker.H3.ErrorCode.SUCCESS)
                {
                    return Json(new { Result = true, Message = new List <string>()
                                      {
                                          "流程发布成功:当前版本号: " + PublishResult.RegisteredVersion.ToString()
                                      } });
                }
                else
                {
                    return Json(new { Result = false, Errors = PublishResult.Errors });
                }
            }));
        }
Ejemplo n.º 3
0
        /// <summary>
        /// 保存流程模板
        /// </summary>
        public JsonResult SaveWorkflow(WorkflowTemplateViewModel model)
        {
            return(ExecuteFunctionRun(() =>
            {
                ActionResult result = new ActionResult();
                try
                {
                    // 读取活动模板定义信息
                    DraftWorkflowTemplate DraftWorkflowTemplate = ReadRequestWorkflowTemplate(model);
                    result.Success = this.Engine.WorkflowManager.SaveDraftTemplate(this.UserValidator.UserID, DraftWorkflowTemplate);
                    result.Message = string.Empty;
                    result.Success = true;
                }
                catch (Exception ex)
                {
                    result.Message = ex.Message;
                    result.Success = false;
                }

                return Json(result);
            }));
        }
Ejemplo n.º 4
0
        /// <summary>
        /// 验证流程模板是否合法
        /// </summary>
        /// <param name="DraftWorkflowTemplate"></param>
        /// <returns></returns>
        public JsonResult ValidateWorkflow(WorkflowTemplateViewModel model)
        {
            return(ExecuteFunctionRun(() =>
            {
                DraftWorkflowTemplate DraftWorkflowTemplate = ReadRequestWorkflowTemplate(model);
                if (DraftWorkflowTemplate != null)
                {
                    OThinker.H3.DataModel.BizObjectSchema schema = this.Engine.BizObjectManager.GetPublishedSchema(DraftWorkflowTemplate.BizObjectSchemaCode);
                    OThinker.H3.ValidationResult ValidationResult = DraftWorkflowTemplate.Validate(schema);

                    return Json(new { Result = ValidationResult.Valid, Errors = ValidationResult.Errors, Warnings = ValidationResult.Warnings });
                }
                else
                {
                    var result = new { Result = false, Errors = new List <string>()
                                       {
                                           "Designer.WorkflowHandler_Msg0"
                                       } };
                    return Json(result);
                }
            }));
        }
Ejemplo n.º 5
0
        DraftWorkflowTemplate ReadRequestWorkflowTemplate(WorkflowTemplateViewModel model)
        {
            string WorkflowString = Server.HtmlDecode(model.WorkflowTemplate);
            //读取活动模板定义信息
            DraftWorkflowTemplate DraftWorkflowTemplate = (DraftWorkflowTemplate)JsonConvert.DeserializeObject(WorkflowString, typeof(DraftWorkflowTemplate));

            if (DraftWorkflowTemplate == null)
            {
                return(null);
            }

            List <Activity> lstActivities = new List <Activity>();

            #region 读取活动

            //Start
            string          StartActivityString = Server.HtmlDecode(model.StartActivities);
            StartActivity[] StartActivities     = (StartActivity[])JsonConvert.DeserializeObject(StartActivityString, typeof(StartActivity[]));
            if (StartActivities != null)
            {
                foreach (StartActivity activity in StartActivities)
                {
                    lstActivities.Add(activity);
                }
            }

            //End
            string        EndActivityString = Server.HtmlDecode(model.EndActivities);
            EndActivity[] EndActivities     = (EndActivity[])JsonConvert.DeserializeObject(EndActivityString, typeof(EndActivity[]));
            if (EndActivities != null)
            {
                foreach (EndActivity activity in EndActivities)
                {
                    lstActivities.Add(activity);
                }
            }


            //FillSheet
            string FillSheetActivityString          = Server.HtmlDecode(model.FillSheetActivities);
            FillSheetActivity[] FillSheetActivities = (FillSheetActivity[])JsonConvert.DeserializeObject(FillSheetActivityString, typeof(FillSheetActivity[]));
            if (FillSheetActivities != null)
            {
                foreach (FillSheetActivity activity in FillSheetActivities)
                {
                    lstActivities.Add(activity);
                }
            }

            //Approve
            string            ApproveActivityString = Server.HtmlDecode(model.ApproveActivities);
            ApproveActivity[] ApproveActivities     = (ApproveActivity[])JsonConvert.DeserializeObject(ApproveActivityString, typeof(ApproveActivity[]));
            if (ApproveActivities != null)
            {
                foreach (ApproveActivity activity in ApproveActivities)
                {
                    lstActivities.Add(activity);
                }
            }

            //Circulate
            string CirculateActivityString          = Server.HtmlDecode(model.CirculateActivities);
            CirculateActivity[] CirculateActivities = (CirculateActivity[])JsonConvert.DeserializeObject(CirculateActivityString, typeof(CirculateActivity[]));
            if (CirculateActivities != null)
            {
                foreach (CirculateActivity activity in CirculateActivities)
                {
                    //ERROR:
                    activity.ParticipateType = ActivityParticipateType.MultiParticipants;
                    lstActivities.Add(activity);
                }
            }

            //Notify
            string           NotifyActivityString = Server.HtmlDecode(model.NotifyActivities);
            NotifyActivity[] NotifyActivities     = (NotifyActivity[])JsonConvert.DeserializeObject(NotifyActivityString, typeof(NotifyActivity[]));
            if (NotifyActivities != null)
            {
                foreach (NotifyActivity activity in NotifyActivities)
                {
                    lstActivities.Add(activity);
                }
            }

            //Wait
            string         WaitActivityString = Server.HtmlDecode(model.WaitActivities);
            WaitActivity[] WaitActivities     = (WaitActivity[])JsonConvert.DeserializeObject(WaitActivityString, typeof(WaitActivity[]));
            if (WaitActivities != null)
            {
                foreach (WaitActivity activity in WaitActivities)
                {
                    lstActivities.Add(activity);
                }
            }

            //Connection
            string ConnectionActivityString           = Server.HtmlDecode(model.ConnectionActivities);
            ConnectionActivity[] ConnectionActivities = (ConnectionActivity[])JsonConvert.DeserializeObject(ConnectionActivityString, typeof(ConnectionActivity[]));
            if (ConnectionActivities != null)
            {
                foreach (ConnectionActivity activity in ConnectionActivities)
                {
                    lstActivities.Add(activity);
                }
            }

            //BizAction
            string BizActionActivityString          = Server.HtmlDecode(model.BizActionActivities);
            BizActionActivity[] BizActionActivities = (BizActionActivity[])JsonConvert.DeserializeObject(BizActionActivityString, typeof(BizActionActivity[]));
            if (BizActionActivities != null)
            {
                foreach (BizActionActivity activity in BizActionActivities)
                {
                    lstActivities.Add(activity);
                }
            }

            //SubInstance
            string SubInstanceActivityString            = Server.HtmlDecode(model.SubInstanceActivities);
            SubInstanceActivity[] SubInstanceActivities = (SubInstanceActivity[])JsonConvert.DeserializeObject(SubInstanceActivityString, typeof(SubInstanceActivity[]));
            if (SubInstanceActivities != null)
            {
                foreach (SubInstanceActivity activity in SubInstanceActivities)
                {
                    lstActivities.Add(activity);
                }
            }

            #endregion

            DraftWorkflowTemplate.Activities = lstActivities.ToArray();

            return(DraftWorkflowTemplate);
        }
Ejemplo n.º 6
0
        /// <summary>
        /// 读取导入的XML文件
        /// </summary>
        /// <param name="mapPath"></param>
        private void ReadXmlFile(WorkflowPackageImportViewModel model)
        {
            //从服务器加载
            XmlDocument xmlDoc = new XmlDocument();

            xmlDoc.LoadXml(Session[model.XMLString].ToString());
            XmlElement BizWorkflowPackage = xmlDoc.DocumentElement;//根节点

            //流程包编码、名称
            PackageCode = BizWorkflowPackage.GetElementsByTagName("PackageCode")[0].InnerXml;
            PackageName = BizWorkflowPackage.GetElementsByTagName("PackageName")[0].InnerXml;
            //流程包
            XmlNodeList packageNodes = BizWorkflowPackage.GetElementsByTagName("FunctionNode");

            if (packageNodes != null && packageNodes.Count > 0)
            {
                XmlNode openNewWindow = packageNodes[0].SelectSingleNode("OpenNewWindow");
                if (openNewWindow != null)
                {
                    openNewWindow.InnerText = openNewWindow.InnerText.ToLower();
                }
                package            = Convertor.XmlToObject(typeof(FunctionNode), packageNodes[0].OuterXml) as FunctionNode;
                package.ParentCode = model.ParentCode;
            }

            //数据模型
            XmlNodeList bizObjectSchemaNodes = BizWorkflowPackage.GetElementsByTagName("BizObjectSchema");

            if (bizObjectSchemaNodes != null && bizObjectSchemaNodes.Count > 0)
            {
                BizObjectSchema = (DataModel.BizObjectSchema)Convertor.XmlToObject(typeof(DataModel.BizObjectSchema), bizObjectSchemaNodes[0].OuterXml);
                //监听实例
                XmlNodeList bizListenerPolicyNodes = BizWorkflowPackage.GetElementsByTagName("BizListenerPolicy");
                if (bizListenerPolicyNodes != null && bizListenerPolicyNodes.Count > 0)
                {
                    bizListenerPolicy = Convertor.XmlToObject(typeof(BizListenerPolicy), bizListenerPolicyNodes[0].OuterXml) as BizListenerPolicy;
                }
                //定时作业
                XmlNodeList scheduleInvokerNodes = BizWorkflowPackage.GetElementsByTagName("ScheduleInvokers");
                if (scheduleInvokerNodes != null && scheduleInvokerNodes.Count > 0)
                {
                    scheduleInvokerList = new List <ScheduleInvoker>();
                    foreach (XmlNode scheduleInvoker in scheduleInvokerNodes[0].ChildNodes)
                    {
                        scheduleInvokerList.Add(Convertor.XmlToObject(typeof(ScheduleInvoker), scheduleInvoker.OuterXml) as ScheduleInvoker);
                    }
                }
                //查询列表
                XmlNodeList bizQueryNodes = BizWorkflowPackage.GetElementsByTagName("BizQueries");
                if (bizQueryNodes != null && bizQueryNodes.Count > 0)
                {
                    bizQueryList = new List <BizQuery>();
                    foreach (XmlNode query in bizQueryNodes[0].ChildNodes)
                    {
                        bizQueryList.Add(Convertor.XmlToObject(typeof(BizQuery), query.OuterXml) as BizQuery);
                    }
                }
            }

            //流程表单
            XmlNode     SheetRoot = BizWorkflowPackage.GetElementsByTagName("BizSheets")[0];
            XmlNodeList Sheets    = ((XmlElement)SheetRoot).GetElementsByTagName("BizSheet");

            BizSheets = new List <BizSheet>();
            foreach (XmlNode node in Sheets)
            {
                BizSheet sheet = (BizSheet)Convertor.XmlToObject(typeof(BizSheet), node.OuterXml);
                if (sheet.SheetType == SheetType.DefaultSheet)
                {//清空默认表单
                    sheet.SheetAddress = string.Empty;
                }
                var BizSheetModel = (BizSheet)Convertor.XmlToObject(typeof(BizSheet), node.OuterXml);
                //处理旧版本的默认表单的发起时间绑定字段是OriginateDate 而新版本的是OriginateTime 做兼容处理
                if (BizSheetModel.DesignModeContent != null)
                {
                    BizSheetModel.DesignModeContent = BizSheetModel.DesignModeContent.Replace(@"OriginateDate", "OriginateTime");
                }
                if (BizSheetModel.RuntimeContent != null)
                {
                    BizSheetModel.RuntimeContent = BizSheetModel.RuntimeContent.Replace(@"OriginateDate", "OriginateTime");
                }


                BizSheets.Add(BizSheetModel);
            }

            //流程模板
            XmlNode     TemplateRoot = BizWorkflowPackage.GetElementsByTagName("WorkflowTemplates")[0];
            XmlNodeList Templates    = ((XmlElement)TemplateRoot).GetElementsByTagName("WorkflowTemplate");

            if (Templates.Count > 0)
            {
                WorkflowTemplates = new List <DraftWorkflowTemplate>();
                foreach (XmlNode node in Templates)
                {
                    DraftWorkflowTemplate draftWorkflowTemplate = new DraftWorkflowTemplate(((XmlElement)node).GetElementsByTagName("WorkflowDocument")[0].OuterXml);
                    WorkflowNames.Add(draftWorkflowTemplate.WorkflowCode, ((XmlElement)node).GetElementsByTagName("WorkflowTemplateName")[0].InnerXml);
                    WorkflowTemplates.Add(draftWorkflowTemplate);
                }
                //流程模拟
                XmlNode     SimulationRoot  = BizWorkflowPackage.GetElementsByTagName("Simulations")[0];
                XmlNodeList SimulationNodes = ((XmlElement)SimulationRoot).GetElementsByTagName("InstanceSimulation");
                this.Simulations = new List <InstanceSimulation>();
                foreach (XmlNode simulation in SimulationNodes)
                {
                    this.Simulations.Add((InstanceSimulation)Convertor.XmlToObject(typeof(InstanceSimulation), simulation.OuterXml));
                }

                XmlNodeList clauseNodes = BizWorkflowPackage.GetElementsByTagName("WorkflowClause");
                if (clauseNodes != null && clauseNodes.Count > 0)
                {
                    foreach (XmlNode clauseNode in clauseNodes)
                    {
                        this.clauses.Add((WorkflowClause)Convertor.XmlToObject(typeof(WorkflowClause), clauseNode.OuterXml));
                    }
                }
            }
        }