예제 #1
0
        /// <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;
            }));
        }
예제 #2
0
        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);
        }
예제 #3
0
        public void ServerToClient(WfConditionDescriptor server, ref WfClientConditionDescriptor client)
        {
            server.NullCheck("server");

            if (client == null)
            {
                client = new WfClientConditionDescriptor();
            }

            client.Expression = server.Expression;
        }
예제 #4
0
        public void ClientToServer(WfClientConditionDescriptor client, ref WfConditionDescriptor server)
        {
            client.NullCheck("client");

            if (server == null)
            {
                server = new WfConditionDescriptor(null);
            }

            server.Expression = client.Expression;
        }
예제 #5
0
        /// <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)));
        }
예제 #6
0
        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);
        }
예제 #7
0
        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);
        }
예제 #9
0
        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;
            }));
        }
예제 #10
0
        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);
        }
예제 #11
0
 public static void AreSame(this WfClientConditionDescriptor c, WfConditionDescriptor s)
 {
     Assert.IsNotNull(c);
     Assert.IsNotNull(s);
     Assert.AreEqual(c.Expression, s.Expression);
 }