public void OnDoFlow(Guid guid, FlowDataType.FlowData Arg) { SMTFlowArg e = new SMTFlowArg(guid, Arg); e.WaitForIdle = true; DoFlow(null, e); }
/// <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; } }
public SMTFlowArg(Guid instanceId, FlowDataType.FlowData flowdata) : base(instanceId) { FlowData = flowdata; }
/// <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; } }
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(); }
/// <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); } }
/// <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); } }
//下一审核人提交审核时调用方法 /// <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); } }
/// <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); } }
/// <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); } }
//下一审核人提交审核时调用方法 /// <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); } }
/// <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); } }