示例#1
0
        public void OnDoFlow(Guid guid, FlowDataType.FlowData Arg)
        {
            SMTFlowArg e = new SMTFlowArg(guid, Arg);

            e.WaitForIdle = true;
            DoFlow(null, e);
        }
示例#2
0
        /// <summary>
        /// 接收事件后处理审批流程
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        public void SMTSubmitEvent_Invoked(object sender, ExternalDataEventArgs e)
        {
            SMTFlowArg input = e as SMTFlowArg;
            this.ApproveInfo = input.FlowData;
            Root().FlowData = input.FlowData;

            //Console.WriteLine("事件节点:" + this.Name + "工作流返回结果:" + ApproveInfo.Flow_FlowRecord_T.Content);
               //以下为处理代码
        }
示例#3
0
        /// <summary>
        /// 接收事件后处理审批流程
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        public void SMTSubmitEvent_Invoked(object sender, ExternalDataEventArgs e)
        {
            SMTFlowArg input = e as SMTFlowArg;

            this.ApproveInfo = input.FlowData;
            Root().FlowData  = input.FlowData;

            //Console.WriteLine("事件节点:" + this.Name + "工作流返回结果:" + ApproveInfo.Flow_FlowRecord_T.Content);
            //以下为处理代码
        }
        /// <summary>
        /// 启动与工作流程相同类型流程,查询对应节点用户
        /// </summary>
        /// <param name="CompanyID">公司ID</param>
        /// <param name="ModelCode">模块代码</param>
        /// <param name="FlowGUID">待审批流GUID,新增时为空或者为StartFlow</param>
        /// <returns></returns>
        public DataResult GetAppUser( string CompanyID, string ModelCode, string FlowGUID, string xml)
        {
            Tracer.Debug("GetAppUser 启动与工作流程相同类型流程,查询对应节点用户 ModelCode=" + ModelCode + " FlowGUID=" + FlowGUID + " CompanyID=" + CompanyID);
            FlowUser user = SUser;
            DataResult GetAppUserResult = new DataResult();
            try
            {
                string StateName = null;

                if (FlowGUID == "" || FlowGUID == "StartFlow")
                {
                    StateName = "StartFlow";
                }
                else
                {
                    //根据待审批流程GUID,检索待审批状态节点代码
                    List<SMT.Workflow.Common.Model.FLOW_FLOWRECORDDETAIL_T> FlowRecord = FlowBLL.GetFlowInfo( "", FlowGUID, "", "", "", "", "", null);
                    if (FlowRecord == null)
                    {
                        GetAppUserResult.Err = "没有待处理的审核";
                        GetAppUserResult.UserInfo = null;
                        return GetAppUserResult;
                    }
                    StateName = FlowRecord[0].STATECODE;
                }

                //根据公司ID,模块代码获取配置的流程
                WorkflowInstance instance = null;
                Tracer.Debug("根据公司ID,模块代码获取配置的流程FlowBLL.GetFlowByModelName:OgrType='0'");

                List<SMT.Workflow.Common.Model.FLOW_MODELFLOWRELATION_T> MODELFLOWRELATION = FlowBLL.GetFlowByModelName( CompanyID, "", ModelCode, "0", ref user);

                if (MODELFLOWRELATION == null || MODELFLOWRELATION.Count == 0)
                {
                    GetAppUserResult.Err = "没有可使用的流程";
                    GetAppUserResult.UserInfo = null;
                    return GetAppUserResult;
                }
                SMT.Workflow.Common.Model.FLOW_FLOWDEFINE_T Xoml = MODELFLOWRELATION[0].FLOW_FLOWDEFINE_T;

                XmlReader readerxoml, readerule;
                StringReader strXoml = new StringReader(Xoml.LAYOUT);
                StringReader strRules = new StringReader(Xoml.RULES == null ? "" : Xoml.RULES);

                readerxoml = XmlReader.Create(strXoml);
                readerule = XmlReader.Create(strRules);

                WorkflowRuntime workflowRuntime = new WorkflowRuntime();
                workflowRuntime.StartRuntime();

                FlowEvent ExternalEvent = new FlowEvent();
                //ExternalDataExchangeService objService = new ExternalDataExchangeService();
                //workflowRuntime.AddService(objService);
                //objService.AddService(ExternalEvent);
                //TypeProvider typeProvider = new TypeProvider(null);
                //workflowRuntime.AddService(typeProvider);

                ////XmlReader readerxoml = XmlReader.Create(HttpContext.Current.Server.MapPath ("TestFlow.xml"));
                //// instance = workflowRuntime.CreateWorkflow(readerxoml);
                //if (Xoml.RULES == null)
                //    instance = workflowRuntime.CreateWorkflow(readerxoml);
                //else
                //    instance = workflowRuntime.CreateWorkflow(readerxoml, readerule, null);
                //// instance = workflowRuntime.CreateWorkflow(typeof(TestFlow));
                //instance.Start();
                //StateMachineWorkflowInstance workflowinstance = new StateMachineWorkflowInstance(workflowRuntime, instance.InstanceId);

                ////从实例中获取定义
                //if (1 == 2)
                //{
                //    System.Workflow.Activities.StateMachineWorkflowActivity smworkflow = new StateMachineWorkflowActivity();
                //    smworkflow = workflowinstance.StateMachineWorkflow;
                //    RuleDefinitions ruleDefinitions = smworkflow.GetValue(RuleDefinitions.RuleDefinitionsProperty) as RuleDefinitions;
                //    WorkflowMarkupSerializer markupSerializer = new WorkflowMarkupSerializer();

                //    StringBuilder xoml = new StringBuilder();
                //    StringBuilder rule = new StringBuilder();
                //    XmlWriter xmlWriter = XmlWriter.Create(xoml);
                //    XmlWriter ruleWriter = XmlWriter.Create(rule);
                //    markupSerializer.Serialize(xmlWriter, smworkflow);
                //    markupSerializer.Serialize(ruleWriter, ruleDefinitions);
                //    xmlWriter.Close();
                //    ruleWriter.Close();
                //    StringReader readxoml = new StringReader(xoml.ToString());
                //    StringReader readrule = new StringReader(rule.ToString());
                //    XmlReader readerxoml2 = XmlReader.Create(readxoml);
                //    XmlReader readerrule2 = XmlReader.Create(readrule);
                //    WorkflowInstance instance1 = workflowRuntime.CreateWorkflow(readerxoml2, readerrule2, null);
                //    instance1.Start();
                //    StateMachineWorkflowInstance workflowinstance1 = new StateMachineWorkflowInstance(workflowRuntime, instance1.InstanceId);
                //    workflowinstance1.SetState(StateName);
                //}
                //从实例中获取定义并启动新实例

                //跳转到节点StateName
                //workflowinstance.SetState(StateName);

                FlowDataType.FlowData FlowData = new FlowDataType.FlowData();
                FlowData.xml = xml;
                //  FlowData.Flow_FlowRecord_T = null;

                //ExternalEvent.OnDoFlow(instance.InstanceId, FlowData);//激发流程引擎流转到下一状态
                System.Threading.Thread.Sleep(1000);
                //PermissionServiceClient WcfPermissionService = new PermissionServiceClient();
                string CurrentStateName = ""; //workflowinstance.CurrentStateName == null ? "End" : //workflowinstance.CurrentStateName; //取得当前状态
                List<UserInfo> listUser = new List<UserInfo>();
                if (CurrentStateName != "End")
                {
                    if (CurrentStateName.Substring(0, 5) == "State")
                    {
                        CurrentStateName = CurrentStateName.Substring(5);
                    }
                    string roleID = new Guid(CurrentStateName).ToString("D");
                    List<T_SYS_USER> User = new List<T_SYS_USER>(); //WcfPermissionService.GetSysUserByRole(WFCurrentStateName); //检索本状态(角色)对应用户
                    using (SysUserRoleBLL bll = new SysUserRoleBLL())
                    {
                        IQueryable<T_SYS_USER> IQList = bll.GetSysUserByRole(roleID);
                        User = IQList == null ? null : IQList.ToList();
                    }
                    if (User != null)
                        for (int i = 0; i < User.Count(); i++)
                        {
                            UserInfo tmp = new UserInfo();
                            tmp.UserID = User[i].EMPLOYEEID;
                            tmp.UserName = User[i].EMPLOYEENAME;
                            listUser.Add(tmp);
                        }

                }
                else
                {
                    //已经到流程结束状态
                    UserInfo tmp = new UserInfo();
                    tmp.UserID = "End";
                    tmp.UserName = "******";

                    listUser.Add(tmp);
                }

                GetAppUserResult.UserInfo = listUser.Count > 0 ? listUser : null;

                if (GetAppUserResult.UserInfo == null)
                    GetAppUserResult.Err = "没有找到用户";

                return GetAppUserResult;
                // return listUser;

                //return workflowinstance.CurrentStateName == null ? "End" : workflowinstance.CurrentStateName;
            }
            catch (Exception ex)
            {
                GetAppUserResult.Err = ex.Message;
                GetAppUserResult.UserInfo = null;
                return GetAppUserResult;
            }
        }
示例#5
0
文件: SMTFlowArg.cs 项目: jjg0519/OA
 public SMTFlowArg(Guid instanceId, FlowDataType.FlowData flowdata)
     : base(instanceId)
 {
     FlowData = flowdata;
 }
示例#6
0
文件: Service2.cs 项目: JuRogn/OA
        /// <summary>
        /// 启动与工作流程相同类型流程,查询对应节点用户
        /// </summary>
        /// <param name="CompanyID">公司ID</param>
        /// <param name="ModelCode">模块代码</param>
        /// <param name="FlowGUID">待审批流GUID,新增时为空或者为StartFlow</param>
        /// <returns></returns>
        public DataResult GetAppUser(OracleConnection con, string CompanyID, string ModelCode, string FlowGUID, string xml)
        {

            DataResult GetAppUserResult = new DataResult();
            try
            {
                string StateName = null;


                if (FlowGUID == "" || FlowGUID == "StartFlow")
                {
                    StateName = "StartFlow";
                }
                else
                {
                    //根据待审批流程GUID,检索待审批状态节点代码
                    List<FLOW_FLOWRECORDDETAIL_T> FlowRecord = FlowBLL2.GetFlowInfo(con, "", FlowGUID, "", "", "", "", "", null);
                    if (FlowRecord == null)
                    {
                        GetAppUserResult.Err = "没有待处理的审核";
                        GetAppUserResult.UserInfo = null;
                        return GetAppUserResult;
                    }
                    StateName = FlowRecord[0].STATECODE;
                }

                //根据公司ID,模块代码获取配置的流程
                WorkflowInstance instance = null;
                LogHelper.WriteLog("根据公司ID,模块代码获取配置的流程FlowBLL2.GetFlowByModelName:OgrType='0'");

                List<FLOW_MODELFLOWRELATION_T> MODELFLOWRELATION = FlowBLL2.GetFlowByModelName(con, CompanyID, "", ModelCode, "0");

                if (MODELFLOWRELATION == null || MODELFLOWRELATION.Count == 0)
                {
                    GetAppUserResult.Err = "没有可使用的流程";
                    GetAppUserResult.UserInfo = null;
                    return GetAppUserResult;
                }
                FLOW_FLOWDEFINE_T Xoml = MODELFLOWRELATION[0].FLOW_FLOWDEFINE_T;

                XmlReader readerxoml, readerule;
                StringReader strXoml = new StringReader(Xoml.XOML);
                StringReader strRules = new StringReader(Xoml.RULES == null ? "" : Xoml.RULES);

                readerxoml = XmlReader.Create(strXoml);
                readerule = XmlReader.Create(strRules);

                WorkflowRuntime workflowRuntime = new WorkflowRuntime();
                workflowRuntime.StartRuntime();

                FlowEvent ExternalEvent = new FlowEvent();
                ExternalDataExchangeService objService = new ExternalDataExchangeService();
                workflowRuntime.AddService(objService);
                objService.AddService(ExternalEvent);
                TypeProvider typeProvider = new TypeProvider(null);
                workflowRuntime.AddService(typeProvider);

                //XmlReader readerxoml = XmlReader.Create(HttpContext.Current.Server.MapPath ("TestFlow.xml"));
                // instance = workflowRuntime.CreateWorkflow(readerxoml);
                if (Xoml.RULES == null)
                    instance = workflowRuntime.CreateWorkflow(readerxoml);
                else
                    instance = workflowRuntime.CreateWorkflow(readerxoml, readerule, null);
                // instance = workflowRuntime.CreateWorkflow(typeof(TestFlow));
                instance.Start();
                StateMachineWorkflowInstance workflowinstance = new StateMachineWorkflowInstance(workflowRuntime, instance.InstanceId);

                //从实例中获取定义
                if (1 == 2)
                {
                    System.Workflow.Activities.StateMachineWorkflowActivity smworkflow = new StateMachineWorkflowActivity();
                    smworkflow = workflowinstance.StateMachineWorkflow;
                    RuleDefinitions ruleDefinitions = smworkflow.GetValue(RuleDefinitions.RuleDefinitionsProperty) as RuleDefinitions;
                    WorkflowMarkupSerializer markupSerializer = new WorkflowMarkupSerializer();

                    StringBuilder xoml = new StringBuilder();
                    StringBuilder rule = new StringBuilder();
                    XmlWriter xmlWriter = XmlWriter.Create(xoml);
                    XmlWriter ruleWriter = XmlWriter.Create(rule);
                    markupSerializer.Serialize(xmlWriter, smworkflow);
                    markupSerializer.Serialize(ruleWriter, ruleDefinitions);
                    xmlWriter.Close();
                    ruleWriter.Close();
                    StringReader readxoml = new StringReader(xoml.ToString());
                    StringReader readrule = new StringReader(rule.ToString());
                    XmlReader readerxoml2 = XmlReader.Create(readxoml);
                    XmlReader readerrule2 = XmlReader.Create(readrule);
                    WorkflowInstance instance1 = workflowRuntime.CreateWorkflow(readerxoml2, readerrule2, null);
                    instance1.Start();
                    StateMachineWorkflowInstance workflowinstance1 = new StateMachineWorkflowInstance(workflowRuntime, instance1.InstanceId);
                    workflowinstance1.SetState(StateName);
                }
                //从实例中获取定义并启动新实例

                //跳转到节点StateName
                workflowinstance.SetState(StateName);

                FlowDataType.FlowData FlowData = new FlowDataType.FlowData();
                FlowData.xml = xml;
                //  FlowData.Flow_FlowRecord_T = null;

                ExternalEvent.OnDoFlow(instance.InstanceId, FlowData);//激发流程引擎流转到下一状态
                System.Threading.Thread.Sleep(1000);
                PermissionServiceClient WcfPermissionService = new PermissionServiceClient();
                string CurrentStateName = workflowinstance.CurrentStateName == null ? "End" : workflowinstance.CurrentStateName; //取得当前状态
                List<UserInfo> listUser = new List<UserInfo>();
                if (CurrentStateName != "End")
                {
                    if (CurrentStateName.Substring(0, 5) == "State")
                    {
                        CurrentStateName = CurrentStateName.Substring(5);
                    }
                    string WFCurrentStateName = new Guid(CurrentStateName).ToString("D");
                    T_SYS_USER[]  User = WcfPermissionService.GetSysUserByRole(WFCurrentStateName); //检索本状态(角色)对应用户

                    if (User != null)
                        for (int i = 0; i < User.Length; i++)
                        {
                            UserInfo tmp = new UserInfo();
                            tmp.UserID = User[i].EMPLOYEEID;
                            tmp.UserName = User[i].EMPLOYEENAME;
                            listUser.Add(tmp);
                        }



                }
                else
                {
                    //已经到流程结束状态
                    UserInfo tmp = new UserInfo();
                    tmp.UserID = "End";
                    tmp.UserName = "******";

                    listUser.Add(tmp);
                }


                GetAppUserResult.UserInfo = listUser.Count > 0 ? listUser : null;

                if (GetAppUserResult.UserInfo == null)
                    GetAppUserResult.Err = "没有找到用户";

                return GetAppUserResult;
                // return listUser;


                //return workflowinstance.CurrentStateName == null ? "End" : workflowinstance.CurrentStateName;
            }
            catch (Exception ex)
            {
                GetAppUserResult.Err = ex.Message;
                GetAppUserResult.UserInfo = null;
                return GetAppUserResult;
            }
        }
示例#7
0
        static void Main(string[] args)
        {
            #region
            #region flow
            StringBuilder sb = new StringBuilder();
            sb.AppendLine("<?xml version=\"1.0\" encoding=\"utf-8\"?>");
            sb.AppendLine("<System>");
            sb.AppendLine("	<Name>\"Flow\"</Name>");
            sb.AppendLine("	<SystemCode>\"EDM\"</SystemCode>");
            sb.AppendLine("	<Message>");
            sb.AppendLine("		<Attribute Name=\"CompanyID\" DataValue=\"8350ad70-4fac-476d-b008-2ec506362480\">");
            sb.AppendLine("		</Attribute>");
            sb.AppendLine("		<Attribute Name=\"ModelCode\" DataValue=\"T_EDM_APPLYFORMASTER\">");
            sb.AppendLine("		</Attribute>");
            sb.AppendLine("		<Attribute Name=\"ModelName\" DataValue=\"采购申请\">");
            sb.AppendLine("		</Attribute>");
            sb.AppendLine("		<Attribute Name=\"FormID\" DataValue=\"609b4d22-b9ff-4545-a5df-c0b4ff4328e6\">");
            sb.AppendLine("		</Attribute>");
            sb.AppendLine("		<Attribute Name=\"StateCode\" DataValue=\"Stateabd697bc1f834a288ed2b085dad8478a\">");
            sb.AppendLine("		</Attribute>");
            sb.AppendLine("		<Attribute Name=\"CheckState\" DataValue=\"1\">");
            sb.AppendLine("		</Attribute>");
            sb.AppendLine("		<Attribute Name=\"IsTask\" DataValue=\"1\">");
            sb.AppendLine("		</Attribute>");
            sb.AppendLine("		<Attribute Name=\"AppUserID\" DataValue=\"0276288d-ab8e-41ed-abc5-cee659e0909f\">");
            sb.AppendLine("		</Attribute>");
            sb.AppendLine("		<Attribute Name=\"AppUserName\" DataValue=\"进销存测试公司-进销存行政部-进销存老板-进销存老板\">");
            sb.AppendLine("		</Attribute>");
            sb.AppendLine("		<Attribute Name=\"OutTime\" DataValue=\"\">");
            sb.AppendLine("		</Attribute>");
            sb.AppendLine("	</Message>");
            sb.AppendLine("</System>");
            #endregion
            #region strBusiness
            StringBuilder strBusiness = new StringBuilder();
            strBusiness.AppendLine("<?xml version=\"1.0\" encoding=\"utf-8\"?>");
            strBusiness.AppendLine("<System>");
            strBusiness.AppendLine("	<Name>EDM</Name>");
            strBusiness.AppendLine("	<Object Name=\"Approval\" Description=\"\">");
            strBusiness.AppendLine("		<Attribute Name=\"APPLYFORCODE\" Description=\"\" DataType=\"\" DataValue=\"CS01-20111228-0049\" />");
            strBusiness.AppendLine("		<Attribute Name=\"APPLYFORDATE\" Description=\"\" DataType=\"\" DataValue=\"2011/12/28 0:00:00\" />");
            strBusiness.AppendLine("		<Attribute Name=\"APPLYFORMASTERID\" Description=\"\" DataType=\"\" DataValue=\"609b4d22-b9ff-4545-a5df-c0b4ff4328e6\" />");
            strBusiness.AppendLine("		<Attribute Name=\"APPLYFORUSER\" Description=\"\" DataType=\"\" DataValue=\"0276288d-ab8e-41ed-abc5-cee659e0909f\" />");
            strBusiness.AppendLine("		<Attribute Name=\"AUDITSTATE\" Description=\"\" DataType=\"\" DataValue=\"0\" />");
            strBusiness.AppendLine("		<Attribute Name=\"CGFLOWMASTERID\" Description=\"\" DataType=\"\" DataValue=\"\" />");
            strBusiness.AppendLine("		<Attribute Name=\"CREATECOMPANYID\" Description=\"\" DataType=\"\" DataValue=\"8350ad70-4fac-476d-b008-2ec506362480\" />");
            strBusiness.AppendLine("		<Attribute Name=\"CREATEDATE\" Description=\"\" DataType=\"\" DataValue=\"2011/12/28 0:00:00\" />");
            strBusiness.AppendLine("		<Attribute Name=\"CREATEDEPARTMENTID\" Description=\"\" DataType=\"\" DataValue=\"22ee79f9-cf7e-47f3-85c1-4b2ac6012adc\" />");
            strBusiness.AppendLine("		<Attribute Name=\"CREATEPOSTID\" Description=\"\" DataType=\"\" DataValue=\"47d387db-182d-4fe5-867d-18af89fdcf06\" />");
            strBusiness.AppendLine("		<Attribute Name=\"CREATEUSERID\" Description=\"\" DataType=\"\" DataValue=\"0276288d-ab8e-41ed-abc5-cee659e0909f\" />");
            strBusiness.AppendLine("		<Attribute Name=\"CREATEUSERNAME\" Description=\"\" DataType=\"\" DataValue=\"进销存老板\" />");
            strBusiness.AppendLine("		<Attribute Name=\"OPERATEUSERNAME\" Description=\"\" DataType=\"\" DataValue=\"进销存老板\" />");
            strBusiness.AppendLine("		<Attribute Name=\"OWNERCOMPANYID\" Description=\"\" DataType=\"\" DataValue=\"8350ad70-4fac-476d-b008-2ec506362480\" />");
            strBusiness.AppendLine("		<Attribute Name=\"OWNERDEPARTMENTID\" Description=\"\" DataType=\"\" DataValue=\"22ee79f9-cf7e-47f3-85c1-4b2ac6012adc\" />");
            strBusiness.AppendLine("		<Attribute Name=\"OWNERID\" Description=\"\" DataType=\"\" DataValue=\"0276288d-ab8e-41ed-abc5-cee659e0909f\" />");
            strBusiness.AppendLine("		<Attribute Name=\"OWNERNAME\" Description=\"\" DataType=\"\" DataValue=\"进销存行政部\" />");
            strBusiness.AppendLine("		<Attribute Name=\"OWNERPOSTID\" Description=\"\" DataType=\"\" DataValue=\"47d387db-182d-4fe5-867d-18af89fdcf06\" />");
            strBusiness.AppendLine("		<Attribute Name=\"PURCHASETYPE\" Description=\"\" DataType=\"\" DataValue=\"1\" />");
            strBusiness.AppendLine("		<Attribute Name=\"REMARKS\" Description=\"\" DataType=\"\" DataValue=\"\" />");
            strBusiness.AppendLine("		<Attribute Name=\"T_EDM_APPLYFORDETAIL\" Description=\"\" DataType=\"\" DataValue=\"System.Collections.ObjectModel.ObservableCollection`1[SMT.EDM.UI.EntityRef.T_EDM_APPLYFORDETAIL]\" />");
            strBusiness.AppendLine("		<Attribute Name=\"UPDATEDATE\" Description=\"\" DataType=\"\" DataValue=\"2011/12/28 0:00:00\" />");
            strBusiness.AppendLine("		<Attribute Name=\"UPDATEUSERID\" Description=\"\" DataType=\"\" DataValue=\"0276288d-ab8e-41ed-abc5-cee659e0909f\" />");
            strBusiness.AppendLine("		<Attribute Name=\"UPDATEUSERNAME\" Description=\"\" DataType=\"\" DataValue=\"进销存老板\" />");
            strBusiness.AppendLine("		<Attribute Name=\"EntityKey\" Description=\"\" DataType=\"\" DataValue=\"SMT.EDM.UI.EntityRef.EntityKey\" />");
            strBusiness.AppendLine("		<Attribute Name=\"CURRENTEMPLOYEENAME\" Description=\"提交者\" DataType=\"\" DataValue=\"进销存老板\" />");
            strBusiness.AppendLine("	</Object>");
            strBusiness.AppendLine("</System>");
              #endregion
            #endregion
            string XElementString = "";
            string XmlReaderString = "";
            #region XmlReader
            DateTime dta = DateTime.Now;
            T_WF_DOTASK model = new T_WF_DOTASK();
            string modelType = string.Empty;//EntityType (表名)
            string modelKey = string.Empty;//EntityKey (主键)
            string modelIsTask = "1";//是否任务
            #region FLOW

            StringReader strRdr = new StringReader(sb.ToString());
            XmlReader xr = XmlReader.Create(strRdr);
            StringBuilder _ConbinString = new StringBuilder();
            while (xr.Read())
            {
                if (xr.NodeType == XmlNodeType.Element)
                {
                    string elementName = xr.Name;
                    if (elementName == "Message")
                    {
                        while (xr.Read())
                        {
                            string type = xr.NodeType.ToString();
                            #region

                            if (xr["Name"] != null)
                            {
                                _ConbinString.Append(xr["Name"] + "|" + xr["DataValue"] + "Ё");
                                if (xr["Name"].ToUpper() == "COMPANYID")
                                {
                                    model.COMPANYID = xr["DataValue"];
                                }
                                if (xr["Name"].ToUpper() == "MODELCODE")
                                {
                                    model.MODELCODE = xr["DataValue"];
                                }
                                if (xr["Name"].ToUpper() == "MODELNAME")
                                {
                                    model.MODELNAME = xr["DataValue"];
                                }
                                if (xr["Name"].ToUpper() == "FORMID")
                                {
                                    model.ORDERID = xr["DataValue"];
                                }
                                if (xr["Name"].ToUpper() == "CHECKSTATE")
                                {
                                    model.ORDERSTATUS = int.Parse(xr["DataValue"]);
                                }
                                if (xr["Name"].ToUpper() == "APPUSERID")
                                {
                                    model.RECEIVEUSERID = xr["DataValue"];
                                }
                                if (xr["Name"].ToUpper() == "ISTASK")
                                {
                                    modelIsTask = xr["DataValue"];
                                }
                                if (xr["Name"].ToUpper() == "OUTTIME")
                                {

                                    if (!string.IsNullOrEmpty(xr["DataValue"]))
                                    {
                                        model.BEFOREPROCESSDATE = DateTime.Now.AddMinutes(int.Parse(xr["DataValue"]));
                                    }
                                }
                            }
                            #endregion
                        }
                    }
                }
                model.FLOWXML = sb.ToString();
                model.APPXML = strBusiness.ToString();
            }
            #endregion
            if (!string.IsNullOrEmpty(strBusiness.ToString()))
            {
                StringReader rd = new StringReader(strBusiness.ToString());
                XmlReader xdr = XmlReader.Create(rd);
                StringBuilder BOObject = new StringBuilder();
                while (xdr.Read())
                {
                    if (xdr.NodeType == XmlNodeType.Element)
                    {
                        string elementName = xdr.Name;
                        if (elementName == "Name")
                        {
                            while (xdr.Read())
                            {
                                model.SYSTEMCODE = xdr.Value;
                                break;
                            }
                        }
                        if (elementName == "Object")
                        {
                            try
                            { //非手机的XML时没有表明和主键的
                                modelType = xdr["Name"];
                                modelKey = xdr["Key"];
                            }
                            catch
                            {
                                //Log.WriteLog("异常无法取得业务数据表,单据:" + entity.ORDERID + ":表:" + strEntityType + ":主键:" + strEntityKey + "");
                            }
                            while (xdr.Read())
                            {
                                if (xdr.Name == "Attribute")
                                {
                                    if (xdr["Name"] != null)
                                    {
                                        BOObject.Append(xdr["Name"] + "|" + xdr["DataValue"] + "Г" + (xdr["DataText"] != null ? xdr["DataText"] : xdr["DataValue"]) + "Ё");
                                    }
                                    #region
                                    if (xdr["Name"].ToUpper() == "OWNERID")
                                    {
                                        model.ORDERUSERID = xdr["DataValue"];
                                    }
                                    if (xdr["Name"].ToUpper() == "OWNERNAME")
                                    {
                                        model.ORDERUSERNAME = xdr["DataValue"];
                                    }
                                    if (xdr["Name"].ToUpper() == "CREATEUSERID")
                                    {
                                        //有些特殊的模块需要改变接收人
                                        if (CheckModelName(model.MODELCODE) && model.ORDERSTATUS == 2)
                                        {
                                            model.RECEIVEUSERID = xdr["DataValue"];
                                        }
                                    }

                                    #endregion
                                }
                            }
                        }
                    }
                }
                model.APPFIELDVALUE = _ConbinString.ToString() + BOObject.ToString().TrimEnd('Ё');
                XmlReaderString = model.APPFIELDVALUE;
            }
            DateTime dtb = DateTime.Now;
            Console.WriteLine("新方法:{0}毫秒。", (dtb - dta).TotalMilliseconds);
            #endregion
            #region XElement

            //DateTime dt1 = DateTime.Now;
            //T_WF_DOTASK entity = new T_WF_DOTASK();
            //string strEntityType = string.Empty;//EntityType (表名)
            //string strEntityKey = string.Empty;//EntityKey (主键)
            //string IsTask = "1";//是否任务
            //Byte[] bFlow = System.Text.UTF8Encoding.UTF8.GetBytes(sb.ToString());
            //XElement xeFlow = XElement.Load(System.Xml.XmlReader.Create(new MemoryStream(bFlow)));
            //entity.COMPANYID = XMLToAttribute(xeFlow, "COMPANYID");
            //entity.MODELCODE = XMLToAttribute(xeFlow, "MODELCODE");
            //entity.MODELNAME = XMLToAttribute(xeFlow, "ModelName");
            //entity.ORDERID = XMLToAttribute(xeFlow, "FORMID");
            //entity.ORDERSTATUS = int.Parse(XMLToAttribute(xeFlow, "CheckState"));
            //entity.RECEIVEUSERID = XMLToAttribute(xeFlow, "APPUSERID");
            //entity.FLOWXML = sb.ToString();
            //entity.APPXML = strBusiness.ToString();
            //IsTask = XMLToAttribute(xeFlow, "IsTask");
            //if (!string.IsNullOrEmpty(XMLToAttribute(xeFlow, "OutTime")))
            //{
            //    entity.BEFOREPROCESSDATE = DateTime.Now.AddMinutes(int.Parse(XMLToAttribute(xeFlow, "OutTime")));
            //}
            //if (!string.IsNullOrEmpty(strBusiness.ToString()))
            //{
            //    Byte[] BBusiness = System.Text.UTF8Encoding.UTF8.GetBytes(strBusiness.ToString());
            //    XElement xeBusiness = XElement.Load(System.Xml.XmlReader.Create(new MemoryStream(BBusiness)));
            //    entity.SYSTEMCODE = (from item in xeBusiness.Descendants("Name") select item).FirstOrDefault().Value;
            //    try
            //    { //非手机的XML时没有表明和主键的
            //        strEntityType = (from item in xeBusiness.Descendants("Object") select item).FirstOrDefault().Attribute("Name").Value;
            //        strEntityKey = (from item in xeBusiness.Descendants("Object") select item).FirstOrDefault().Attribute("Key").Value;
            //    }
            //    catch
            //    {
            //        //Log.WriteLog("异常无法取得业务数据表,单据:" + entity.ORDERID + ":表:" + strEntityType + ":主键:" + strEntityKey + "");
            //    }
            //    entity.ORDERUSERID = (from item in xeBusiness.Descendants("Object").Descendants("Attribute")
            //                          where item.Attribute("Name").Value.ToUpper() == "OWNERID"
            //                          select item).FirstOrDefault().Attribute("DataValue").Value;
            //    entity.ORDERUSERNAME = (from item in xeBusiness.Descendants("Object").Descendants("Attribute")
            //                            where item.Attribute("Name").Value.ToUpper() == "OWNERNAME"
            //                            select item).FirstOrDefault().Attribute("DataValue").Value;
            //    //有些特殊的模块需要改变接收人
            //    if (CheckModelName(entity.MODELCODE) && entity.ORDERSTATUS == 2)
            //    {
            //        entity.RECEIVEUSERID = (from item in xeBusiness.Descendants("Object").Descendants("Attribute")
            //                                where item.Attribute("Name").Value.ToUpper() == "CREATEUSERID"
            //                                select item).FirstOrDefault().Attribute("DataValue").Value;
            //    }
            //    entity.APPFIELDVALUE = ConbinString(xeFlow) + BOObjectEscapeString(strBusiness.ToString());
            //    XElementString = entity.APPFIELDVALUE;
            //}
            //DateTime dt2 = DateTime.Now;
            //Console.WriteLine("原方法:{0}毫秒。", (dt2 - dt1).TotalMilliseconds);

            #endregion

                //Console.WriteLine("================原方法==================");
                //Console.WriteLine("{0}", XElementString);
                //Console.WriteLine("================新方法==================");
                //Console.WriteLine("{0}", XmlReaderString);
            Console.Read();
               // TestAdo();
            return;
            //FLOW_FLOWRECORDDETAIL_TDAL as1 = new FLOW_FLOWRECORDDETAIL_TDAL();
            //var sd = as1.DataContext;
              //  string sdfs = "";
            // FlowSysDAL Dal = new FlowSysDAL();
            //Flow_SysDictionary_TDAL dal = new Flow_SysDictionary_TDAL();
            //var q = (from ent in Dal.GetSysDictionary()
            //         select ent).ToList();
            //Console.WriteLine(q.First().CnName);

            //Flow_FlowRecord_T entity = new Flow_FlowRecord_T();

            //entity.CreateCompanyID = "1";
            ////entity.Content = "dfwfw";
            //entity.CreateDate = DateTime.Now;
            ////entity.EditDate = DateTime.Now;
            //entity.EditUserID = "6464";
            //entity.Flag = "1";
            //entity.FlowCode = "gefege";
            //entity.FormID = "jthr";
            //entity.GUID = Guid.NewGuid().ToString();
            //entity.InstanceID = "gsdfwfw";
            //entity.ModelCode = "hefefe";
            //entity.CreatePostID = "hdvfge";
            //entity.ParentStateCode = "dgbfwe";
            //entity.StateCode = "hfewgeh";
            //entity.CreateUserID = "sh";

            //Console.WriteLine(GetTypeName(entity));
            //Dal.AddFlowRecord(entity);

            //Flow_SysDictionary_T entity = new Flow_SysDictionary_T();
            //entity.CnName = "";
            //entity.CreateDate = DateTime.Now;
            //entity.CreateUserId = "sdf";
            //entity.EditDate = DateTime.Now;
            //entity.EditUserId = "sdf";
            //entity.EnName = "sdf";
            //entity.GUID = Guid.NewGuid().ToString();
            //entity.HkName = "sf";
            //entity.Key = "Asdf";

            //Flow_ModelDefine_T entity = new Flow_ModelDefine_T();
            //entity.CreateDate = DateTime.Now;
            //entity.CreateUserID = "gsgg";
            //entity.Description = "gsgf";
            //entity.EditDate = DateTime.Now;
            //entity.EditUserID = "gsg";
            //entity.GUID = Guid.NewGuid().ToString();
            //entity.ModelCode = "ggfwge";

            //  Dal.AddModelDefine(entity);

             string sss = "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<System>\r\n<Name>OA</Name>\r\n<Object Name=\"T_OA_BUSINESSREPORT\" Description=\"\">\r\n<Attribute Name=\"BUSINESSREPORTID\" Description=\"\" DataType=\"\" DataValue=\"005e2e52-bc2d-4801-a524-4411a1d7de2e\"/>\r\n<Attribute Name=\"CHARGEMONEY\" Description=\"\" DataType=\"\" DataValue=\"\"/>\r\n<Attribute Name=\"CONTENT\" Description=\"\" DataType=\"\" DataValue=\"回公司总部参加系统培训,学习!\"/>\r\n<Attribute Name=\"CREATECOMPANYID\" Description=\"\" DataType=\"\" DataValue=\"bac05c76-0f5b-40ae-b73b-8be541ed35ed\"/>\r\n<Attribute Name=\"CREATEDATE\" Description=\"\" DataType=\"\" DataValue=\"2011-03-03 15:41:04\"/>\r\n<Attribute Name=\"CREATEDEPARTMENTID\" Description=\"\" DataType=\"\" DataValue=\"1a9fc682-82b1-4088-9ba0-03c57db9aa79\"/>\r\n<Attribute Name=\"CREATEPOSTID\" Description=\"\" DataType=\"\" DataValue=\"854fc028-62f9-41b5-9019-b6ef708425d2\"/>\r\n<Attribute Name=\"CREATEUSERID\" Description=\"\" DataType=\"\" DataValue=\"8574fb49-89da-4e4c-8ca8-d349ca6b5317\"/>\r\n<Attribute Name=\"CREATEUSERNAME\" Description=\"\" DataType=\"\" DataValue=\"刘勇\"/>\r\n<Attribute Name=\"OWNERCOMPANYID\" Description=\"\" DataType=\"\" DataValue=\"bac05c76-0f5b-40ae-b73b-8be541ed35ed\"/>\r\n<Attribute Name=\"OWNERDEPARTMENTID\" Description=\"\" DataType=\"\" DataValue=\"1a9fc682-82b1-4088-9ba0-03c57db9aa79\"/>\r\n<Attribute Name=\"OWNERID\" Description=\"\" DataType=\"\" DataValue=\"8574fb49-89da-4e4c-8ca8-d349ca6b5317\"/>\r\n<Attribute Name=\"OWNERNAME\" Description=\"\" DataType=\"\" DataValue=\"刘勇\"/>\r\n<Attribute Name=\"OWNERPOSTID\" Description=\"\" DataType=\"\" DataValue=\"854fc028-62f9-41b5-9019-b6ef708425d2\"/>\r\n<Attribute Name=\"REMARKS\" Description=\"\" DataType=\"\" DataValue=\"\"/>\r\n<Attribute Name=\"TEL\" Description=\"\" DataType=\"\" DataValue=\"18626211899\"/>\r\n<Attribute Name=\"T_OA_BUSINESSREPORTDETAIL\" Description=\"\" DataType=\"\" DataValue=\"System.Collections.ObjectModel.ObservableCollection`1[SMT.SaaS.OA.UI.SmtOAPersonOfficeService.T_OA_BUSINESSREPORTDETAIL]\"/>\r\n<Attribute Name=\"T_OA_BUSINESSTRIP\" Description=\"\" DataType=\"\" DataValue=\"SMT.SaaS.OA.UI.SmtOAPersonOfficeService.T_OA_BUSINESSTRIP\"/>\r\n<Attribute Name=\"T_OA_BUSINESSTRIPReference\" Description=\"\" DataType=\"\" DataValue=\"SMT.SaaS.OA.UI.SmtOAPersonOfficeService.EntityReferenceOfT_OA_BUSINESSTRIPUlJdEHjk\"/>\r\n<Attribute Name=\"T_OA_TRAVELREIMBURSEMENT\" Description=\"\" DataType=\"\" DataValue=\"System.Collections.ObjectModel.ObservableCollection`1[SMT.SaaS.OA.UI.SmtOAPersonOfficeService.T_OA_TRAVELREIMBURSEMENT]\"/>\r\n<Attribute Name=\"UPDATEDATE\" Description=\"\" DataType=\"\" DataValue=\"2011-03-03 16:06:08\"/>\r\n<Attribute Name=\"UPDATEUSERID\" Description=\"\" DataType=\"\" DataValue=\"\"/>\r\n<Attribute Name=\"UPDATEUSERNAME\" Description=\"\" DataType=\"\" DataValue=\"\"/>\r\n<Attribute Name=\"EntityKey\" Description=\"\" DataType=\"\" DataValue=\"SMT.SaaS.OA.UI.SmtOAPersonOfficeService.EntityKey\"/>\r\n<Attribute Name=\"TOTALCOST\" Description=\"\" DataType=\"\" DataValue=\"0\"/>\r\n<Attribute Name=\"POSTLEVEL\" Description=\"\" DataType=\"\" DataValue=\"16\"/>\r\n<Attribute Name=\"DEPARTMENTNAME\" Description=\"\" DataType=\"\" DataValue=\"市场营销部\"/>\r\n<Attribute Name=\"CURRENTEMPLOYEENAME\" Description=\"提交者\" DataType=\"\" DataValue=\"梅黠\"/>\r\n</Object>\r\n</System>\r\n";
               // string sss = "<?xml version=\"1.0\" encoding=\"utf-8\"?><System><Name>HR</Name><Object Name=\"T_HR_EMPLOYEESALARYRECORD\" Description=\"费用报销申请单\">\r\n  <Attribute Name=\"OrderTypeName\" Description=\"单据类型\" DataType=\"string\" DataValue=\"448c0dfb-1ff4-41df-84d3-230aa00fe8ce\" />\r\n  <Attribute Name=\"CHARGEAPPLYMASTERID\" Description=\"单据编号\" DataType=\"string\" DataValue=\"448c0dfb-1ff4-41df-84d3-230aa00fe8ce\" />\r\n  <Attribute Name=\"CHECKSTATES\" Description=\"状态\" DataType=\"string\" DataValue=\"0\" />\r\n  <Attribute Name=\"CREATEUSERNAME\" Description=\"创建人\" DataType=\"string\" DataValue=\"杜春雷\" />\r\n  <Attribute Name=\"CREATEDATE\" Description=\"创建时间\" DataType=\"datetime\" DataValue=\"2011-1-17 9:35:36\" />\r\n  <Attribute Name=\"T_FB_BORROWAPPLYMASTER\" Description=\"借款单\" DataType=\"string\" DataValue=\"\" />\r\n  <Attribute Name=\"BUDGETARYMONTH\" Description=\"预算月份\" DataType=\"string\" DataValue=\"2011-1-1 0:00:00\" />\r\n  <Attribute Name=\"OWNERCOMPANYNAME\" Description=\"申请公司\" DataType=\"string\" DataValue=\"集团本部\" />\r\n  <Attribute Name=\"OWNERDEPARTMENTNAME\" Description=\"申请部门\" DataType=\"string\" DataValue=\"人力资源部\" />\r\n  <Attribute Name=\"OWNERID\" Description=\"申请人\" DataType=\"string\" DataValue=\"4839a7d7-09ef-484d-9f4b-8e3f34538579\" />\r\n  <Attribute Name=\"PAYTYPE\" Description=\"付款类型\" DataType=\"string\" DataValue=\"4\" />\r\n  <Attribute Name=\"REMARK\" Description=\"备注\" DataType=\"string\" DataValue=\"集团画册3000本的印刷费,7.1元一本,共21300元。付客户款,账号名称在发票上已注明。\" />\r\n  <Attribute Name=\"TOTALMONEY\" Description=\"总金额\" DataType=\"decimal\" DataValue=\"21300\" />\r\n  <Attribute Name=\"POSTLEVEL\" Description=\"岗位级别\" DataType=\"decimal\" DataValue=\"0\" />\r\n  <Attribute Name=\"BorrowedMoney\" Description=\"已借款金额\" DataType=\"decimal\" DataValue=\"0\" />\r\n  <Attribute Name=\"TravelMoney\" Description=\"差旅费\" DataType=\"decimal\" DataValue=\"0\" />\r\n  <Attribute Name=\"BALANCEOBJECTNAME\" Description=\"招待费\" DataType=\"\" DataValue=\"0\" />\r\n</Object></System>";
            StringBuilder xml = new StringBuilder(@"<?xml version=""1.0"" encoding=""utf-8""?>");

            xml.Append(Environment.NewLine);
            xml.Append(@"    <System>");
            xml.Append(Environment.NewLine);
            xml.Append(@"       <Name>OA</Name>");
            xml.Append(Environment.NewLine);
            xml.Append(@"       <Object Name=""Test"">");
            xml.Append(Environment.NewLine);
            xml.Append(@"           <Attribute Name=""UserID""  DataType=""string"" DataValue=""" + sss + @"""></Attribute>");
            xml.Append(Environment.NewLine);
            xml.Append(@"           <Attribute  Name=""Price""  DataType=""decimal"" DataValue=""100""></Attribute>");
            xml.Append(@"       </Object>");
            xml.Append(Environment.NewLine);
            xml.Append(@"</System>");
              //  Console.WriteLine(sss);
               // sss = xml.ToString();
            FlowDataType.FlowData ss = new FlowDataType.FlowData();
              //  ss.xml = xml.ToString();

              //  var x = ss.GetString(sss, "HR", "T_HR_EMPLOYEESALARYRECORD", "BALANCEOBJECTNAME");
              //  int c;
               // if(null==0)
              //  Convert.ToDecimal(null);

            //WorkflowRuntime workflowRuntime = new WorkflowRuntime();

            //ConnectionStringSettings defaultConnectionString = ConfigurationManager.ConnectionStrings["//OracleConnection"];
            //workflowRuntime.AddService(new AdoPersistenceService(defaultConnectionString, true, TimeSpan.FromSeconds(0), TimeSpan.FromSeconds(0)));
            //workflowRuntime.AddService(new AdoTrackingService(defaultConnectionString));
            //workflowRuntime.AddService(new AdoWorkBatchService());

            //FlowEvent ExternalEvent = new FlowEvent();
            //ExternalDataExchangeService objService = new ExternalDataExchangeService();
            //workflowRuntime.AddService(objService);
            //objService.AddService(ExternalEvent);
            //TypeProvider typeProvider = new TypeProvider(null);
            //workflowRuntime.AddService(typeProvider);
            //WorkflowInstance instance = workflowRuntime.CreateWorkflow(typeof(TestFlow.TestFlow));
            //instance.Start();
            //FlowDataType.FlowData FlowData = new FlowDataType.FlowData();
            //FlowData.xml = sss;

            //ExternalEvent.OnDoFlow(instance.InstanceId, FlowData); //激发流程引擎执行到一下流程
            //System.Threading.Thread.Sleep(2000);
            //StateMachineWorkflowInstance workflowinstance = new StateMachineWorkflowInstance(workflowRuntime, instance.InstanceId);
               // SMTStateMachineWorkflowActivity MainActivity =
               //          instance.GetWorkflowDefinition() as SMTStateMachineWorkflowActivity;

            //System.Threading.Thread.Sleep(2000);
            #region 工作流接口测试
            //string xx = Guid.NewGuid().ToString("N");
            //PersonnelWS.PersonnelServiceClient WcfPersonnel = new PersonnelWS.PersonnelServiceClient();
            //PersonnelWS.T_HR_EMPLOYEE[] User = WcfPersonnel.GetEmployeeLeaders("25717c1c-ed32-4f0d-8556-6438960ad115", 0);

            Console.WriteLine(DateTime.Now.ToString());

            //PermissionWS.PermissionServiceClient Permission = new PermissionWS.PermissionServiceClient();
            //var aaa = Permission.GetSysUserByRole("604392c4-ffed-45ae-97f1-7dfed22f970a");

            //OAWS.AgentServicesClient oaws = new OAWS.AgentServicesClient();
            //var aaa = oaws.GetQueryAgent("BF06E969-1B2C-4a89-B0AE-A91CA1244053", "TravelApplication");
               // string sss = "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<System>\r\n<Name>OA</Name>\r\n<Object Name=\"T_OA_BUSINESSREPORT\" Description=\"\">\r\n<Attribute Name=\"BUSINESSREPORTID\" Description=\"\" DataType=\"\" DataValue=\"005e2e52-bc2d-4801-a524-4411a1d7de2e\"/>\r\n<Attribute Name=\"CHARGEMONEY\" Description=\"\" DataType=\"\" DataValue=\"\"/>\r\n<Attribute Name=\"CONTENT\" Description=\"\" DataType=\"\" DataValue=\"回公司总部参加系统培训,学习!\"/>\r\n<Attribute Name=\"CREATECOMPANYID\" Description=\"\" DataType=\"\" DataValue=\"bac05c76-0f5b-40ae-b73b-8be541ed35ed\"/>\r\n<Attribute Name=\"CREATEDATE\" Description=\"\" DataType=\"\" DataValue=\"2011-03-03 15:41:04\"/>\r\n<Attribute Name=\"CREATEDEPARTMENTID\" Description=\"\" DataType=\"\" DataValue=\"1a9fc682-82b1-4088-9ba0-03c57db9aa79\"/>\r\n<Attribute Name=\"CREATEPOSTID\" Description=\"\" DataType=\"\" DataValue=\"854fc028-62f9-41b5-9019-b6ef708425d2\"/>\r\n<Attribute Name=\"CREATEUSERID\" Description=\"\" DataType=\"\" DataValue=\"8574fb49-89da-4e4c-8ca8-d349ca6b5317\"/>\r\n<Attribute Name=\"CREATEUSERNAME\" Description=\"\" DataType=\"\" DataValue=\"刘勇\"/>\r\n<Attribute Name=\"OWNERCOMPANYID\" Description=\"\" DataType=\"\" DataValue=\"bac05c76-0f5b-40ae-b73b-8be541ed35ed\"/>\r\n<Attribute Name=\"OWNERDEPARTMENTID\" Description=\"\" DataType=\"\" DataValue=\"1a9fc682-82b1-4088-9ba0-03c57db9aa79\"/>\r\n<Attribute Name=\"OWNERID\" Description=\"\" DataType=\"\" DataValue=\"8574fb49-89da-4e4c-8ca8-d349ca6b5317\"/>\r\n<Attribute Name=\"OWNERNAME\" Description=\"\" DataType=\"\" DataValue=\"刘勇\"/>\r\n<Attribute Name=\"OWNERPOSTID\" Description=\"\" DataType=\"\" DataValue=\"854fc028-62f9-41b5-9019-b6ef708425d2\"/>\r\n<Attribute Name=\"REMARKS\" Description=\"\" DataType=\"\" DataValue=\"\"/>\r\n<Attribute Name=\"TEL\" Description=\"\" DataType=\"\" DataValue=\"18626211899\"/>\r\n<Attribute Name=\"T_OA_BUSINESSREPORTDETAIL\" Description=\"\" DataType=\"\" DataValue=\"System.Collections.ObjectModel.ObservableCollection`1[SMT.SaaS.OA.UI.SmtOAPersonOfficeService.T_OA_BUSINESSREPORTDETAIL]\"/>\r\n<Attribute Name=\"T_OA_BUSINESSTRIP\" Description=\"\" DataType=\"\" DataValue=\"SMT.SaaS.OA.UI.SmtOAPersonOfficeService.T_OA_BUSINESSTRIP\"/>\r\n<Attribute Name=\"T_OA_BUSINESSTRIPReference\" Description=\"\" DataType=\"\" DataValue=\"SMT.SaaS.OA.UI.SmtOAPersonOfficeService.EntityReferenceOfT_OA_BUSINESSTRIPUlJdEHjk\"/>\r\n<Attribute Name=\"T_OA_TRAVELREIMBURSEMENT\" Description=\"\" DataType=\"\" DataValue=\"System.Collections.ObjectModel.ObservableCollection`1[SMT.SaaS.OA.UI.SmtOAPersonOfficeService.T_OA_TRAVELREIMBURSEMENT]\"/>\r\n<Attribute Name=\"UPDATEDATE\" Description=\"\" DataType=\"\" DataValue=\"2011-03-03 16:06:08\"/>\r\n<Attribute Name=\"UPDATEUSERID\" Description=\"\" DataType=\"\" DataValue=\"\"/>\r\n<Attribute Name=\"UPDATEUSERNAME\" Description=\"\" DataType=\"\" DataValue=\"\"/>\r\n<Attribute Name=\"EntityKey\" Description=\"\" DataType=\"\" DataValue=\"SMT.SaaS.OA.UI.SmtOAPersonOfficeService.EntityKey\"/>\r\n<Attribute Name=\"TOTALCOST\" Description=\"\" DataType=\"\" DataValue=\"0\"/>\r\n<Attribute Name=\"POSTLEVEL\" Description=\"\" DataType=\"\" DataValue=\"16\"/>\r\n<Attribute Name=\"DEPARTMENTNAME\" Description=\"\" DataType=\"\" DataValue=\"市场营销部\"/>\r\n<Attribute Name=\"CURRENTEMPLOYEENAME\" Description=\"提交者\" DataType=\"\" DataValue=\"梅黠\"/>\r\n</Object>\r\n</System>\r\n";
            string aaa = "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<System>\r\n<Name>OA</Name>\r\n<Object Name=\"T_OA_APPROVALINFO\" Description=\"\">\r\n<Attribute Name=\"APPROVALCODE\" Description=\"\" DataType=\"\" DataValue=\"BPJ201106170009\"/>\r\n<Attribute Name=\"APPROVALID\" Description=\"\" DataType=\"\" DataValue=\"4e93f242-ffa8-4600-9286-54c629488078\"/>\r\n<Attribute Name=\"APPROVALTITLE\" Description=\"\" DataType=\"\" DataValue=\"测试\"/>\r\n<Attribute Name=\"CHARGEMONEY\" Description=\"\" DataType=\"\" DataValue=\"0\"/>\r\n<Attribute Name=\"CONTENT\" Description=\"\" DataType=\"\" DataValue=\"System.Byte[]\"/>\r\n<Attribute Name=\"CREATECOMPANYID\" Description=\"\" DataType=\"\" DataValue=\"7c61f756-8d90-4b83-a8dd-5314fb1baf46\"/>\r\n<Attribute Name=\"CREATEDATE\" Description=\"\" DataType=\"\" DataValue=\"2011/06/17 11:27:20\"/>\r\n<Attribute Name=\"CREATEDEPARTMENTID\" Description=\"\" DataType=\"\" DataValue=\"89a7c04b-ffd8-4b0f-87fd-5620832bc855\"/>\r\n<Attribute Name=\"CREATEPOSTID\" Description=\"\" DataType=\"\" DataValue=\"73685fce-6da0-42e1-b314-650b75ec287c\"/>\r\n<Attribute Name=\"CREATEUSERID\" Description=\"\" DataType=\"\" DataValue=\"6375b923-028d-4523-8032-054bdfa43bb1\"/>\r\n<Attribute Name=\"CREATEUSERNAME\" Description=\"\" DataType=\"\" DataValue=\"雷中蓉\"/>\r\n<Attribute Name=\"ISCHARGE\" Description=\"\" DataType=\"\" DataValue=\"0\"/>\r\n<Attribute Name=\"OWNERCOMPANYID\" Description=\"\" DataType=\"\" DataValue=\"7c61f756-8d90-4b83-a8dd-5314fb1baf46\"/>\r\n<Attribute Name=\"OWNERDEPARTMENTID\" Description=\"\" DataType=\"\" DataValue=\"89a7c04b-ffd8-4b0f-87fd-5620832bc855\"/>\r\n<Attribute Name=\"OWNERID\" Description=\"\" DataType=\"\" DataValue=\"6375b923-028d-4523-8032-054bdfa43bb1\"/>\r\n<Attribute Name=\"OWNERNAME\" Description=\"\" DataType=\"\" DataValue=\"雷中蓉\"/>\r\n<Attribute Name=\"OWNERPOSTID\" Description=\"\" DataType=\"\" DataValue=\"73685fce-6da0-42e1-b314-650b75ec287c\"/>\r\n<Attribute Name=\"TEL\" Description=\"\" DataType=\"\" DataValue=\"13800138000\"/>\r\n<Attribute Name=\"TYPEAPPROVAL\" Description=\"\" DataType=\"\" DataValue=\"129\"/>\r\n<Attribute Name=\"TYPEAPPROVALONE\" Description=\"\" DataType=\"\" DataValue=\"\"/>\r\n<Attribute Name=\"TYPEAPPROVALTHREE\" Description=\"\" DataType=\"\" DataValue=\"\"/>\r\n<Attribute Name=\"TYPEAPPROVALTWO\" Description=\"\" DataType=\"\" DataValue=\"\"/>\r\n<Attribute Name=\"UPDATEDATE\" Description=\"\" DataType=\"\" DataValue=\"\"/>\r\n<Attribute Name=\"UPDATEUSERID\" Description=\"\" DataType=\"\" DataValue=\"\"/>\r\n<Attribute Name=\"UPDATEUSERNAME\" Description=\"\" DataType=\"\" DataValue=\"\"/>\r\n<Attribute Name=\"EntityKey\" Description=\"\" DataType=\"\" DataValue=\"SMT.SaaS.OA.UI.SmtOAPersonOfficeService.EntityKey\"/>\r\n<Attribute Name=\"CHARGEMONEY\" Description=\"\" DataType=\"\" DataValue=\"0\"/>\r\n<Attribute Name=\"POSTLEVEL\" Description=\"\" DataType=\"\" DataValue=\"20\"/>\r\n<Attribute Name=\"DEPARTMENTNAME\" Description=\"\" DataType=\"\" DataValue=\"\"/>\r\n<Attribute Name=\"CURRENTEMPLOYEENAME\" Description=\"提交者\" DataType=\"\" DataValue=\"雷中蓉\"/>\r\n</Object>\r\n</System>\r\n";
            WcfFlowService.ServiceClient aa = new WcfFlowService.ServiceClient();

            foreach (var operation in aa.Endpoint.Contract.Operations)
            {
                operation.Behaviors.Find<DataContractSerializerOperationBehavior>().MaxItemsInObjectGraph = 2147483647;
            }

             //   var ccc = aa.GetFlowInfo("e2d18c92-e307-49ea-a129-baf4413bbf28", "", "", "", "T_OA_APPROVALINFO", "", "");

            WcfFlowService.SubmitData SubmitData = new WcfFlowService.SubmitData();
               SubmitData.FlowSelectType = WcfFlowService.FlowSelectType.FixedFlow;
               SubmitData.FormID = "e2d18c92-e307-49ea-a129-baf4413bbf28";
               SubmitData.ModelCode = "T_OA_APPROVALINFO";
            SubmitData.ApprovalUser = new WcfFlowService.UserInfo();
            SubmitData.ApprovalUser.CompanyID = "7a613fc2-4431-4a46-ae01-232222e9fcb5";

            SubmitData.ApprovalUser.DepartmentID = "22caf251-27de-42f5-ac4c-47aa3ea321fc";
            SubmitData.ApprovalUser.PostID = "1f9c8317-0f38-44d1-ac01-dcf012855915";
            SubmitData.ApprovalUser.UserID = "e8252d35-9f48-43d6-a313-9505b827904e";
            SubmitData.ApprovalUser.UserName = "******";
            SubmitData.ApprovalContent = "sgsg";
            SubmitData.NextStateCode = "";

            SubmitData.NextApprovalUser = new WcfFlowService.UserInfo();
            SubmitData.NextApprovalUser.CompanyID = "";
            SubmitData.NextApprovalUser.DepartmentID = "";
            SubmitData.NextApprovalUser.PostID = "";
            SubmitData.NextApprovalUser.UserID = "";
            SubmitData.NextApprovalUser.UserName = "";
              //  SubmitData.SubmitFlag = WcfFlowService.SubmitFlag.New;
               SubmitData.SubmitFlag = WcfFlowService.SubmitFlag.Approval;
               // SubmitData.XML = aaa;
            SubmitData.FlowType = WcfFlowService.FlowType.Approval;

            SubmitData.ApprovalResult = WcfFlowService.ApprovalResult.Pass;
            SubmitData.ApprovalContent = "审核通过";

            WcfFlowService.DataResult cc = aa.SubimtFlow(SubmitData);
            if (cc.FlowResult == WcfFlowService.FlowResult.MULTIUSER)
            {
                SubmitData.NextApprovalUser = new WcfFlowService.UserInfo();
                SubmitData.NextApprovalUser.CompanyID = cc.UserInfo[1].CompanyID;
                SubmitData.NextApprovalUser.DepartmentID = cc.UserInfo[1].DepartmentID;
                SubmitData.NextApprovalUser.PostID = cc.UserInfo[1].PostID;
                SubmitData.NextApprovalUser.UserID = cc.UserInfo[1].UserID;
                SubmitData.NextApprovalUser.UserName = cc.UserInfo[1].UserName;
                SubmitData.NextStateCode = cc.AppState;
                cc = aa.SubimtFlow(SubmitData);
            }
             //  WcfFlowService.FLOW_FLOWRECORDDETAIL_T[]  ccc = aa.GetFlowInfo("", "", "", "", "TestModel","33c1dd98-3cd5-4737-9601-e895063248b7", "");
               string a = "";
               // FLOW_FLOWRECORDDETAIL_TDAL a = new FLOW_FLOWRECORDDETAIL_TDAL();
               // var cc = aa.GetFlowRecordMaster("", "", "", "", "", "", "");
            //Service aa = new Service();
            //Flow_FlowRecord_T entity = new WcfFlowService.Flow_FlowRecord_T();
            //Console.WriteLine(cc.FlowResult .ToString ());
            //Console.WriteLine(cc.Err );
            //Console.WriteLine("RunTime:"+ cc.RunTime );
            //Console.WriteLine(DateTime.Now.ToString());
            //entity.CompanyID = "smt";
            ////entity.Content = "dfwfw";
            //entity.CreateDate = DateTime.Now;
            ////entity.EditDate = DateTime.Now;
            //entity.EditUserID = "";
            //entity.Flag = "F";
            //entity.FlowCode = "testflow";
            //entity.FormID = "fgdgd";

            //entity.GUID = "";
            //entity.InstanceID = "";
            //entity.ModelCode = "testflow";
            //entity.OfficeID = "ss";
            //entity.CreateUserID = "EditUserId";
            //entity.StateCode = "StartFlow";
            //entity.ParentStateCode = "StartFlow";

            // aa.StartFlow();
            //  FlowSysDAL Dal = new FlowSysDAL();
            // Flow_FlowRecord_T[] ss = aa.GetFlowInfo(entity);
            //List< Flow_FlowRecord_T> ss = aa.GetFlowInfo(entity);
            // List< Flow_FlowRecord_T> ss = Dal.GetFlowRecord();

            //Console.WriteLine("rfe");

            //ss[0].Content = "aaaaaaaaaa";
            //entity = ss[0];
            //entity.Content = "gdfvegebe";
            //  aa.UpdateFlow(entity);
            //Dal.UpdateFlowRecord(entity);

            //   aa.Close();
            //Type serviceType = typeof(Class1);
            //using (ServiceHost host = new ServiceHost(serviceType))
            //{
            //    host.Open();
            //    host.Close();
            //}

            #endregion

            #region 工作流测试
            /*

            using(WorkflowRuntime workflowRuntime = new WorkflowRuntime())
            {
                ConnectionStringSettings defaultConnectionString = ConfigurationManager.ConnectionStrings["//OracleConnection"];
                workflowRuntime.AddService(new AdoPersistenceService(defaultConnectionString, true, TimeSpan.FromMinutes(1), TimeSpan.FromMinutes(1)));
                workflowRuntime.AddService(new AdoTrackingService(defaultConnectionString));
                workflowRuntime.AddService(new AdoWorkBatchService());

                FlowEvent ExternalEvent = new FlowEvent();
                ExternalDataExchangeService objService = new ExternalDataExchangeService();
                workflowRuntime.AddService(objService);
                objService.AddService(ExternalEvent);
               TypeProvider typeProvider = new TypeProvider(null);
                workflowRuntime.AddService(typeProvider);

                AutoResetEvent waitHandle = new AutoResetEvent(false);
                workflowRuntime.WorkflowCompleted += delegate(object sender, WorkflowCompletedEventArgs e) {waitHandle.Set();};
                workflowRuntime.WorkflowTerminated += delegate(object sender, WorkflowTerminatedEventArgs e)
                {
                    Console.WriteLine(e.Exception.Message);
                    waitHandle.Set();
                };

                WorkflowInstance instance = workflowRuntime.CreateWorkflow(typeof(SMT.WFLib.Workflow2));
               // XmlReader readerxoml = XmlReader.Create("TestFlow.xml");
               // WorkflowInstance instance = workflowRuntime.CreateWorkflow(readerxoml);
               // XmlReader readerrules = XmlReader.Create("Workflow.rules");
              //  WorkflowInstance instance = workflowRuntime.CreateWorkflow(readerxoml, readerrules, null, Guid.NewGuid());
                instance.Start();

                FlowDataType.FlowData FlowData = new FlowDataType.FlowData();
                while (workflowRuntime.IsStarted)
               {

            //        // SMTFlowArg objDataEventArgs = new SMTFlowArg(InstanceId,true);
            //        // objDataEventArgs.WaitForIdle = true;

                   Console.WriteLine("输入公司ID");
                    FlowData.Flow_FlowRecord_T.CompanyID = Console.ReadLine();
                    Console.WriteLine("输入审批意见");
                    FlowData.Flow_FlowRecord_T .Content = Console.ReadLine();
                    ExternalEvent.OnDoFlow(instance.InstanceId, FlowData);
                    System.Threading.Thread.Sleep(1 * 1000);
                    ReadOnlyCollection<WorkflowQueueInfo> queueInfoData = instance.GetWorkflowQueueData();
                    if (queueInfoData.Count == 0)
                    {
                        workflowRuntime.StopRuntime();

                    }

                }

                Console.ReadLine();
              //  waitHandle.WaitOne();
            }
              */
            #endregion

            Console.ReadLine();
        }
示例#8
0
        /// <summary>
        /// 激发事件到一下状态,并获取状态代码
        /// </summary>
        /// <param name="WfRuntime"></param>
        /// <param name="instance"></param>
        /// <param name="CurrentStateName"></param>
        /// <param name="xml"></param>
        /// <returns></returns>
        public static string GetNextStateByEvent(WorkflowRuntime WfRuntime, WorkflowInstance instance, string CurrentStateName, string xml)
        {
            try
            {
                if (!WfRuntime.IsStarted)
                {
                    WfRuntime.StartRuntime();
                }
                WfRuntime.WorkflowCompleted += delegate(object sender, WorkflowCompletedEventArgs e)
                {
                    instance = null;

                };
                StateMachineWorkflowInstance workflowinstance = new StateMachineWorkflowInstance(WfRuntime, instance.InstanceId);

                ManualWorkflowSchedulerService scheduleService = WfRuntime.GetService(typeof(ManualWorkflowSchedulerService)) as ManualWorkflowSchedulerService;
                scheduleService.RunWorkflow(workflowinstance.InstanceId);
                workflowinstance.SetState(CurrentStateName);

                FlowDataType.FlowData FlowData = new FlowDataType.FlowData();
                FlowData.xml = xml;

                scheduleService.RunWorkflow(instance.InstanceId);
               WfRuntime.GetService<FlowEvent>().OnDoFlow(instance.InstanceId, FlowData);//激发流程引擎流转到下一状态
               scheduleService.RunWorkflow(instance.InstanceId);
               //while (true)
                //{
                //    string stateName = workflowinstance.CurrentStateName;

                //    if (stateName != null && stateName.ToUpper().IndexOf("START") == -1)
                //    {
                //        break;
                //    }
                //}
                //System.Threading.Thread.Sleep(1000);
               if (instance == null)
               {
                   return "EndFlow";
               }
               StateMachineWorkflowInstance workflowinstance1 = new StateMachineWorkflowInstance(WfRuntime, instance.InstanceId);
               return  workflowinstance1.CurrentStateName;
               //return GetNextState(WfRuntime, instance, CurrentStateName);
            }
            catch (Exception ex)
            {
                LogHelper.WriteLog("GetNextStateByEvent异常信息 :" + ex.ToString());
                throw new Exception(ex.Message);
            }
        }
示例#9
0
文件: FlowBLL2.cs 项目: JuRogn/OA
        /// <summary>
        /// 自选流程(对数据库操作、对服务操作)
        /// </summary>
        /// <param name="ApprovalData"></param>
        /// <param name="APPDataResult"></param>
        /// <param name="fd"></param>
        /// <returns></returns>
        public DataResult ApprovalFreeFlow(OracleConnection con, SubmitData ApprovalData, DataResult APPDataResult, List<FLOW_FLOWRECORDDETAIL_T> fd)
        {
            // WorkflowRuntime workflowRuntime = null;
            WorkflowInstance instance = null;
            FLOW_FLOWRECORDDETAIL_T entity = new FLOW_FLOWRECORDDETAIL_T();
            entity.FLOW_FLOWRECORDMASTER_T = new FLOW_FLOWRECORDMASTER_T();
            UserInfo AppUser = new UserInfo(); //下一审核人
            UserInfo AgentAppUser = new UserInfo(); //代理下一审核人
            try
            {
                APPDataResult.RunTime += "---GetAppInfoStart:" + DateTime.Now.ToString();
                List<FLOW_FLOWRECORDDETAIL_T> tmp = fd.Where(c => (c.EDITUSERID == ApprovalData.ApprovalUser.UserID || c.AGENTUSERID == ApprovalData.ApprovalUser.UserID) && c.FLAG == "0").ToList();
                APPDataResult.RunTime += "---GetAppInfoEnd:" + DateTime.Now.ToString();
                if (tmp == null)
                {
                    APPDataResult.FlowResult = FlowResult.FAIL;
                    APPDataResult.Err = "没有找到待审核信息";
                    // DataResult.UserInfo = null;
                    return APPDataResult;
                }

                entity = tmp[0];
                entity.EDITDATE = DateTime.Now;  //审批时间

                if (entity.AGENTUSERID == ApprovalData.ApprovalUser.UserID)
                {
                    entity.AGENTEDITDATE = entity.EDITDATE;  //代理审批时审批时间与代理审批时间到致
                }
                //entity.EditUserID = AppUserId;
                entity.CONTENT = ApprovalData.ApprovalContent;
                entity.CHECKSTATE = ((int)ApprovalData.ApprovalResult).ToString();


                workflowRuntime = SMTWorkFlowManage.CreateWorkFlowRuntime(true);
                LogHelper.WriteLog("ApprovalFreeFlow从持久化库在恢复创建工作流实例ID=" + tmp[0].FLOW_FLOWRECORDMASTER_T.INSTANCEID);
                instance = SMTWorkFlowManage.GetWorkflowInstance(workflowRuntime, tmp[0].FLOW_FLOWRECORDMASTER_T.INSTANCEID);// workflowRuntime.GetWorkflow(new Guid(tmp[0].FLOW_FLOWRECORDMASTER_T.INSTANCEID));

                //不同意状态处理
                if (ApprovalData.ApprovalResult == ApprovalResult.NoPass)
                {
                    instance.Terminate("0");
                    entity.FLOW_FLOWRECORDMASTER_T.CHECKSTATE = "3"; //设为终审不通过
                    entity.FLOW_FLOWRECORDMASTER_T.EDITUSERID = ApprovalData.ApprovalUser.UserID;
                    entity.FLOW_FLOWRECORDMASTER_T.EDITUSERNAME = ApprovalData.ApprovalUser.UserName;
                    entity.FLOW_FLOWRECORDMASTER_T.EDITDATE = DateTime.Now;
                    UpdateFlowRecord(con, entity, ApprovalData.NextStateCode, ApprovalData.NextApprovalUser.UserID);
                    FLOW_FLOWRECORDMASTER_TDAL.Update(con, entity.FLOW_FLOWRECORDMASTER_T);//对数据库操作
                    APPDataResult.CheckState = "3";//
                    APPDataResult.FlowResult = FlowResult.END;
                    // DataResult.UserInfo = null;
                    // return DataResult;

                }
                else
                {


                    //下一审核人赋值
                    AppUser = ApprovalData.NextApprovalUser;

                    AgentAppUser = GetAgentUserInfo(ApprovalData.ModelCode, AppUser.UserID); //查询是否启用了代理人(对服务操作)

                    FlowDataType.FlowData FlowData = new FlowDataType.FlowData();
                    FlowData.xml = ApprovalData.XML;



                    workflowRuntime.WorkflowCompleted += delegate(object sender, WorkflowCompletedEventArgs e)
                    {//完成工作流实例
                        instance = null;
                    };

                    ApprovalData.NextStateCode = ApprovalData.NextStateCode == "EndFlow" ? "EndFlow" : "Approval";
                    APPDataResult.RunTime += "---DoFlowStart:" + DateTime.Now.ToString();

                    APPDataResult = DoFlowRecord(con, workflowRuntime, instance, entity, ApprovalData.NextStateCode, AppUser, AgentAppUser, ApprovalData.SubmitFlag, ApprovalData.FlowType); //处理流程数据
                    APPDataResult.AgentUserInfo = AgentAppUser;
                    APPDataResult.RunTime += "---DoFlowEnd:" + DateTime.Now.ToString();
                    if (ApprovalData.NextStateCode == "EndFlow")
                    {
                        workflowRuntime.GetService<FlowEvent>().OnDoFlow(instance.InstanceId, FlowData); //激发流程引擎执行到一下流程
                        System.Threading.Thread.Sleep(1000);
                    }



                }
                return APPDataResult;
            }
            catch (Exception e)
            {

                throw new Exception(e.Message);
            }
            finally
            {
                AppUser = null;
                AgentAppUser = null;
                entity = null;
                instance = null;
                SMTWorkFlowManage.ColseWorkFlowRuntime(workflowRuntime);
            }
        }
示例#10
0
文件: FlowBLL2.cs 项目: JuRogn/OA
        //下一审核人提交审核时调用方法
        /// <summary>
        /// 下一审核人提交审核时调用方法
        /// </summary>
        /// <param name="submitData"></param>
        /// <param name="dataResult"></param>
        /// <param name="listDetail"></param>
        /// <returns></returns>
        public DataResult ApprovalFlow2(OracleConnection con, SubmitData submitData, DataResult dataResult, List<FLOW_FLOWRECORDDETAIL_T> listDetail, ref string msg)
        {
            ///针对会签,该次审核成功后是否跳转至下一状态
            bool isGotoNextState = true;
            // WorkflowRuntime workflowRuntime = null;
            WorkflowInstance instance = null;
            FLOW_FLOWRECORDDETAIL_T entity = new FLOW_FLOWRECORDDETAIL_T();
            entity.FLOW_FLOWRECORDMASTER_T = new FLOW_FLOWRECORDMASTER_T();

            try
            {
                #region Entity赋值
                List<FLOW_FLOWRECORDDETAIL_T> tmpEntity = listDetail.Where(c => (c.EDITUSERID == submitData.ApprovalUser.UserID || c.AGENTUSERID == submitData.ApprovalUser.UserID) && c.FLAG == "0").ToList();
                if (tmpEntity == null)
                {
                    dataResult.FlowResult = FlowResult.FAIL;
                    dataResult.Err = "没有找到待审核信息";
                    return dataResult;
                }
                entity = tmpEntity[0];
                entity.EDITDATE = DateTime.Now;  //审批时间
                if (entity.AGENTUSERID == submitData.ApprovalUser.UserID)
                {
                    entity.AGENTEDITDATE = entity.EDITDATE;  //代理审批时审批时间与代理审批时间到致
                }

                entity.CONTENT = submitData.ApprovalContent;
                entity.CHECKSTATE = ((int)submitData.ApprovalResult).ToString();
                #endregion

                //workflowRuntime.StartRuntime();
                msg += "SMTWorkFlowManage.CreateWorkFlowRuntime(true)" + DateTime.Now.ToString() + "\r\n";
                workflowRuntime = SMTWorkFlowManage.CreateWorkFlowRuntime(true);
                try
                {
                    instance = SMTWorkFlowManage.GetWorkflowInstance(workflowRuntime, entity.FLOW_FLOWRECORDMASTER_T.INSTANCEID);// workflowRuntime.GetWorkflow(new Guid(tmp[0].FLOW_FLOWRECORDMASTER_T.INSTANCEID));
                    LogHelper.WriteLog("FormID=" + submitData.FormID + ";ApprovalFlow2(try)从持久化库[ 完成 ]恢复创建工作流实例ID=" + entity.FLOW_FLOWRECORDMASTER_T.INSTANCEID);


                }
                catch (Exception exGetWorkflowInstance)
                {
                    #region 重新创建新流程,将新流程设置为当前状态。
                    try
                    {
                        string exc = "FormID=" + submitData.FormID + ";从持久化恢复工作流失败 SMTWorkFlowManage.GetWorkflowInstance(" + workflowRuntime.Name + ", " + entity.FLOW_FLOWRECORDMASTER_T.INSTANCEID + ");原因如下:\r\n" + exGetWorkflowInstance.ToString() + ";\r\n下面重新创建新流程,并将新流程设置为当前状态;\r\nGetFlowByModelName:submitData.ApprovalUser.DepartmentID=" + submitData.ApprovalUser.DepartmentID + ";OrgType='" + ((int)submitData.FlowType).ToString() + "'";
                        LogHelper.WriteLog(exc);

                        List<FLOW_MODELFLOWRELATION_T> MODELFLOWRELATION = GetFlowByModelName(con, entity.FLOW_FLOWRECORDMASTER_T.CREATECOMPANYID, entity.FLOW_FLOWRECORDMASTER_T.CREATEDEPARTMENTID, submitData.ModelCode, ((int)submitData.FlowType).ToString());

                        FLOW_MODELFLOWRELATION_T flowRelation = MODELFLOWRELATION[0];
                        FLOW_FLOWDEFINE_T flowDefine = flowRelation.FLOW_FLOWDEFINE_T;
                        instance = SMTWorkFlowManage.CreateWorkflowInstance(workflowRuntime, flowDefine.XOML, flowDefine.RULES);
                        LogHelper.WriteLog("FormID=" + submitData.FormID + ";ApprovalFlow2(catch)完成重新创建工作流实例ID=" + instance.InstanceId);
                        StateMachineWorkflowInstance workflowinstance = new StateMachineWorkflowInstance(workflowRuntime, instance.InstanceId);
                        workflowinstance.SetState(entity.STATECODE);
                        System.Threading.Thread.Sleep(1000);
                        instance = SMTWorkFlowManage.GetWorkflowInstance(workflowRuntime, instance.InstanceId.ToString());
                        LogHelper.WriteLog("FormID=" + submitData.FormID + ";ApprovalFlow2(catch)从持久化库再恢复刚才创建工作流实例ID=" + instance.InstanceId);

                        entity.FLOW_FLOWRECORDMASTER_T.INSTANCEID = instance.InstanceId.ToString();
                        //FLOW_FLOWRECORDDETAIL_TDAL.UpdateMasterINSTANCEID(entity.FLOW_FLOWRECORDMASTER_T);
                        FLOW_FLOWRECORDMASTER_TDAL.UpdateMasterINSTANCEID(con, entity.FLOW_FLOWRECORDMASTER_T);

                    }
                    catch (Exception exNewInstance)
                    {
                        LogHelper.WriteLog("重新创建新流程,将新流程设置为当前状态失败:FormID=" + submitData.FormID + "FlowBll2->ApprovalFlow2" + exNewInstance.Message);
                        //Tracer.Debug("exNewInstance: -" + submitData.FormID + "--submitDataXML:" + submitData.XML + "-" + exNewInstance.InnerException + exNewInstance.Message);
                        throw exGetWorkflowInstance;
                    }
                    #endregion
                }
                msg += "SMTWorkFlowManage.CreateWorkFlowRuntime(true)完成" + DateTime.Now.ToString() + "\r\n";


                #region 当前状态会签状态处理
                bool currentIsCountersign = false;
                string currentCountersignType = "0";

                Utility.IsCountersign(entity.FLOW_FLOWRECORDMASTER_T.ACTIVEROLE, entity.STATECODE, ref currentIsCountersign, ref currentCountersignType);
                if (currentIsCountersign)
                {
                    msg += "状态会签状态处理" + DateTime.Now.ToString() + "\r\n";
                    if (currentCountersignType == "1")//一人通过即所有通过,可以跳转至下一状态
                    {
                        isGotoNextState = true;
                    }
                    else
                    {
                        ///该审核是会签的最后的审核人
                        if (entity.FLOW_FLOWRECORDMASTER_T.FLOW_FLOWRECORDDETAIL_T.Count == 1)
                        {
                            isGotoNextState = true;
                        }
                        else
                        {
                            isGotoNextState = false;
                        }
                    }
                    msg += "状态会签状态处理完成" + DateTime.Now.ToString() + "\r\n";
                }
                #endregion
                //不同意状态处理
                if (submitData.ApprovalResult == ApprovalResult.NoPass)
                {
                    msg += "不同意状态处理" + DateTime.Now.ToString() + "\r\n";
                    #region
                    instance.Terminate("0");
                    entity.FLOW_FLOWRECORDMASTER_T.CHECKSTATE = "3"; //设为终审不通过
                    entity.FLOW_FLOWRECORDMASTER_T.EDITUSERID = submitData.ApprovalUser.UserID;
                    entity.FLOW_FLOWRECORDMASTER_T.EDITUSERNAME = submitData.ApprovalUser.UserName;
                    entity.FLOW_FLOWRECORDMASTER_T.EDITDATE = DateTime.Now;
                    UpdateFlowRecord(con, entity, submitData.NextStateCode, submitData.NextApprovalUser.UserID);
                    FLOW_FLOWRECORDMASTER_TDAL.Update(entity.FLOW_FLOWRECORDMASTER_T);
                    dataResult.CheckState = "3";//
                    dataResult.FlowResult = FlowResult.END;

                    if (currentIsCountersign)
                    {
                        #region 当前是会签状态,删除未审核记录
                        entity.FLOW_FLOWRECORDMASTER_T.FLOW_FLOWRECORDDETAIL_T
                                .Where(detail => detail.FLOWRECORDDETAILID != entity.FLOWRECORDDETAILID && detail.STATECODE == entity.STATECODE && detail.FLAG == "0")
                                .ToList().ForEach(item =>
                                {
                                    item.FLAG = "1";
                                    item.CHECKSTATE = "8";
                                    UpdateFlowRecord2(con, item);
                                });
                        #endregion
                    }

                    #endregion
                    msg += "不同意状态处理完成" + DateTime.Now.ToString() + "\r\n";

                }
                else
                {
                    if (!isGotoNextState)
                    {
                        msg += "isGotoNextState" + DateTime.Now.ToString() + "\r\n";
                        #region

                        UpdateFlowRecord2(con, entity);
                        dataResult.AppState = entity.STATECODE;
                        dataResult.FlowResult = FlowResult.SUCCESS;
                        dataResult.CheckState = "1";
                        #endregion
                        msg += "isGotoNextState完成" + DateTime.Now.ToString() + "\r\n";
                    }
                    else
                    {
                        msg += "获取下一状态数据" + DateTime.Now.ToString() + "\r\n";
                        #region 获取下一状态数据
                        List<string> User = new List<string>();
                        User.Add(entity.FLOW_FLOWRECORDMASTER_T.CREATEUSERID);
                        User.Add(submitData.ApprovalUser.UserID);

                        List<string> tmpPostID = new List<string>();
                        tmpPostID.Add(entity.FLOW_FLOWRECORDMASTER_T.CREATEPOSTID);
                        tmpPostID.Add(entity.EDITPOSTID);
                        GetUserByInstance2(entity.FLOW_FLOWRECORDMASTER_T.CREATECOMPANYID, workflowRuntime, instance, entity.FLOW_FLOWRECORDMASTER_T.ACTIVEROLE, submitData.XML, entity.STATECODE, User, tmpPostID, submitData.FlowType, ref dataResult);

                        if (dataResult.FlowResult == FlowResult.FAIL)
                        {
                            return dataResult;
                        }
                        submitData.NextStateCode = dataResult.AppState;
                        if (dataResult.IsCountersign)
                        {
                            #region
                            if (dataResult.FlowResult == FlowResult.Countersign)
                            {
                                if (submitData.DictCounterUser == null || submitData.DictCounterUser.Keys.Count == 0)
                                {
                                    return dataResult;
                                }
                            }
                            else
                            {
                                if (submitData.DictCounterUser == null || submitData.DictCounterUser.Keys.Count == 0)
                                {
                                    submitData.DictCounterUser = dataResult.DictCounterUser;
                                }
                            }
                            #endregion
                        }
                        else
                        {
                            #region
                            if (dataResult.FlowResult == FlowResult.MULTIUSER)
                            {
                                if (submitData.NextApprovalUser == null || (Utility.GetString(submitData.NextApprovalUser.UserID) == "" || Utility.GetString(submitData.NextApprovalUser.UserName) == ""))
                                {
                                    return dataResult;
                                }
                            }
                            else
                            {
                                if (submitData.DictCounterUser == null || submitData.DictCounterUser.Keys.Count == 0)
                                {
                                    submitData.NextApprovalUser = dataResult.UserInfo[0];
                                }
                            }
                            #endregion
                        }

                        #endregion

                        msg += "获取下一状态数据完成" + DateTime.Now.ToString() + "\r\n";


                        msg += "单会签情况" + DateTime.Now.ToString() + "\r\n";
                        #region 对于单会签情况,需要将其他审核人的审核设为会签通过状态

                        if (currentIsCountersign && currentCountersignType == "1")
                        {
                            entity.FLOW_FLOWRECORDMASTER_T.FLOW_FLOWRECORDDETAIL_T
                               .Where(detail => detail.FLOWRECORDDETAILID != entity.FLOWRECORDDETAILID && detail.STATECODE == entity.STATECODE && detail.FLAG == "0")
                               .ToList().ForEach(item =>
                               {
                                   item.FLAG = "1";
                                   item.CHECKSTATE = "7";
                                   UpdateFlowRecord2(con, item);
                               });
                        }
                        #endregion
                        msg += "单会签情况完成" + DateTime.Now.ToString() + "\r\n";

                        #region


                        FlowDataType.FlowData FlowData = new FlowDataType.FlowData();
                        FlowData.xml = submitData.XML;
                        workflowRuntime.WorkflowCompleted += delegate(object sender, WorkflowCompletedEventArgs e)
                        {
                            instance = null;

                        };
                        msg += "处理kpi" + DateTime.Now.ToString() + "\r\n";

                        #region 处理kpi时间
                        string KPITime = "";
                        //PerformanceServiceWS.PerformanceServiceClient psc = new PerformanceServiceWS.PerformanceServiceClient();
                        string pscResult = entity.FLOW_FLOWRECORDMASTER_T.KPITIMEXML;
                        //psc.Close();
                        if (!string.IsNullOrEmpty(pscResult))
                        {
                            XElement xe = XElement.Parse(pscResult);
                            Func<XElement, bool> f = (x) =>
                            {
                                XAttribute xid = x.Attribute("id");
                                XAttribute xvalue = x.Attribute("value");
                                if (xid == null || xvalue == null)
                                    return false;
                                else
                                {
                                    if (xid.Value == dataResult.AppState)
                                        return true;
                                    else return false;
                                }
                            };
                            XElement FlowNode = xe.Elements("FlowNode").FirstOrDefault(f);
                            if (FlowNode != null)
                            {
                                KPITime = FlowNode.Attribute("value").Value;
                            }
                        }
                        dataResult.KPITime = KPITime;

                        #endregion

                        msg += "处理kpi完成" + DateTime.Now.ToString() + "\r\n";

                        if (!dataResult.IsCountersign)
                        {
                            msg += "非会签" + DateTime.Now.ToString() + "\r\n";
                            #region  非会签

                            UserInfo AppUser = submitData.NextApprovalUser;
                            dataResult.UserInfo.Clear();
                            dataResult.UserInfo.Add(AppUser);
                            UserInfo AgentAppUser = GetAgentUserInfo(submitData.ModelCode, AppUser.UserID);//查询是否启用了代理人                            
                            dataResult = DoFlowRecord2(con, workflowRuntime, instance, entity, submitData.NextStateCode, AppUser, AgentAppUser, submitData.SubmitFlag, submitData.FlowType); //处理流程数据
                            dataResult.AgentUserInfo = AgentAppUser;
                            dataResult.IsCountersign = false;
                            #endregion
                            msg += "非会签完成" + DateTime.Now.ToString() + "\r\n";
                        }
                        else
                        {
                            #region  会签

                            dataResult.DictCounterUser = submitData.DictCounterUser;
                            Dictionary<UserInfo, UserInfo> dictAgentUserInfo = GetAgentUserInfo2(submitData.ModelCode, submitData.DictCounterUser);
                            dataResult = DoFlowRecord_Approval(con, workflowRuntime, instance, entity, submitData.NextStateCode, submitData.DictCounterUser, dictAgentUserInfo, submitData.SubmitFlag, submitData.FlowType); //处理流程数据
                            dataResult.DictAgentUserInfo = dictAgentUserInfo;
                            dataResult.IsCountersign = true;


                            #endregion
                        }

                        msg += "激发流程引擎执行到一下流程" + DateTime.Now.ToString() + "\r\n";
                        #region 激发流程引擎执行到一下流程
                        if (dataResult.AppState == null || dataResult.AppState == "")
                            workflowRuntime.GetService<FlowEvent>().OnDoFlow(instance.InstanceId, FlowData); //激发流程引擎执行到一下流程
                        else
                        {
                            string ss = "";
                            int n = 0;
                            StateMachineWorkflowInstance workflowinstance = new StateMachineWorkflowInstance(workflowRuntime, instance.InstanceId);

                            workflowinstance.SetState(dataResult.AppState); //流程跳转到指定节点
                            //while (true)
                            //{
                            //    ss += (n++).ToString()+"|" + workflowinstance.CurrentStateName;
                            //    string stateName = workflowinstance.CurrentStateName;

                            //    if (stateName != null && stateName.ToUpper().IndexOf("START") == -1)
                            //    {
                            //        break;
                            //    }
                            //}
                        }
                        #endregion
                        msg += "激发流程引擎执行到一下流程完成" + DateTime.Now.ToString() + "\r\n";
                        //dataResult.CanSendMessage = true;

                        msg += "System.Threading.Thread.Sleep(1000)" + DateTime.Now.ToString() + "\r\n";
                        System.Threading.Thread.Sleep(1000);
                        if (submitData.FlowType == FlowType.Task)
                            dataResult.SubModelCode = Utility.GetSubModelCode(entity.FLOW_FLOWRECORDMASTER_T.ACTIVEROLE, dataResult.AppState); //返回下一子模块代码
                        msg += "System.Threading.Thread.Sleep(1000)完成" + DateTime.Now.ToString() + "\r\n";

                        #endregion
                    }


                }
                dataResult.CurrentIsCountersign = currentIsCountersign;
                dataResult.IsGotoNextState = isGotoNextState;
                return dataResult;
            }
            catch (Exception e)
            {
                throw new Exception(e.Message);
            }
            finally
            {

                entity = null;
                instance = null;
                SMTWorkFlowManage.ColseWorkFlowRuntime(workflowRuntime);
            }
        }
示例#11
0
文件: FlowBLL2.cs 项目: JuRogn/OA
        /// <summary>
        /// 新增流程(对数据库操作)
        /// </summary>
        /// <param name="ApprovalData"></param>
        /// <param name="APPDataResult"></param>
        /// <returns></returns>    
        public DataResult AddFlow2(OracleConnection con, SubmitData submitData, DataResult dataResult, ref string msg)
        {
            // WorkflowRuntime workflowRuntime = null;
            WorkflowInstance instance = null;


            try
            {
                msg += "获取定义的流程" + DateTime.Now.ToString() + "\r\n";
                #region 获取定义的流程
                LogHelper.WriteLog("获取定义的流程.GetFlowByModelName:submitData.ApprovalUser.DepartmentID=" + submitData.ApprovalUser.DepartmentID + ";OrgType='" + ((int)submitData.FlowType).ToString() + "'");
                List<FLOW_MODELFLOWRELATION_T> MODELFLOWRELATION = GetFlowByModelName(con, submitData.ApprovalUser.CompanyID, submitData.ApprovalUser.DepartmentID, submitData.ModelCode, ((int)submitData.FlowType).ToString());//对数据库操作
                if (MODELFLOWRELATION == null || MODELFLOWRELATION.Count == 0)
                {
                    dataResult.FlowResult = FlowResult.FAIL;
                    dataResult.Err = "没有找到可使用的流程";
                    return dataResult;
                }
                msg += "获取定义的流程完成" + DateTime.Now.ToString() + "\r\n";
                #endregion
                FLOW_MODELFLOWRELATION_T flowRelation = MODELFLOWRELATION[0];
                FLOW_FLOWDEFINE_T flowDefine = flowRelation.FLOW_FLOWDEFINE_T;
                if (flowDefine.RULES != null && flowDefine.RULES.Trim() == "")
                {
                    flowDefine.RULES = null;
                }
                //if (string.IsNullOrEmpty(flowDefine.RULES.Trim()))
                //{
                //    flowDefine.RULES = null;
                //}
                msg += " SMTWorkFlowManage.CreateWorkFlowRuntime(true)" + DateTime.Now.ToString() + "\r\n";
                workflowRuntime = SMTWorkFlowManage.CreateWorkFlowRuntime(true);
                instance = SMTWorkFlowManage.CreateWorkflowInstance(workflowRuntime, flowDefine.XOML, flowDefine.RULES);
                LogHelper.WriteLog("AddFlow2创建工作流实例ID=" + instance.InstanceId);
                workflowRuntime.WorkflowCompleted += delegate(object sender, WorkflowCompletedEventArgs e)
                {
                    instance = null;

                };
                msg += " SMTWorkFlowManage.CreateWorkFlowRuntime(true)完成" + DateTime.Now.ToString() + "\r\n";
                #region master赋值
                FLOW_FLOWRECORDMASTER_T master = new FLOW_FLOWRECORDMASTER_T();
                master.INSTANCEID = instance.InstanceId.ToString();
                master.BUSINESSOBJECT = submitData.XML;
                master.FORMID = submitData.FormID;
                master.MODELCODE = submitData.ModelCode;
                master.ACTIVEROLE = Utility.GetActiveRlue(flowDefine.LAYOUT);
                master.FLOWTYPE = ((int)submitData.FlowType).ToString();
                master.FLOWSELECTTYPE = ((int)submitData.FlowSelectType).ToString();
                master.FLOWCODE = flowDefine.FLOWCODE;
                #endregion

                #region 获取下一状态数据
                msg += " 获取下一状态数据" + DateTime.Now.ToString() + "\r\n";
                DateTime star = DateTime.Now;
                GetUserByFlow2(submitData.ApprovalUser.CompanyID, flowDefine.XOML, flowDefine.RULES, master.ACTIVEROLE, submitData.XML, submitData.ApprovalUser.UserID, submitData.ApprovalUser.PostID, submitData.FlowType, ref dataResult, ref msg);
                DateTime end = DateTime.Now;
                msg += " 获取下一状态数据完成" + DateTime.Now.ToString() + "\r\n";
                string str = Service2.DateDiff(end, star);
                if (dataResult.FlowResult == FlowResult.FAIL)
                {
                    return dataResult;
                }
                submitData.NextStateCode = dataResult.AppState;
                if (dataResult.IsCountersign)
                {
                    #region
                    if (dataResult.FlowResult == FlowResult.Countersign)
                    {
                        if (submitData.DictCounterUser == null || submitData.DictCounterUser.Keys.Count == 0)
                        {
                            return dataResult;
                        }
                    }
                    else
                    {
                        if (submitData.DictCounterUser == null || submitData.DictCounterUser.Keys.Count == 0)
                        {
                            submitData.DictCounterUser = dataResult.DictCounterUser;
                        }
                    }
                    #endregion
                }
                else
                {
                    #region
                    if (dataResult.FlowResult == FlowResult.MULTIUSER)
                    {
                        if (submitData.NextApprovalUser == null || (Utility.GetString(submitData.NextApprovalUser.UserID) == "" || Utility.GetString(submitData.NextApprovalUser.UserName) == ""))
                        {
                            return dataResult;
                        }
                    }
                    else
                    {
                        if (submitData.DictCounterUser == null || submitData.DictCounterUser.Keys.Count == 0)
                        {
                            submitData.NextApprovalUser = dataResult.UserInfo[0];
                        }
                    }
                    #endregion
                }

                #endregion

                #region 实体赋值
                FLOW_FLOWRECORDDETAIL_T entity = new FLOW_FLOWRECORDDETAIL_T();
                entity.FLOW_FLOWRECORDMASTER_T = master;
                entity.CREATECOMPANYID = submitData.ApprovalUser.CompanyID;
                entity.CREATEDEPARTMENTID = submitData.ApprovalUser.DepartmentID;
                entity.CREATEPOSTID = submitData.ApprovalUser.PostID;
                entity.CREATEUSERID = submitData.ApprovalUser.UserID;
                entity.CREATEUSERNAME = submitData.ApprovalUser.UserName;
                #endregion
                msg += " 处理kpi时间" + DateTime.Now.ToString() + "\r\n";
                #region 处理kpi时间
                string KPITime = "";
                #region 加入缓存
                string pscResult = CacheProvider.GetCache<string>(flowRelation.MODELFLOWRELATIONID);
                if (string.IsNullOrEmpty(pscResult))
                {
                    PerformanceServiceWS.PerformanceServiceClient psc = new PerformanceServiceWS.PerformanceServiceClient();
                    pscResult = psc.GetKPIPointsByBusinessCode(flowRelation.MODELFLOWRELATIONID);//调用服务
                    CacheProvider.Add<string>(flowRelation.MODELFLOWRELATIONID, pscResult);
                    psc.Close();
                }
                #endregion
                //PerformanceServiceWS.PerformanceServiceClient psc = new PerformanceServiceWS.PerformanceServiceClient();
                //string pscResult = psc.GetKPIPointsByBusinessCode(flowRelation.MODELFLOWRELATIONID);//调用服务
                //psc.Close();
                if (!string.IsNullOrEmpty(pscResult))
                {
                    XElement xe = XElement.Parse(pscResult);
                    Func<XElement, bool> f = (x) =>
                    {
                        XAttribute xid = x.Attribute("id");
                        XAttribute xvalue = x.Attribute("value");
                        if (xid == null || xvalue == null)
                            return false;
                        else
                        {
                            if (xid.Value == dataResult.AppState)
                                return true;
                            else return false;
                        }
                    };
                    XElement FlowNode = xe.Elements("FlowNode").FirstOrDefault(f);
                    if (FlowNode != null)
                    {
                        KPITime = FlowNode.Attribute("value").Value;
                    }
                }

                dataResult.KPITime = KPITime;
                master.KPITIMEXML = pscResult;
                #endregion
                msg += " 处理kpi时间完成" + DateTime.Now.ToString() + "\r\n";
                FlowDataType.FlowData FlowData = new FlowDataType.FlowData();
                FlowData.xml = submitData.XML;

                if (!dataResult.IsCountersign)
                {
                    #region  非会签
                    UserInfo AppUser = new UserInfo(); //下一审核人
                    AppUser = submitData.NextApprovalUser;
                    dataResult.UserInfo.Clear();
                    dataResult.UserInfo.Add(AppUser);
                    UserInfo AgentAppUser = GetAgentUserInfo(submitData.ModelCode, AppUser.UserID);//查询是否启用了代理人                    
                    dataResult = DoFlowRecord2(con, workflowRuntime, instance, entity, submitData.NextStateCode, AppUser, AgentAppUser, submitData.SubmitFlag, submitData.FlowType); //处理流程数据
                    dataResult.IsCountersign = false;
                    dataResult.AgentUserInfo = AgentAppUser;
                    #endregion
                }
                else
                {
                    msg += " 会签" + DateTime.Now.ToString() + "\r\n";
                    #region  会签
                    //Tracer.Debug("-----DoFlowRecord_Add:" + DateTime.Now.ToString()+"\n");
                    dataResult.DictCounterUser = submitData.DictCounterUser;
                    Dictionary<UserInfo, UserInfo> dictAgentUserInfo = GetAgentUserInfo2(submitData.ModelCode, submitData.DictCounterUser);
                    dataResult = DoFlowRecord_Add(con, workflowRuntime, instance, entity, submitData.NextStateCode, submitData.DictCounterUser, dictAgentUserInfo, submitData.SubmitFlag, submitData.FlowType); //处理流程数据
                    //Tracer.Debug("-----DoFlowRecord_AddEnd:" + DateTime.Now.ToString()+"\n");
                    dataResult.IsCountersign = true;
                    dataResult.DictAgentUserInfo = dictAgentUserInfo;
                    #endregion
                    msg += "会签完成" + DateTime.Now.ToString() + "\r\n";
                }
                msg += "激发流程引擎执行到一下流程" + DateTime.Now.ToString() + "\r\n";
                #region 激发流程引擎执行到一下流程
                string ss = "";
                int n = 0;
                if (dataResult.AppState == null || dataResult.AppState == "")
                {
                    msg += " workflowRuntime.GetService<FlowEvent>()" + DateTime.Now.ToString() + "\r\n";
                    workflowRuntime.GetService<FlowEvent>().OnDoFlow(instance.InstanceId, FlowData); //激发流程引擎执行到一下流程
                    msg += " workflowRuntime.GetService<FlowEvent>()完成" + DateTime.Now.ToString() + "\r\n";
                }
                else
                {
                    StateMachineWorkflowInstance workflowinstance = new StateMachineWorkflowInstance(workflowRuntime, instance.InstanceId);

                    workflowinstance.SetState(dataResult.AppState); //流程跳转到指定节点

                    while (true)
                    {

                        ss += (n++).ToString() + "|" + workflowinstance.CurrentStateName + "\r\n";
                        string stateName = workflowinstance.CurrentStateName;
                        if (stateName != null && stateName.ToUpper().IndexOf("STATE") >= 0)
                        {
                            break;
                        }

                    }
                }

                #endregion
                msg += "激发流程引擎执行到一下流程完成" + DateTime.Now.ToString() + "\r\n";
                msg += "System.Threading.Thread.Sleep(1000)" + DateTime.Now.ToString() + "\r\n";
                //System.Threading.Thread.Sleep(1000);//当前用到
                dataResult.ModelFlowRelationID = flowRelation.MODELFLOWRELATIONID; //返回关联ID
                dataResult.KPITime = KPITime;
                //dataResult.CanSendMessage = true;
                if (submitData.FlowType == FlowType.Task)
                {
                    dataResult.SubModelCode = Utility.GetSubModelCode(master.ACTIVEROLE, dataResult.AppState); //返回下一子模块代码
                }
                msg += "System.Threading.Thread.Sleep(1000)完成" + DateTime.Now.ToString() + "\r\n";
                return dataResult;
            }

            catch (Exception e)
            {

                throw new Exception(e.Message);
            }
            finally
            {

                instance = null;
                SMTWorkFlowManage.ColseWorkFlowRuntime(workflowRuntime);
            }


        }
示例#12
0
        /// <summary>
        /// 自选流程(对数据库操作、对服务操作)
        /// </summary>
        /// <param name="ApprovalData"></param>
        /// <param name="APPDataResult"></param>
        /// <param name="fd"></param>
        /// <returns></returns>
        public DataResult ApprovalFreeFlow(SubmitData ApprovalData, DataResult APPDataResult, List<FLOW_FLOWRECORDDETAIL_T> fd, ref FlowUser user)
        {
            // WorkflowRuntime workflowRuntime = null;
            WorkflowInstance instance = null;
            FLOW_FLOWRECORDDETAIL_T entity = new FLOW_FLOWRECORDDETAIL_T();
            entity.FLOW_FLOWRECORDMASTER_T = new FLOW_FLOWRECORDMASTER_T();
            UserInfo AppUser = new UserInfo(); //下一审核人
            UserInfo AgentAppUser = new UserInfo(); //代理下一审核人
            try
            {
                APPDataResult.RunTime += "---GetAppInfoStart:" + DateTime.Now.ToString();
                List<FLOW_FLOWRECORDDETAIL_T> tmp = fd.Where(c => (c.EDITUSERID == ApprovalData.ApprovalUser.UserID || c.AGENTUSERID == ApprovalData.ApprovalUser.UserID) && c.FLAG == "0").ToList();
                APPDataResult.RunTime += "---GetAppInfoEnd:" + DateTime.Now.ToString();
                if (tmp == null)
                {
                    APPDataResult.FlowResult = FlowResult.FAIL;
                    APPDataResult.Err = "没有找到待审核信息";
                    user.TrackingMessage += "没有找到待审核信息\r\n";
                    // DataResult.UserInfo = null;
                    return APPDataResult;
                }

                entity = tmp[0];
                entity.EDITDATE = DateTime.Now;  //审批时间

                if (entity.AGENTUSERID == ApprovalData.ApprovalUser.UserID)
                {
                    entity.AGENTEDITDATE = entity.EDITDATE;  //代理审批时审批时间与代理审批时间到致
                }
                //entity.EditUserID = AppUserId;
                entity.CONTENT = ApprovalData.ApprovalContent;
                entity.CHECKSTATE = ((int)ApprovalData.ApprovalResult).ToString();

                try
                {
                    workflowRuntime = SMTWorkFlowManage.CreateWorkFlowRuntime(true);
                    Tracer.Debug("Formid=" + ApprovalData.FormID + ";开始 审核获取[自选流程]工作流实例ID=" + tmp[0].FLOW_FLOWRECORDMASTER_T.INSTANCEID);
                    instance = SMTWorkFlowManage.GetWorkflowInstance(workflowRuntime, tmp[0].FLOW_FLOWRECORDMASTER_T.INSTANCEID);// workflowRuntime.GetWorkflow(new Guid(tmp[0].FLOW_FLOWRECORDMASTER_T.INSTANCEID));
                    Tracer.Debug("Formid=" + ApprovalData.FormID + ";完成 审核获取[自选流程]工作流实例ID=" + instance.InstanceId.ToString());
                }
                catch
                {
                    Tracer.Debug("Formid=" + ApprovalData.FormID + ";完成 审核获取[自选流程]工作流实例 出错,需要重新构造工作流程实例,原来的实例ID=" + tmp[0].FLOW_FLOWRECORDMASTER_T.INSTANCEID);
                    workflowRuntime = SMTWorkFlowManage.CreateWorkFlowRuntime(true);
                    instance = SMTWorkFlowManage.CreateFreeWorkflowInstance(workflowRuntime, "FreeFlow.xml");//自选流程使用
                    tmp[0].FLOW_FLOWRECORDMASTER_T.INSTANCEID = instance.InstanceId.ToString();
                    Tracer.Debug("Formid=" + ApprovalData.FormID + ";完成 重新构造[自选流程]工作流程实例,新的实例ID=" + tmp[0].FLOW_FLOWRECORDMASTER_T.INSTANCEID);
                }
                //不同意状态处理
                if (ApprovalData.ApprovalResult == ApprovalResult.NoPass)
                {
                    instance.Terminate("0");
                    user.TrackingMessage += "终审不通过,中止流程 FORMID=" + user.FormID;
                    entity.FLOW_FLOWRECORDMASTER_T.CHECKSTATE = "3"; //设为终审不通过
                    entity.FLOW_FLOWRECORDMASTER_T.EDITUSERID = ApprovalData.ApprovalUser.UserID;
                    entity.FLOW_FLOWRECORDMASTER_T.EDITUSERNAME = ApprovalData.ApprovalUser.UserName;
                    entity.FLOW_FLOWRECORDMASTER_T.EDITDATE = DateTime.Now;
                    UpdateFlowDetailRecord(entity, ApprovalData.NextStateCode, ApprovalData.NextApprovalUser.UserID);
                    FLOW_FLOWRECORDMASTER_TDAL.Update(entity.FLOW_FLOWRECORDMASTER_T);//对数据库操作
                    APPDataResult.CheckState = "3";//
                    user.TrackingMessage += "终审不通过,设置状态 CheckState=3;FORMID=" + user.FormID;
                    APPDataResult.FlowResult = FlowResult.END;
                    // DataResult.UserInfo = null;
                    // return DataResult;

                }
                else
                {

                    //下一审核人赋值
                    if (ApprovalData.NextApprovalUser != null && !string.IsNullOrEmpty(ApprovalData.NextApprovalUser.UserID))
                    {
                        AppUser = ApprovalData.NextApprovalUser;
                    }
                    else
                    {
                        AppUser = ApprovalData.ApprovalUser;//如果没有下一审核人,下一审核人就是当前的审核人
                    }
                    user.TrackingMessage += "选择了下一个审核人 AppUser="******";FORMID=" + user.FormID;
                    AgentAppUser = GetAgentUserInfo(ApprovalData.ModelCode, AppUser.UserID); //查询是否启用了代理人(对服务操作)
                    user.TrackingMessage += "查询是否启用了代理人 AppUser="******";FORMID=" + user.FormID;
                    FlowDataType.FlowData FlowData = new FlowDataType.FlowData();
                    FlowData.xml = ApprovalData.XML;

                    //workflowRuntime.WorkflowCompleted += delegate(object sender, WorkflowCompletedEventArgs e)
                    //{//完成工作流实例

                    //    instance = null;

                    //};

                    ApprovalData.NextStateCode = ApprovalData.NextStateCode == "EndFlow" ? "EndFlow" : "Approval";
                    APPDataResult.RunTime += "---DoFlowStart:" + DateTime.Now.ToString();

                    APPDataResult = DoFlowRecord(workflowRuntime, instance, entity, ApprovalData.NextStateCode, AppUser, AgentAppUser, ApprovalData.SubmitFlag, ApprovalData.FlowType, ref user); //处理流程数据
                    APPDataResult.AgentUserInfo = AgentAppUser;
                    APPDataResult.RunTime += "---DoFlowEnd:" + DateTime.Now.ToString();
                    if (ApprovalData.NextStateCode == "EndFlow")
                    {
                        //ManualWorkflowSchedulerService scheduleService = workflowRuntime.GetService(typeof(ManualWorkflowSchedulerService)) as ManualWorkflowSchedulerService;
                        //scheduleService.RunWorkflow(instance.InstanceId);

                        //workflowRuntime.GetService<FlowEvent>().OnDoFlow(instance.InstanceId, FlowData); //激发流程引擎执行到一下流程
                        //scheduleService.RunWorkflow(instance.InstanceId);
                        //System.Threading.Thread.Sleep(1000);
                    }

                }
                return APPDataResult;
            }
            catch (Exception e)
            {
                Tracer.Debug("自选流程提交出错:FORMID=" + user.FormID + "\r\n 异常信息:" + e.ToString());
                throw new Exception("自选流程提交出错,请联系管理员! \r\n FormID=" + user.FormID + "");
            }
            finally
            {
                AppUser = null;
                AgentAppUser = null;
                entity = null;
                instance = null;
                SMTWorkFlowManage.ColseWorkFlowRuntime(workflowRuntime);
            }
        }
示例#13
0
文件: SMTFlowArg.cs 项目: JuRogn/OA
 public SMTFlowArg(Guid instanceId, FlowDataType.FlowData flowdata)
     : base(instanceId)
 {
     FlowData = flowdata;
 }
示例#14
0
文件: FlowBLL.cs 项目: JuRogn/OA
        //下一审核人提交审核时调用方法
        /// <summary>
        /// 固定流程:下一审核人提交审核时调用方法
        /// </summary>
        /// <param name="submitData"></param>
        /// <param name="dataResult"></param>
        /// <param name="listDetail"></param>
        /// <returns></returns>
        public DataResult ApprovalFlow2(OracleConnection con, SubmitData submitData, DataResult dataResult, List<FLOW_FLOWRECORDDETAIL_T> listDetail, ref FlowUser user, ref string msg)
        {
            if (submitData.NextApprovalUser == null)
            {
                submitData.NextApprovalUser = new UserInfo();
            }
            ///针对会签,该次审核成功后是否跳转至下一状态
            bool isGotoNextState = true;
            // WorkflowRuntime workflowRuntime = null;
            WorkflowInstance instance = null;
            FLOW_FLOWRECORDDETAIL_T entity = new FLOW_FLOWRECORDDETAIL_T();
            entity.FLOW_FLOWRECORDMASTER_T = new FLOW_FLOWRECORDMASTER_T();

            try
            {
                #region Entity赋值
                List<FLOW_FLOWRECORDDETAIL_T> tmpEntity = listDetail.Where(c => (c.EDITUSERID == submitData.ApprovalUser.UserID || c.AGENTUSERID == submitData.ApprovalUser.UserID) && c.FLAG == "0").ToList();
                if (tmpEntity == null)
                {
                    dataResult.FlowResult = FlowResult.FAIL;
                    dataResult.Err = "没有找到待审核信息 FORMID=" + user.FormID + "\r\n";
                    user.TrackingMessage += "没有找到待审核信息 FORMID=" + user.FormID + "\r\n";
                   
                    return dataResult;
                }
                entity = tmpEntity[0];
                entity.EDITDATE = DateTime.Now;  //审批时间
                if (entity.AGENTUSERID == submitData.ApprovalUser.UserID)
                {
                    entity.AGENTEDITDATE = entity.EDITDATE;  //代理审批时审批时间与代理审批时间到致
                }

                entity.CONTENT = submitData.ApprovalContent;
                entity.CHECKSTATE = ((int)submitData.ApprovalResult).ToString();
                #endregion
                #region backup persisted workflow instanceState
                if (!string.IsNullOrEmpty(entity.FLOW_FLOWRECORDMASTER_T.INSTANCEID))
                {
                    String connStringPersistence = ConfigurationManager.ConnectionStrings["OracleConnection"].ConnectionString;//Data Source=172.30.50.110;Initial Catalog=WorkflowPersistence;Persist Security Info=True;User ID=sa;Password=fbaz2012;MultipleActiveResultSets=True";
                    string sql=string.Format("select * from instance_state where instance_id='{0}'", entity.FLOW_FLOWRECORDMASTER_T.INSTANCEID);
                    user.InstanceState = MsOracle.GetDataSetByConnection(connStringPersistence, sql);
                }
                #endregion
                //workflowRuntime.StartRuntime();
                user.TrackingMessage += "创建工作流运行时开始 FORMID=" + user.FormID + "\r\n";
                workflowRuntime = SMTWorkFlowManage.CreateWorkFlowRuntime(true);
                try
                {
                    instance = SMTWorkFlowManage.GetWorkflowInstance(workflowRuntime,entity.FLOW_FLOWRECORDMASTER_T.INSTANCEID);// workflowRuntime.GetWorkflow(new Guid(tmp[0].FLOW_FLOWRECORDMASTER_T.INSTANCEID));
                    user.TrackingMessage += "FormID=" + submitData.FormID + ";ApprovalFlow2(try)从持久化库[ 完成 ]恢复创建工作流实例ID=" + entity.FLOW_FLOWRECORDMASTER_T.INSTANCEID + "\r\n";
                    LogHelper.WriteLog("审核 FormID=" + user.FormID + " WorkflowInstance ID=" + instance.InstanceId.ToString());

                }
                catch (Exception exGetWorkflowInstance)
                {
                    #region 重新创建新流程,将新流程设置为当前状态。
                    try
                    {
                        user.TrackingMessage += "FormID=" + submitData.FormID + ";从持久化恢复工作流失败 SMTWorkFlowManage.GetWorkflowInstance(" + workflowRuntime.Name + ", " + entity.FLOW_FLOWRECORDMASTER_T.INSTANCEID + ");原因如下:\r\n" + exGetWorkflowInstance.ToString() + ";\r\n下面重新创建新流程,并将新流程设置为当前状态;\r\nGetFlowByModelName:submitData.ApprovalUser.DepartmentID=" + submitData.ApprovalUser.DepartmentID + ";OrgType='" + ((int)submitData.FlowType).ToString() + "'";

                        List<FLOW_MODELFLOWRELATION_T> MODELFLOWRELATION = GetFlowByModelName(con, entity.FLOW_FLOWRECORDMASTER_T.CREATECOMPANYID, entity.FLOW_FLOWRECORDMASTER_T.CREATEDEPARTMENTID, submitData.ModelCode, ((int)submitData.FlowType).ToString(), ref  user);

                        FLOW_MODELFLOWRELATION_T flowRelation = MODELFLOWRELATION[0];
                        FLOW_FLOWDEFINE_T flowDefine = flowRelation.FLOW_FLOWDEFINE_T;
                        instance = SMTWorkFlowManage.CreateWorkflowInstance(workflowRuntime , flowDefine.XOML, flowDefine.RULES);
                        user.TrackingMessage += "FormID=" + submitData.FormID + ";ApprovalFlow2(catch)完成重新创建工作流实例ID=" + instance.InstanceId + "\r\n";
                        StateMachineWorkflowInstance workflowinstance = new StateMachineWorkflowInstance(workflowRuntime, instance.InstanceId);
                        ManualWorkflowSchedulerService scheduleService = workflowRuntime.GetService(typeof(ManualWorkflowSchedulerService)) as ManualWorkflowSchedulerService;
                        scheduleService.RunWorkflow(workflowinstance.InstanceId);

                        workflowinstance.SetState(entity.STATECODE);

                        //System.Threading.Thread.Sleep(1000); //commented by alan 2012/9/7
                        instance = SMTWorkFlowManage.GetWorkflowInstance(workflowRuntime,instance.InstanceId.ToString());
                        user.TrackingMessage += "FormID=" + submitData.FormID + ";ApprovalFlow2(catch)从持久化库再恢复刚才创建工作流实例ID=" + instance.InstanceId + "\r\n";

                        entity.FLOW_FLOWRECORDMASTER_T.INSTANCEID = instance.InstanceId.ToString();
                        //FLOW_FLOWRECORDDETAIL_TDAL.UpdateMasterINSTANCEID(entity.FLOW_FLOWRECORDMASTER_T);
                        FLOW_FLOWRECORDMASTER_TDAL.UpdateMasterINSTANCEID(con, entity.FLOW_FLOWRECORDMASTER_T);

                    }
                    catch (Exception exNewInstance)
                    {
                        user.ErrorMsg += "重新创建新流程,将新流程设置为当前状态失败:FormID=" + submitData.FormID + "异常信息:\r\n" + exNewInstance.Message + "\r\n";
                        LogHelper.WriteLog("重新创建新流程,将新流程设置为当前状态失败:FormID=" + submitData.FormID + "FlowBLL->ApprovalFlow2" + exNewInstance.Message);
                        //Tracer.Debug("exNewInstance: -" + submitData.FormID + "--submitDataXML:" + submitData.XML + "-" + exNewInstance.InnerException + exNewInstance.Message);
                        throw new Exception("重新创建新流程,将新流程设置为当前状态失败,请联系管理!");
                    }
                    #endregion
                }
                user.TrackingMessage += "SMTWorkFlowManage.CreateWorkFlowRuntime(true)完成FORMID=" + user.FormID + " \r\n";


                #region 当前状态会签状态处理
                bool currentIsCountersign = false;
                string currentCountersignType = "0";

                Utility.IsCountersign(entity.FLOW_FLOWRECORDMASTER_T.ACTIVEROLE, entity.STATECODE, ref currentIsCountersign, ref currentCountersignType);
                if (currentIsCountersign)
                {
                    user.TrackingMessage += "状态会签状态处理 FORMID=" + user.FormID + "  \r\n";
                    if (currentCountersignType == "1")//一人通过即所有通过,可以跳转至下一状态
                    {
                        isGotoNextState = true;
                    }
                    else
                    {
                        ///该审核是会签的最后的审核人
                        if (entity.FLOW_FLOWRECORDMASTER_T.FLOW_FLOWRECORDDETAIL_T.Count == 1)
                        {
                            isGotoNextState = true;
                        }
                        else
                        {
                            isGotoNextState = false;
                        }
                    }
                    user.TrackingMessage += "状态会签状态处理完成 FORMID=" + user.FormID + " \r\n";
                }
                #endregion
                //不同意状态处理
                if (submitData.ApprovalResult == ApprovalResult.NoPass)
                {
                    user.TrackingMessage += "审核不通过状态处理(开始) FORMID=" + user.FormID + " \r\n";
                    #region
                    instance.Terminate("0");
                    entity.FLOW_FLOWRECORDMASTER_T.CHECKSTATE = "3"; //设为终审不通过
                    entity.FLOW_FLOWRECORDMASTER_T.EDITUSERID = submitData.ApprovalUser.UserID;
                    entity.FLOW_FLOWRECORDMASTER_T.EDITUSERNAME = submitData.ApprovalUser.UserName;
                    entity.FLOW_FLOWRECORDMASTER_T.EDITDATE = DateTime.Now;
                    user.TrackingMessage += "审核不通过【开始更新明细表】!FORMID=" + user.FormID;
                    //user.TrackingMessage += "entity.FLOWRECORDDETAILID" + entity.FLOWRECORDDETAILID + "\r\n";//
                    //user.TrackingMessage += "entity.STATECODE=" + entity.STATECODE + "\r\n";//
                    //user.TrackingMessage += "entity.PARENTSTATEID =" + entity.PARENTSTATEID + "\r\n";//
                    //user.TrackingMessage += "entity.CONTENT=" + entity.CONTENT + "\r\n";//
                    //user.TrackingMessage += "entity.CHECKSTATE=" + entity.CHECKSTATE + "\r\n";//同意:1,不同意:0 ,未处理:2,会签同意7,会签不同意8
                    //user.TrackingMessage += "entity.FLAG =" + entity.FLAG + "\r\n";//已审批:1,未审批:0
                    //user.TrackingMessage += " entity.CREATEUSERID =" + entity.CREATEUSERID + "\r\n";//
                    //user.TrackingMessage += "entity.CREATEUSERNAME="******"\r\n";//
                    //user.TrackingMessage += " entity.CREATECOMPANYID=" + entity.CREATECOMPANYID + "\r\n";//
                    //user.TrackingMessage += " entity.CREATEDEPARTMENTID =" + entity.CREATEDEPARTMENTID + "\r\n";//
                    //user.TrackingMessage += "entity.CREATEPOSTID=" + entity.CREATEPOSTID + "\r\n";//
                    //user.TrackingMessage += "entity.CREATEDATE=" + entity.CREATEDATE + "\r\n";//
                    //user.TrackingMessage += " entity.EDITUSERID=" + entity.EDITUSERID + "\r\n";//
                    //user.TrackingMessage += "entity.EDITUSERNAME="******"\r\n";//
                    //user.TrackingMessage += " entity.EDITCOMPANYID =" + entity.EDITCOMPANYID + "\r\n";//
                    //user.TrackingMessage += " entity.EDITDEPARTMENTID=" + entity.EDITDEPARTMENTID + "\r\n";//
                    //user.TrackingMessage += "entity.EDITPOSTID=" + entity.EDITPOSTID + "\r\n";//
                    //user.TrackingMessage += "entity.EDITDATE=" + entity.EDITDATE + "\r\n";//
                    //user.TrackingMessage += "entity.AGENTUSERID =" + entity.AGENTUSERID + "\r\n";//
                    //user.TrackingMessage += " entity.AGENTERNAME=" + entity.AGENTERNAME + "\r\n";//
                    //user.TrackingMessage += "entity.AGENTEDITDATE=" + entity.AGENTEDITDATE + "\r\n";//
                    //user.TrackingMessage += "submitData.NextStateCode=" + submitData.NextStateCode + "\r\n";//
                    //user.TrackingMessage += "submitData.NextApprovalUser.UserID=" + submitData.NextApprovalUser.UserID + "\r\n";//
                    //user.TrackingMessage += " entity.FLOW_FLOWRECORDMASTER_T.FLOWRECORDMASTERID=" + entity.FLOW_FLOWRECORDMASTER_T.FLOWRECORDMASTERID + "\r\n";//

                    
                    UpdateFlowRecord(con, entity, submitData.NextStateCode, submitData.NextApprovalUser.UserID);
                    user.TrackingMessage += "审核不通过【开始更新主表】!FORMID=" + user.FormID;
                    FLOW_FLOWRECORDMASTER_TDAL.Update(entity.FLOW_FLOWRECORDMASTER_T);
                    dataResult.CheckState = "3";//
                    dataResult.FlowResult = FlowResult.END;

                    if (currentIsCountersign)
                    {
                        #region 当前是会签状态,删除未审核记录
                        user.TrackingMessage += "审核不通过【当前是会签状态,删除未审核记录】!FORMID=" + user.FormID;
                        entity.FLOW_FLOWRECORDMASTER_T.FLOW_FLOWRECORDDETAIL_T
                                .Where(detail => detail.FLOWRECORDDETAILID != entity.FLOWRECORDDETAILID && detail.STATECODE == entity.STATECODE && detail.FLAG == "0")
                                .ToList().ForEach(item =>
                                {
                                    item.FLAG = "1";
                                    item.CHECKSTATE = "8";
                                    UpdateFlowRecord2(con, item);
                                });
                        #endregion
                    }

                    #endregion
                    user.TrackingMessage += "审核通过状态处理(完成) FORMID=" + user.FormID + " \r\n";

                }
                else
                {
                    if (!isGotoNextState)
                    {
                        user.TrackingMessage += "isGotoNextState开始 FORMID=" + user.FormID + " \r\n";
                        #region

                        UpdateFlowRecord2(con, entity);
                        dataResult.AppState = entity.STATECODE;
                        dataResult.FlowResult = FlowResult.SUCCESS;
                        dataResult.CheckState = "1";
                        #endregion
                        user.TrackingMessage += "isGotoNextState完成 FORMID=" + user.FormID + "\r\n";
                    }
                    else
                    {
                        user.TrackingMessage += "获取下一状态数据开始 FORMID=" + user.FormID + " \r\n";
                        #region 获取下一状态数据
                        List<string> User = new List<string>();
                        User.Add(entity.FLOW_FLOWRECORDMASTER_T.CREATEUSERID);
                        User.Add(submitData.ApprovalUser.UserID);

                        List<string> tmpPostID = new List<string>();
                        tmpPostID.Add(entity.FLOW_FLOWRECORDMASTER_T.CREATEPOSTID);
                        tmpPostID.Add(entity.EDITPOSTID);
                        GetUserByInstance2(entity.FLOW_FLOWRECORDMASTER_T.CREATECOMPANYID, workflowRuntime, instance, entity.FLOW_FLOWRECORDMASTER_T.ACTIVEROLE, submitData.XML, entity.STATECODE, User, tmpPostID, submitData.FlowType, ref dataResult, ref user);

                        if (dataResult.FlowResult == FlowResult.FAIL)
                        {
                            return dataResult;
                        }
                        submitData.NextStateCode = dataResult.AppState;
                        if (dataResult.IsCountersign)
                        {
                            #region
                            if (dataResult.FlowResult == FlowResult.Countersign)
                            {
                                if (submitData.DictCounterUser == null || submitData.DictCounterUser.Keys.Count == 0)
                                {
                                    return dataResult;
                                }
                            }
                            else
                            {
                                if (submitData.DictCounterUser == null || submitData.DictCounterUser.Keys.Count == 0)
                                {
                                    submitData.DictCounterUser = dataResult.DictCounterUser;
                                }
                            }
                            #endregion
                        }
                        else
                        {
                            #region
                            if (dataResult.FlowResult == FlowResult.MULTIUSER)
                            {
                                if (submitData.NextApprovalUser == null || (Utility.GetString(submitData.NextApprovalUser.UserID) == "" || Utility.GetString(submitData.NextApprovalUser.UserName) == ""))
                                {
                                    return dataResult;
                                }
                            }
                            else
                            {
                                if (submitData.DictCounterUser == null || submitData.DictCounterUser.Keys.Count == 0)
                                {
                                    submitData.NextApprovalUser = dataResult.UserInfo[0];
                                }
                            }
                            #endregion
                        }

                        #endregion

                        user.TrackingMessage += "获取下一状态数据完成 FORMID=" + user.FormID + "\r\n";


                        user.TrackingMessage += "单据会签情况开始 FORMID=" + user.FormID + "\r\n";
                        #region 对于单会签情况,需要将其他审核人的审核设为会签通过状态

                        if (currentIsCountersign && currentCountersignType == "1")
                        {
                            entity.FLOW_FLOWRECORDMASTER_T.FLOW_FLOWRECORDDETAIL_T
                               .Where(detail => detail.FLOWRECORDDETAILID != entity.FLOWRECORDDETAILID && detail.STATECODE == entity.STATECODE && detail.FLAG == "0")
                               .ToList().ForEach(item =>
                               {
                                   item.FLAG = "1";
                                   item.CHECKSTATE = "7";
                                   UpdateFlowRecord2(con, item);
                               });
                        }
                        #endregion
                        user.TrackingMessage += "单据会签情况完成 FORMID=" + user.FormID + "\r\n";

                        #region


                        FlowDataType.FlowData FlowData = new FlowDataType.FlowData();
                        FlowData.xml = submitData.XML;
                        workflowRuntime.WorkflowCompleted += delegate(object sender, WorkflowCompletedEventArgs e)
                        {
                            instance = null;

                        };
                        user.TrackingMessage += "处理kpi 开始 FORMID=" + user.FormID + "\r\n";

                        #region 处理kpi时间
                        string KPITime = "";
                        //PerformanceServiceWS.PerformanceServiceClient psc = new PerformanceServiceWS.PerformanceServiceClient();
                        string pscResult = entity.FLOW_FLOWRECORDMASTER_T.KPITIMEXML;
                        //psc.Close();
                        if (!string.IsNullOrEmpty(pscResult))
                        {
                            XElement xe = XElement.Parse(pscResult);
                            Func<XElement, bool> f = (x) =>
                            {
                                XAttribute xid = x.Attribute("id");
                                XAttribute xvalue = x.Attribute("value");
                                if (xid == null || xvalue == null)
                                    return false;
                                else
                                {
                                    if (xid.Value == dataResult.AppState)
                                        return true;
                                    else return false;
                                }
                            };
                            XElement FlowNode = xe.Elements("FlowNode").FirstOrDefault(f);
                            if (FlowNode != null)
                            {
                                KPITime = FlowNode.Attribute("value").Value;
                            }
                        }
                        dataResult.KPITime = KPITime;

                        #endregion

                        user.TrackingMessage += "处理kpi 完成 FORMID=" + user.FormID + "\r\n";

                        if (!dataResult.IsCountersign)
                        {
                            user.TrackingMessage += "非会签 开始 FORMID=" + user.FormID + "\r\n";
                            #region  非会签

                            UserInfo AppUser = submitData.NextApprovalUser;
                            dataResult.UserInfo.Clear();
                            dataResult.UserInfo.Add(AppUser);
                            UserInfo AgentAppUser = GetAgentUserInfo(submitData.ModelCode, AppUser.UserID);//查询是否启用了代理人                            
                            dataResult = DoFlowRecord2(con, workflowRuntime, instance, entity, submitData.NextStateCode, AppUser, AgentAppUser, submitData.SubmitFlag, submitData.FlowType,ref user); //处理流程数据
                            dataResult.AgentUserInfo = AgentAppUser;
                            dataResult.IsCountersign = false;
                            #endregion
                            user.TrackingMessage += "非会签 完成 FORMID=" + user.FormID + "\r\n";
                        }
                        else
                        {
                            #region  会签

                            dataResult.DictCounterUser = submitData.DictCounterUser;
                            Dictionary<UserInfo, UserInfo> dictAgentUserInfo = GetAgentUserInfo2(submitData.ModelCode, submitData.DictCounterUser);
                            dataResult = DoFlowRecord_Approval(con, workflowRuntime, instance, entity, submitData.NextStateCode, submitData.DictCounterUser, dictAgentUserInfo, submitData.SubmitFlag, submitData.FlowType); //处理流程数据
                            dataResult.DictAgentUserInfo = dictAgentUserInfo;
                            dataResult.IsCountersign = true;


                            #endregion
                        }

                        user.TrackingMessage += "激发流程引擎执行到一下流程 开始 FORMID=" + user.FormID + "\r\n";
                        #region 激发流程引擎执行到一下流程
                        StateMachineWorkflowInstance workflowinstance = new StateMachineWorkflowInstance(workflowRuntime, instance.InstanceId);
                        ManualWorkflowSchedulerService scheduleService = workflowRuntime.GetService(typeof(ManualWorkflowSchedulerService)) as ManualWorkflowSchedulerService;
                        if (dataResult.AppState == null || dataResult.AppState == "")
                        {
                            scheduleService.RunWorkflow(workflowinstance.InstanceId);
                            workflowRuntime.GetService<FlowEvent>().OnDoFlow(instance.InstanceId, FlowData); //激发流程引擎执行到一下流程
                            scheduleService.RunWorkflow(workflowinstance.InstanceId);

                        }
                        else
                        {
                            string ss = "";
                            int n = 0;
                            scheduleService.RunWorkflow(workflowinstance.InstanceId);

                            workflowinstance.SetState(dataResult.AppState); //流程跳转到指定节点
                            //while (true)
                            //{
                            //    ss += (n++).ToString()+"|" + workflowinstance.CurrentStateName;
                            //    string stateName = workflowinstance.CurrentStateName;

                            //    if (stateName != null && stateName.ToUpper().IndexOf("START") == -1)
                            //    {
                            //        break;
                            //    }
                            //}
                        }
                        #endregion
                        user.TrackingMessage += "激发流程引擎执行到一下流程 完成 FORMID=" + user.FormID + "\r\n";
                        //dataResult.CanSendMessage = true;

                        user.TrackingMessage += "System.Threading.Thread.Sleep(1000)\r\n";
                       //System.Threading.Thread.Sleep(1000); //Commented by Alan 2012-7-25 ,使用手动ScheduleService运行工作流,此处不需要
                        if (submitData.FlowType == FlowType.Task)
                            dataResult.SubModelCode = Utility.GetSubModelCode(entity.FLOW_FLOWRECORDMASTER_T.ACTIVEROLE, dataResult.AppState); //返回下一子模块代码
                        user.TrackingMessage += "System.Threading.Thread.Sleep(1000)完成\r\n";

                        #endregion
                    }


                }
                dataResult.CurrentIsCountersign = currentIsCountersign;
                dataResult.IsGotoNextState = isGotoNextState;
                return dataResult;
            }
            catch (Exception e)
            {
                user.ErrorMsg += "提交审核时出错!FORMID=" + user.FormID + " 异常信息:" + e.ToString()+ "\r\n";
                LogHelper.WriteLog("提交审核时出错!FORMID=" + user.FormID + " 异常信息:" + e.ToString());
                throw new Exception("提交审核时出错,请联系管理员! \r\n FormID=" + user.FormID + "");
            }
            finally
            {

                entity = null;
                instance = null;
                SMTWorkFlowManage.ColseWorkFlowRuntime(workflowRuntime);
            }
        }
示例#15
0
文件: FlowBLL.cs 项目: JuRogn/OA
        /// <summary>
        /// 新增流程(对数据库操作)
        /// </summary>
        /// <param name="ApprovalData"></param>
        /// <param name="APPDataResult"></param>
        /// <returns></returns>    
        public DataResult AddFlow2(OracleConnection con, SubmitData submitData, DataResult dataResult, ref FlowUser user)
        {
            // WorkflowRuntime workflowRuntime = null;
            WorkflowInstance instance = null;


            try
            {
                #region 获取定义的流程
                user.TrackingMessage += "获取定义的流程.GetFlowByModelName:submitData.ApprovalUser.DepartmentID=" + submitData.ApprovalUser.DepartmentID + ";OrgType='" + ((int)submitData.FlowType).ToString() + "'";
                List<FLOW_MODELFLOWRELATION_T> MODELFLOWRELATION = GetFlowByModelName(con, submitData.ApprovalUser.CompanyID, submitData.ApprovalUser.DepartmentID, submitData.ModelCode, ((int)submitData.FlowType).ToString(), ref user);//对数据库操作
                if (MODELFLOWRELATION == null || MODELFLOWRELATION.Count == 0)
                {
                    dataResult.FlowResult = FlowResult.FAIL;
                    dataResult.Err = "没有找到可使用的流程";
                    if (submitData.ApprovalUser.CompanyID == user.CompayID && submitData.ApprovalUser.DepartmentID == user.DepartmentID)
                    {
                        dataResult.Err = "没有找到公司[ " + user.CompayName + " ]下部门[ " + user.DepartmentName + " ]的匹配流程返回";
                    }
                    else
                    {
                        dataResult.Err = "没有找到公司[ " + user.CompayName + " ]的可使用匹配流程";

                    }
                    return dataResult;
                }

                #endregion
                FLOW_MODELFLOWRELATION_T flowRelation = MODELFLOWRELATION[0];//只取其中一条流程
                FLOW_FLOWDEFINE_T flowDefine = flowRelation.FLOW_FLOWDEFINE_T;
                user.FlowCode = flowDefine.FLOWCODE;//流程代码
                user.FlowName = flowDefine.DESCRIPTION;//流程名称
                if (flowDefine.RULES != null && flowDefine.RULES.Trim() == "")
                {
                    flowDefine.RULES = null;
                }
                workflowRuntime = SMTWorkFlowManage.CreateWorkFlowRuntime(true);
                instance = SMTWorkFlowManage.CreateWorkflowInstance(workflowRuntime, flowDefine.XOML, flowDefine.RULES);
                LogHelper.WriteLog("新增 FormID=" + user.FormID + " 流程名称=" + flowDefine.DESCRIPTION + "("+flowDefine.FLOWCODE+") 提交人=" + user.UserName + " 公司名称=" + user.CompayName + " 部门名称=" + user.DepartmentName + " 岗位名称=" + user.PostName + "  WorkflowInstance ID=" + instance.InstanceId.ToString());
                workflowRuntime.WorkflowCompleted += delegate(object sender, WorkflowCompletedEventArgs e)
                {
                    instance = null;

                };
                #region master赋值
                FLOW_FLOWRECORDMASTER_T master = new FLOW_FLOWRECORDMASTER_T();
                master.INSTANCEID = instance.InstanceId.ToString();
                master.BUSINESSOBJECT = submitData.XML;
                master.FORMID = submitData.FormID;
                master.MODELCODE = submitData.ModelCode;
                master.ACTIVEROLE = Utility.GetActiveRlue(flowDefine.LAYOUT);
                master.FLOWTYPE = ((int)submitData.FlowType).ToString();
                master.FLOWSELECTTYPE = ((int)submitData.FlowSelectType).ToString();
                master.FLOWCODE = flowDefine.FLOWCODE;
                #endregion

                #region 获取下一状态数据
                user.TrackingMessage += "FORMID=" + user.FormID + "获取下一状态数据(开始)";
                GetUserByFlow2(submitData.ApprovalUser.CompanyID, flowDefine.XOML, flowDefine.RULES, master.ACTIVEROLE, submitData.XML, submitData.ApprovalUser.UserID, submitData.ApprovalUser.PostID, submitData.FlowType, ref dataResult, ref user);
                LogHelper.WriteLog("FormID=" + user.FormID + " 获取下一状态数据! dataResult.FlowResult=" + dataResult.FlowResult.ToString());
                user.TrackingMessage += "FORMID=" + user.FormID + "获取下一状态数据(结束)";
                if (dataResult.FlowResult == FlowResult.FAIL)
                {
                    return dataResult;
                }
                submitData.NextStateCode = dataResult.AppState;
                if (dataResult.IsCountersign)
                {
                    #region 检查会签是角色是否有审核人员
                    #region 记录日志
                    if(submitData.DictCounterUser!=null)
                    {
                         LogHelper.WriteLog("FormID=" + user.FormID + " submitData.DictCounterUser="******"FormID=" + user.FormID + "  dataResult.DictCounterUser="******"FormID=" + user.FormID + " submitData.DictCounterUser 会签角色里没有发现有审核人员,所以返回!");
                            return dataResult;
                        }
                    }
                    else
                    {
                        if (submitData.DictCounterUser == null || submitData.DictCounterUser.Keys.Count == 0)
                        {
                            submitData.DictCounterUser = dataResult.DictCounterUser;
                        }
                    }
                    #endregion
                }
                else
                {
                    #region 检查非会签角色里是否有审核人员
                    if (dataResult.FlowResult == FlowResult.MULTIUSER)
                    {
                        LogHelper.WriteLog("FormID=" + user.FormID + " 发现有多个审核人员!");
                        if (submitData.NextApprovalUser == null || (Utility.GetString(submitData.NextApprovalUser.UserID) == "" || Utility.GetString(submitData.NextApprovalUser.UserName) == ""))
                        {
                            LogHelper.WriteLog("FormID=" + user.FormID + " 发现有多个审核人员!但下一审核人为空,所以返回选择审核人!");
                            return dataResult;
                        }
                        else
                        {
                            LogHelper.WriteLog("FormID=" + user.FormID + " 发现有多个审核人员,但发现下一审核人不为空 usrid="+(Utility.GetString(submitData.NextApprovalUser.UserID)+" 姓名="+Utility.GetString(submitData.NextApprovalUser.UserName)));
                        }
                    }
                    else
                    {
                        if (submitData.DictCounterUser == null || submitData.DictCounterUser.Keys.Count == 0)
                        {
                            submitData.NextApprovalUser = dataResult.UserInfo[0];
                        }
                    }
                    #endregion
                }

                #endregion

                #region 实体赋值 当提交人为空时,创建人变成单据所属人,如果不为空,则创建人保存为系统登录人;创建公司,部门,岗位,仍然保存单据所属人的公司,部门,岗位
                FLOW_FLOWRECORDDETAIL_T entity = new FLOW_FLOWRECORDDETAIL_T();
                entity.FLOW_FLOWRECORDMASTER_T = master;
                entity.CREATECOMPANYID = submitData.ApprovalUser.CompanyID;
                entity.CREATEDEPARTMENTID = submitData.ApprovalUser.DepartmentID ;
                entity.CREATEPOSTID = submitData.ApprovalUser.PostID;
                entity.CREATEUSERID = string.IsNullOrEmpty(submitData.SumbitUserID) ? submitData.ApprovalUser.UserID : submitData.SumbitUserID;
                entity.CREATEUSERNAME = string.IsNullOrEmpty(submitData.SumbitUserName) ? submitData.ApprovalUser.UserName : submitData.SumbitUserName;
                #endregion
                user.TrackingMessage += " 处理kpi时间\r\n";
                #region 处理kpi时间
                string KPITime = "";
                #region 加入缓存
                string pscResult = CacheProvider.GetCache<string>(flowRelation.MODELFLOWRELATIONID);
                if (string.IsNullOrEmpty(pscResult))
                {
                    PerformanceServiceWS.PerformanceServiceClient psc = new PerformanceServiceWS.PerformanceServiceClient();
                    pscResult = psc.GetKPIPointsByBusinessCode(flowRelation.MODELFLOWRELATIONID);//调用服务
                    CacheProvider.Add<string>(flowRelation.MODELFLOWRELATIONID, pscResult);
                    psc.Close();
                }
                #endregion
                //PerformanceServiceWS.PerformanceServiceClient psc = new PerformanceServiceWS.PerformanceServiceClient();
                //string pscResult = psc.GetKPIPointsByBusinessCode(flowRelation.MODELFLOWRELATIONID);//调用服务
                //psc.Close();
                if (!string.IsNullOrEmpty(pscResult))
                {
                    XElement xe = XElement.Parse(pscResult);
                    Func<XElement, bool> f = (x) =>
                    {
                        XAttribute xid = x.Attribute("id");
                        XAttribute xvalue = x.Attribute("value");
                        if (xid == null || xvalue == null)
                            return false;
                        else
                        {
                            if (xid.Value == dataResult.AppState)
                                return true;
                            else return false;
                        }
                    };
                    XElement FlowNode = xe.Elements("FlowNode").FirstOrDefault(f);
                    if (FlowNode != null)
                    {
                        KPITime = FlowNode.Attribute("value").Value;
                    }
                }

                dataResult.KPITime = KPITime;
                master.KPITIMEXML = pscResult;
                #endregion
                user.TrackingMessage += " 处理kpi时间完成\r\n";
                FlowDataType.FlowData FlowData = new FlowDataType.FlowData();
                FlowData.xml = submitData.XML;

                if (!dataResult.IsCountersign)
                {
                    #region  确定非会签的下一个审核人
                    UserInfo AppUser = new UserInfo(); //下一审核人
                    AppUser = submitData.NextApprovalUser;
                    dataResult.UserInfo.Clear();
                    dataResult.UserInfo.Add(AppUser);
                    UserInfo AgentAppUser = GetAgentUserInfo(submitData.ModelCode, AppUser.UserID);//查询是否启用了代理人                    
                    dataResult = DoFlowRecord2(con, workflowRuntime, instance, entity, submitData.NextStateCode, AppUser, AgentAppUser, submitData.SubmitFlag, submitData.FlowType,ref user); //处理流程数据
                    dataResult.IsCountersign = false;
                    dataResult.AgentUserInfo = AgentAppUser;
                    #endregion
                }
                else
                {
                    user.TrackingMessage += " 会签\r\n";
                    #region  确定会签角色里的审核人员
                    //Tracer.Debug("-----DoFlowRecord_Add:" + DateTime.Now.ToString()+"\n");
                    dataResult.DictCounterUser = submitData.DictCounterUser;
                    Dictionary<UserInfo, UserInfo> dictAgentUserInfo = GetAgentUserInfo2(submitData.ModelCode, submitData.DictCounterUser);
                    dataResult = DoFlowRecord_Add(con, workflowRuntime, instance, entity, submitData.NextStateCode, submitData.DictCounterUser, dictAgentUserInfo, submitData.SubmitFlag, submitData.FlowType); //处理流程数据
                    //Tracer.Debug("-----DoFlowRecord_AddEnd:" + DateTime.Now.ToString()+"\n");
                    dataResult.IsCountersign = true;
                    dataResult.DictAgentUserInfo = dictAgentUserInfo;
                    #endregion
                    user.TrackingMessage += "会签完成\r\n";
                }
                user.TrackingMessage += "激发流程引擎执行到一下流程\r\n";
                #region 激发流程引擎执行到一下流程
                string ss = "";
                int n = 0;
                StateMachineWorkflowInstance workflowinstance = new StateMachineWorkflowInstance(workflowRuntime, instance.InstanceId);
                ManualWorkflowSchedulerService scheduleService = workflowRuntime.GetService(typeof(ManualWorkflowSchedulerService)) as ManualWorkflowSchedulerService;
               if (dataResult.AppState == null || dataResult.AppState == "")
                {
                    user.TrackingMessage += " workflowRuntime.GetService<FlowEvent>()\r\n";
                    scheduleService.RunWorkflow(workflowinstance.InstanceId);
                    workflowRuntime.GetService<FlowEvent>().OnDoFlow(instance.InstanceId, FlowData); //激发流程引擎执行到一下流程
                    scheduleService.RunWorkflow(workflowinstance.InstanceId);
                    user.TrackingMessage += " workflowRuntime.GetService<FlowEvent>()完成\r\n";
                }
                else
                {
                    scheduleService.RunWorkflow(workflowinstance.InstanceId);
                    workflowinstance.SetState(dataResult.AppState); //流程跳转到指定节点
                }

                #endregion
                user.TrackingMessage += "激发流程引擎执行到一下流程完成\r\n";
                user.TrackingMessage += "System.Threading.Thread.Sleep(1000)\r\n";
                //System.Threading.Thread.Sleep(1000);//当前用到
                dataResult.ModelFlowRelationID = flowRelation.MODELFLOWRELATIONID; //返回关联ID
                dataResult.KPITime = KPITime;
                //dataResult.CanSendMessage = true;
                if (submitData.FlowType == FlowType.Task)
                {
                    dataResult.SubModelCode = Utility.GetSubModelCode(master.ACTIVEROLE, dataResult.AppState); //返回下一子模块代码
                }
                user.TrackingMessage += "System.Threading.Thread.Sleep(1000)完成\r\n";
                return dataResult;
            }

            catch (Exception e)
            {
                user.ErrorMsg += "新增流程出错 FormID=" + user.FormID + " CompayName=" + user.CompayName + "FlowName=" + user.FlowName + "异常信息:\r\n" + e.ToString() + "\r\n";
                LogHelper.WriteLog("FormID=" + user.FormID + " CompayName=" + user.CompayName + "FlowName=" + user.FlowName + " 新增流程出错,异常信息:\r\n" + e.ToString());
                throw new Exception("FormID=" + user.FormID+" 时间:"+DateTime.Now.ToString()+" 新增流程出错,请联系管理员! ");
            }
            finally
            {
                instance = null;
                SMTWorkFlowManage.ColseWorkFlowRuntime(workflowRuntime);
            }


        }