/// <summary> /// 按照条件列进行数据行的筛选,返回筛选后的行集合 /// </summary> /// <returns></returns> public SOARolePropertyRowCollection FilterByConditionColumn() { WfConditionDescriptor condition = null; SOARoleContext context = SOARoleContext.Current; if (context != null) { if (context.Process != null) { condition = new WfConditionDescriptor(context.Process.Descriptor); } else { condition = new WfConditionDescriptor(null); } } return(this.Query(row => { bool matched = true; if (condition != null) { condition.Expression = row.Values.GetValue(SOARolePropertyDefinition.ConditionColumn, row.GetPropertyDefinitions().GetColumnDefaultValue(SOARolePropertyDefinition.ConditionColumn, string.Empty)); matched = row.EvaluateCondition(condition); } return matched; })); }
public bool EvaluateCondition(WfConditionDescriptor condition) { bool result = condition.IsEmpty; try { ObjectContextCache.Instance["RoleMatrixCurrentRow"] = this; try { result = condition.Evaluate(EvaluateRoleMatrixCondition); } catch (System.Exception ex) { ExceptionHelper.FalseThrow <WfDynamicResourceEvaluationException>(false, Translator.Translate(WfHelper.CultureCategory, "角色矩阵表达式解析错误:({0})\n{1}", condition, ex.Message)); } finally { ObjectContextCache.Instance.Remove("RoleMatrixCurrentRow"); } } catch (WfDynamicResourceEvaluationException ex) { ex.WriteToLog(); } return(result); }
public void ServerToClient(WfConditionDescriptor server, ref WfClientConditionDescriptor client) { server.NullCheck("server"); if (client == null) { client = new WfClientConditionDescriptor(); } client.Expression = server.Expression; }
public void ClientToServer(WfClientConditionDescriptor client, ref WfConditionDescriptor server) { client.NullCheck("client"); if (server == null) { server = new WfConditionDescriptor(null); } server.Expression = client.Expression; }
/// <summary> /// 不带条件地筛选 /// </summary> /// <param name="queryParams"></param> /// <param name="matchAny"></param> /// <returns></returns> public SOARolePropertyRowCollection QueryWithoutCondition(IEnumerable <SOARolePropertiesQueryParam> queryParams, bool matchAny = false) { WfConditionDescriptor condition = null; SOARoleContext context = SOARoleContext.Current; if (context != null) { if (context.Process != null) { condition = new WfConditionDescriptor(context.Process.Descriptor); } else { condition = new WfConditionDescriptor(null); } } return(this.Query(row => row.Values.MatchQueryValues(queryParams, matchAny))); }
public override void ClientToServer(WfClientBranchProcessTemplateDescriptor client, ref WfBranchProcessTemplateDescriptor server) { client.NullCheck("client"); if (server == null) { server = new WfBranchProcessTemplateDescriptor(client.Key); } base.ClientToServer(client, ref server); WfConditionDescriptor serverCondition = server.Condition; WfClientConditionDescriptorConverter.Instance.ClientToServer(client.Condition, ref serverCondition); server.Condition = serverCondition; WfClientResourceDescriptorCollectionConverter.Instance.ClientToServer(client.Resources, server.Resources); WfClientResourceDescriptorCollectionConverter.Instance.ClientToServer(client.CancelSubProcessNotifier, server.CancelSubProcessNotifier); WfClientRelativeLinkDescriptorCollectionConverter.Instance.ClientToServer(client.RelativeLinks, server.RelativeLinks); }
public override void ClientToServer(WfClientTransitionDescriptor client, ref WfTransitionDescriptor server) { client.NullCheck("client"); if (server == null) { server = new WfForwardTransitionDescriptor(client.Key); } base.ClientToServer(client, ref server); server.ToActivityKey = client.ToActivityKey; server.FromActivityKey = client.FromActivityKey; WfConditionDescriptor serverCondition = server.Condition; WfClientConditionDescriptorConverter.Instance.ClientToServer(client.Condition, ref serverCondition); server.Condition = serverCondition; WfClientVariableDescriptorCollectionConverter.Instance.ClientToServer(client.Variables, server.Variables); }
public override void ClientToServer(WfClientActivityDescriptor client, ref WfActivityDescriptor server) { client.NullCheck("client"); if (server == null) { server = new WfActivityDescriptor(client.Key, client.ActivityType.ToActivityType()); } base.ClientToServer(client, ref server); WfConditionDescriptor serverCondition = server.Condition; WfClientConditionDescriptorConverter.Instance.ClientToServer(client.Condition, ref serverCondition); server.Condition = serverCondition; WfClientResourceDescriptorCollectionConverter.Instance.ClientToServer(client.Resources, server.Resources); WfClientResourceDescriptorCollectionConverter.Instance.ClientToServer(client.EnterEventReceivers, server.EnterEventReceivers); WfClientResourceDescriptorCollectionConverter.Instance.ClientToServer(client.LeaveEventReceivers, server.LeaveEventReceivers); WfClientVariableDescriptorCollectionConverter.Instance.ClientToServer(client.Variables, server.Variables); WfClientBranchProcessTemplateDescriptorCollectionConverter.Instance.ClientToServer(client.BranchProcessTemplates, server.BranchProcessTemplates); WfClientRelativeLinkDescriptorCollectionConverter.Instance.ClientToServer(client.RelativeLinks, server.RelativeLinks); }
public SOARolePropertyRowCollection Query(IEnumerable <SOARolePropertiesQueryParam> queryParams, bool matchAny = false) { WfConditionDescriptor condition = null; SOARoleContext context = SOARoleContext.Current; if (context != null) { if (context.Process != null) { condition = new WfConditionDescriptor(context.Process.Descriptor); } else { condition = new WfConditionDescriptor(null); } } return(this.Query(row => { bool matched = row.Values.MatchQueryValues(queryParams, matchAny); if (matched) { if (condition != null) { condition.Expression = row.Values.GetValue(SOARolePropertyDefinition.ConditionColumn, row.GetPropertyDefinitions().GetColumnDefaultValue(SOARolePropertyDefinition.ConditionColumn, string.Empty)); matched = row.EvaluateCondition(condition); } } return matched; })); }
public void WfConditionOfProcessDescriptorConverterTest() { WfConverterHelper.RegisterConverters(); WfProcessDescriptor processDesp = (WfProcessDescriptor)WfProcessTestCommon.CreateSimpleProcessDescriptor(); WfConditionDescriptor conditionDesp = new WfConditionDescriptor() { Expression = "A>5" }; ((WfForwardTransitionDescriptor)processDesp.InitialActivity.ToTransitions[0]).Condition = conditionDesp; string result = JSONSerializerExecute.Serialize(processDesp); Console.WriteLine(result); WfProcessDescriptor reProcessDesp = JSONSerializerExecute.Deserialize <WfProcessDescriptor>(result); Assert.AreEqual(conditionDesp.Expression, ((WfForwardTransitionDescriptor)reProcessDesp.InitialActivity.ToTransitions[0]).Condition.Expression); string reSerialized = JSONSerializerExecute.Serialize(reProcessDesp); Assert.AreEqual(result, reSerialized); }
public static void AreSame(this WfClientConditionDescriptor c, WfConditionDescriptor s) { Assert.IsNotNull(c); Assert.IsNotNull(s); Assert.AreEqual(c.Expression, s.Expression); }