예제 #1
0
        public override object GetValue(SysExpression expr, EntityCache cache, ExpressionCache expr_cache, SysProcessInstance pi, SysActivityInstance ai)
        {
            SysEntity processEntity = pi.Process.ProcessEntity;
            int       objectId      = pi.ObjectId;
            object    obj2          = cache.GetObject(processEntity, objectId)[expr.Field.FieldName];

            expr_cache.Add(expr, obj2);
            return(obj2);
        }
 public static bool IsBinaryExpression(this SysExpression expr)
 {
     if (!expr.ExpressionType.HasValue)
     {
         throw new ApplicationException("未设置表达式类型");
     }
     if (expr.ExpressionType.Value == 6)
     {
         throw new ApplicationException("不支持ProcessVariable");
     }
     return(expr.ExpressionType == 5);
 }
 private void LoadExpression(SysExpression e, SysProcess p)
 {
     e.Process  = p;
     e.Activity = p.Activities.FirstOrDefault <SysActivity>(i => i.ActivityId == e.ActivityId);
     if (e.FieldId.HasValue)
     {
         e.Field = this.GetFieldCache(e.FieldId.Value);
     }
     if (e.RelationId.HasValue)
     {
         e.Relation = this.GetRelationCache(e.RelationId.Value);
     }
 }
        public override object GetValue(SysExpression expr, EntityCache cache, ExpressionCache expr_cache, SysProcessInstance pi, SysActivityInstance ai)
        {
            SysProcess process        = pi.Process;
            SysEntity  activityEntity = process.ActivityEntity;

            if (activityEntity == null)
            {
                throw new ApplicationException("活动实体为空");
            }
            SysOneMoreRelation relation = expr.Relation;

            if (relation == null)
            {
                throw new ApplicationException("表达式的关系为空");
            }
            if (!relation.ChildEntityId.HasValue)
            {
                throw new ApplicationException("表达式的子实体为空");
            }
            if (!process.ActivityEntityId.HasValue)
            {
                throw new ApplicationException("活动的实体为空");
            }
            if (expr.Relation.ChildEntityId.Value != process.ActivityEntityId.Value)
            {
                throw new ApplicationException("不正确的关系");
            }
            if (!relation.ParentEntityId.HasValue)
            {
                throw new ApplicationException("关系的父实体为空");
            }
            if (!relation.ChildFieldId.HasValue)
            {
                throw new ApplicationException("关系的ChildFieldId为空");
            }
            long local1 = relation.ChildFieldId.Value;

            if (relation.ChildField == null)
            {
                throw new ApplicationException("关系的对应字段为空");
            }
            int        activityInstanceId = ai.ActivityInstanceId;
            EntityData data         = cache.GetObject(activityEntity, activityInstanceId);
            SysEntity  parentEntity = relation.ParentEntity;
            int        num2         = Convert.ToInt32(data[relation.ChildField.FieldName]);
            object     obj2         = cache.GetObject(parentEntity, num2)[expr.Field.FieldName];

            expr_cache.Add(expr, obj2);
            return(obj2);
        }
예제 #5
0
        public override object GetValue(SysExpression expr, EntityCache cache, ExpressionCache expr_cache, SysProcessInstance pi, SysActivityInstance ai)
        {
            if (!expr.DataType.HasValue)
            {
                throw new ApplicationException("未指定常量的数据类型");
            }
            if (string.IsNullOrWhiteSpace(expr.ConstValue))
            {
                throw new ApplicationException("未指定常量的值");
            }
            object obj2 = DataTypeHelper.GetHelper((DataTypeEnum)expr.DataType.Value).ConvertFromString(expr.ConstValue);

            expr_cache.Add(expr, obj2);
            return(obj2);
        }
        private void CalDecisionValue()
        {
            SysActivity activity = this.AI.Activity;

            if ((activity.Expressions == null) || (activity.Expressions.Count == 0))
            {
                throw new ApplicationException("活动没有表达式");
            }
            if (!activity.ExpressionId.HasValue)
            {
                throw new ApplicationException("未指定活动的表达式");
            }
            SysExpression expr = activity.Expressions.FirstOrDefault <SysExpression>(e => e.ExpressionId == activity.ExpressionId.Value);

            if (expr == null)
            {
                throw new ApplicationException("指定的表达式不在活动的表达式中");
            }
            Queue <SysExpression> calOrder = ExpressionHelper.GetCalOrder(activity.Expressions.ToList <SysExpression>());

            if (calOrder.Count <SysExpression>(p => (p.ExpressionId == expr.ExpressionId)) <= 0)
            {
                throw new ApplicationException("无法计算表达式的值");
            }
            EntityCache     cache  = new EntityCache(base.Manager);
            ExpressionCache cache2 = new ExpressionCache();

            while (calOrder.Count > 0)
            {
                SysExpression expression = calOrder.Dequeue();
                object        obj2       = ExpressionHelper.GetHelper(expression).GetValue(expression, cache, cache2, base.PI, this.AI);
                if (expression.ExpressionId == expr.ExpressionId)
                {
                    if (obj2 == null)
                    {
                        throw new ApplicationException("决策活动的值返回null");
                    }
                    if (obj2.GetType() != typeof(bool))
                    {
                        throw new ApplicationException("决策活动的值不是布尔类型");
                    }
                    this.AI.ExpressionValue = new int?(Convert.ToInt32(obj2));
                    return;
                }
            }
        }
        private bool CalExpressionValue(SysTransition tran)
        {
            SysExpression expr;
            bool          flag = true;

            if ((tran.Expressions != null) && (tran.Expressions.Count != 0))
            {
                if (!tran.ExpressionId.HasValue)
                {
                    return(flag);
                }
                expr = tran.Expressions.FirstOrDefault <SysExpression>(e => e.ExpressionId == tran.ExpressionId.Value);
                if (expr == null)
                {
                    throw new ApplicationException("指定的入口表达式不在连接线的表达式中");
                }
                Queue <SysExpression> calOrder = ExpressionHelper.GetCalOrder(tran.Expressions.ToList <SysExpression>());
                if (calOrder.Count <SysExpression>(p => (p.ExpressionId == expr.ExpressionId)) <= 0)
                {
                    throw new ApplicationException("无法计算表达式的值");
                }
                EntityCache     cache  = new EntityCache(base.Manager);
                ExpressionCache cache2 = new ExpressionCache();
                while (calOrder.Count > 0)
                {
                    SysExpression expression = calOrder.Dequeue();
                    object        obj2       = ExpressionHelper.GetHelper(expression).GetValue(expression, cache, cache2, base.PI, this.AI);
                    if (expression.ExpressionId == expr.ExpressionId)
                    {
                        if (obj2 == null)
                        {
                            throw new ApplicationException("表达式的值返回null");
                        }
                        if (obj2.GetType() != typeof(bool))
                        {
                            throw new ApplicationException("入口条件表达式的值不是布尔类型");
                        }
                        return((bool)obj2);
                    }
                }
            }
            return(flag);
        }
        public override object GetValue(SysExpression expr, EntityCache cache, ExpressionCache expr_cache, SysProcessInstance pi, SysActivityInstance ai)
        {
            if (!expr.OperationType.HasValue)
            {
                throw new ApplicationException("操作类型为空");
            }
            if (!expr.LeftId.HasValue)
            {
                throw new ApplicationException("左变量为空");
            }
            if (!expr.RightId.HasValue)
            {
                throw new ApplicationException("右变量为空");
            }
            object             obj2  = expr_cache.GetValue(expr.LeftId.Value);
            object             obj3  = expr_cache.GetValue(expr.RightId.Value);
            ConstantExpression left  = Expression.Constant(obj2);
            ConstantExpression right = Expression.Constant(obj3);
            object             obj4  = Expression.Lambda(Expression.MakeBinary((ExpressionType)expr.OperationType.Value, left, right), new ParameterExpression[0]).Compile().DynamicInvoke(new object[0]);

            expr_cache.Add(expr, obj4);
            return(obj4);
        }
 public static bool IsProcessField(this SysExpression expr)
 {
     return(expr.ExpressionType.HasValue && (expr.ExpressionType.Value == 1));
 }
 public static bool IsConst(this SysExpression expr)
 {
     return(expr.ExpressionType.HasValue && (expr.ExpressionType.Value == 0));
 }
예제 #11
0
        public object GetValue(SysExpression expr)
        {
            KeyValuePair <SysExpression, object> pair = this._dict[expr.ExpressionId];

            return(pair.Value);
        }
예제 #12
0
 public bool ContainsKey(SysExpression expr)
 {
     return(this._dict.ContainsKey(expr.ExpressionId));
 }
예제 #13
0
 public void Add(SysExpression expr, object value)
 {
     this._dict.Add(expr.ExpressionId, new KeyValuePair <SysExpression, object>(expr, value));
 }
예제 #14
0
 public abstract object GetValue(SysExpression expr, EntityCache cache, ExpressionCache expr_cache, SysProcessInstance pi, SysActivityInstance ai);
예제 #15
0
        internal SysProcess LoadProcess(long processId)
        {
            SysProcess process = this._context.FindById <SysProcess>(new object[] { processId });

            if (process == null)
            {
                throw new ApplicationException("流程ID不正确");
            }
            if (process.EntityId.HasValue)
            {
                process.ProcessEntity = this._cacheFactory.GetEntityCache(process.EntityId.Value);
            }
            if (process.ActivityEntityId.HasValue)
            {
                process.ActivityEntity = this._cacheFactory.GetEntityCache(process.ActivityEntityId.Value);
            }
            if (process.FormId.HasValue)
            {
                process.Form = this._context.FindById <SysForm>(new object[] { process.FormId });
            }
            string condition = string.Format("processId = {0}", processId);
            List <SysProcessProxy>             list    = this._context.Where <SysProcessProxy>(condition, new DbParameter[0]);
            List <SysProcessParticipant>       list2   = this._context.Where <SysProcessParticipant>(condition, new DbParameter[0]);
            List <SysExpression>               list3   = this._context.Where <SysExpression>(condition, new DbParameter[0]);
            List <SysTransition>               list4   = this._context.Where <SysTransition>(condition, new DbParameter[0]);
            List <SysProcessRemind>            list5   = this._context.Where <SysProcessRemind>(condition, new DbParameter[0]);
            List <SysProcessRemindParticipant> source  = this._context.Where <SysProcessRemindParticipant>(condition, new DbParameter[0]);
            List <SysActivity>                  list7  = this._context.Where <SysActivity>(condition, new DbParameter[0]);
            List <SysActivityParticipant>       list8  = this._context.Where <SysActivityParticipant>(condition, new DbParameter[0]);
            List <SysActivityOperation>         list9  = this._context.Where <SysActivityOperation>(condition, new DbParameter[0]);
            List <SysActivityStep>              list10 = this._context.Where <SysActivityStep>(condition, new DbParameter[0]);
            List <SysActivityRemind>            list11 = this._context.Where <SysActivityRemind>(condition, new DbParameter[0]);
            List <SysActivityRemindParticipant> list12 = this._context.Where <SysActivityRemindParticipant>(condition, new DbParameter[0]);
            List <SysActivityApproveGroup>      list13 = this._context.Where <SysActivityApproveGroup>(condition, new DbParameter[0]);

            process.Activities          = list7;
            process.ProcessProxies      = list;
            process.ProcessParticipants = list2;
            process.ProcessReminds      = list5;
            process.Expressions         = list3;
            process.Transitions         = list4;
            using (IEnumerator <SysActivity> enumerator = process.Activities.GetEnumerator())
            {
                while (enumerator.MoveNext())
                {
                    Func <SysExpression, bool>          predicate = null;
                    Func <SysActivityParticipant, bool> func8     = null;
                    Func <SysActivityRemind, bool>      func9     = null;
                    Func <SysActivityOperation, bool>   func10    = null;
                    Func <SysExpression, bool>          func11    = null;
                    Func <SysTransition, bool>          func12    = null;
                    Func <SysTransition, bool>          func13    = null;
                    SysActivity a = enumerator.Current;
                    a.Process = process;
                    if (predicate == null)
                    {
                        predicate = i => i.ExpressionId == a.ExpressionId;
                    }
                    a.Expression = process.Expressions.FirstOrDefault <SysExpression>(predicate);
                    if (func8 == null)
                    {
                        func8 = delegate(SysActivityParticipant i) {
                            long?activityId = i.ActivityId;
                            long num        = a.ActivityId;
                            return((activityId.GetValueOrDefault() == num) && activityId.HasValue);
                        };
                    }
                    a.ActivityParticipants = list8.Where <SysActivityParticipant>(func8).ToList <SysActivityParticipant>();
                    if (func9 == null)
                    {
                        func9 = delegate(SysActivityRemind i) {
                            long?activityId = i.ActivityId;
                            long num        = a.ActivityId;
                            return((activityId.GetValueOrDefault() == num) && activityId.HasValue);
                        };
                    }
                    a.ActivityReminds = list11.Where <SysActivityRemind>(func9).ToList <SysActivityRemind>();
                    if (func10 == null)
                    {
                        func10 = delegate(SysActivityOperation i) {
                            long?activityId = i.ActivityId;
                            long num        = a.ActivityId;
                            return((activityId.GetValueOrDefault() == num) && activityId.HasValue);
                        };
                    }
                    a.ActivityOperations = list9.Where <SysActivityOperation>(func10).ToList <SysActivityOperation>();
                    if (func11 == null)
                    {
                        func11 = delegate(SysExpression i) {
                            long?activityId = i.ActivityId;
                            long num        = a.ActivityId;
                            return((activityId.GetValueOrDefault() == num) && activityId.HasValue);
                        };
                    }
                    a.Expressions = process.Expressions.Where <SysExpression>(func11).ToList <SysExpression>();
                    if (func12 == null)
                    {
                        func12 = delegate(SysTransition i) {
                            long?preActivityId = i.PreActivityId;
                            long activityId    = a.ActivityId;
                            return((preActivityId.GetValueOrDefault() == activityId) && preActivityId.HasValue);
                        };
                    }
                    a.FromTransitions = process.Transitions.Where <SysTransition>(func12).ToList <SysTransition>();
                    if (func13 == null)
                    {
                        func13 = delegate(SysTransition i) {
                            long?postActivityId = i.PostActivityId;
                            long activityId     = a.ActivityId;
                            return((postActivityId.GetValueOrDefault() == activityId) && postActivityId.HasValue);
                        };
                    }
                    a.ToTransitions = process.Transitions.Where <SysTransition>(func13).ToList <SysTransition>();
                    using (IEnumerator <SysActivityParticipant> enumerator2 = a.ActivityParticipants.GetEnumerator())
                    {
                        while (enumerator2.MoveNext())
                        {
                            Func <SysActivityApproveGroup, bool> func  = null;
                            Func <SysActivityParticipant, bool>  func2 = null;
                            Func <SysProcessParticipant, bool>   func3 = null;
                            SysActivityParticipant ap = enumerator2.Current;
                            ap.Activity = a;
                            if (func == null)
                            {
                                func = i => i.ActivityApproveGroupId == ap.ActivityApproveGroupId;
                            }
                            ap.ActivityApproveGroup = list13.FirstOrDefault <SysActivityApproveGroup>(func);
                            if (ap.ActivityApproveGroup != null)
                            {
                                ap.ActivityApproveGroup.Activity = a;
                                if (func2 == null)
                                {
                                    func2 = i => i.ActivityApproveGroupId == ap.ActivityApproveGroupId;
                                }
                                ap.ActivityApproveGroup.ActivityParticipants = list8.Where <SysActivityParticipant>(func2).ToList <SysActivityParticipant>();
                            }
                            if (func3 == null)
                            {
                                func3 = i => i.ParticipantId == ap.ParticipantId;
                            }
                            ap.ProcessParticipant = process.ProcessParticipants.FirstOrDefault <SysProcessParticipant>(func3);
                        }
                    }
                    using (IEnumerator <SysActivityRemind> enumerator3 = a.ActivityReminds.GetEnumerator())
                    {
                        while (enumerator3.MoveNext())
                        {
                            Func <SysActivityRemindParticipant, bool> func5 = null;
                            SysActivityRemind ar = enumerator3.Current;
                            ar.Activity = a;
                            if (func5 == null)
                            {
                                func5 = delegate(SysActivityRemindParticipant i) {
                                    long?remindId = i.RemindId;
                                    long num      = ar.RemindId;
                                    return((remindId.GetValueOrDefault() == num) && remindId.HasValue);
                                };
                            }
                            ar.RemindParticipants = list12.Where <SysActivityRemindParticipant>(func5).ToList <SysActivityRemindParticipant>();
                            using (IEnumerator <SysActivityRemindParticipant> enumerator4 = ar.RemindParticipants.GetEnumerator())
                            {
                                while (enumerator4.MoveNext())
                                {
                                    Func <SysProcessParticipant, bool> func4 = null;
                                    SysActivityRemindParticipant       arp   = enumerator4.Current;
                                    arp.Remind = ar;
                                    if (func4 == null)
                                    {
                                        func4 = i => i.ParticipantId == arp.ParticipantId;
                                    }
                                    arp.Participant    = process.ProcessParticipants.FirstOrDefault <SysProcessParticipant>(func4);
                                    arp.RemindTemplate = this._context.FindById <SysProcessRemindTemplate>(new object[] { arp.TemplateId });
                                }
                                continue;
                            }
                        }
                    }
                    using (IEnumerator <SysActivityOperation> enumerator5 = a.ActivityOperations.GetEnumerator())
                    {
                        while (enumerator5.MoveNext())
                        {
                            Func <SysActivityStep, bool> func6 = null;
                            SysActivityOperation         ao    = enumerator5.Current;
                            ao.Activity = a;
                            if (func6 == null)
                            {
                                func6 = delegate(SysActivityStep i) {
                                    long?operationId = i.OperationId;
                                    long num         = ao.OperationId;
                                    return((operationId.GetValueOrDefault() == num) && operationId.HasValue);
                                };
                            }
                            ao.ActivitySteps = list10.Where <SysActivityStep>(func6).ToList <SysActivityStep>();
                            foreach (SysActivityStep step in ao.ActivitySteps)
                            {
                                step.ActivityOperation = ao;
                            }
                        }
                        continue;
                    }
                }
            }
            foreach (SysProcessProxy proxy in process.ProcessProxies)
            {
                proxy.Process = process;
            }
            using (IEnumerator <SysProcessParticipant> enumerator8 = process.ProcessParticipants.GetEnumerator())
            {
                while (enumerator8.MoveNext())
                {
                    Func <SysProcessParticipant, bool>  func14 = null;
                    Func <SysActivityParticipant, bool> func15 = null;
                    SysProcessParticipant pp = enumerator8.Current;
                    pp.Process = process;
                    if (func14 == null)
                    {
                        func14 = i => i.ParticipantId == pp.Param_ParticipantId;
                    }
                    pp.Param_Participant = process.ProcessParticipants.FirstOrDefault <SysProcessParticipant>(func14);
                    if (func15 == null)
                    {
                        func15 = delegate(SysActivityParticipant i) {
                            long?participantId = i.ParticipantId;
                            long num           = pp.ParticipantId;
                            return((participantId.GetValueOrDefault() == num) && participantId.HasValue);
                        };
                    }
                    pp.ActivityParticipants = list8.Where <SysActivityParticipant>(func15).ToList <SysActivityParticipant>();
                }
            }
            using (IEnumerator <SysProcessRemind> enumerator9 = process.ProcessReminds.GetEnumerator())
            {
                while (enumerator9.MoveNext())
                {
                    Func <SysProcessRemindParticipant, bool> func17 = null;
                    SysProcessRemind pr = enumerator9.Current;
                    pr.Process = process;
                    if (func17 == null)
                    {
                        func17 = delegate(SysProcessRemindParticipant i) {
                            long?remindId = i.RemindId;
                            long num      = pr.RemindId;
                            return((remindId.GetValueOrDefault() == num) && remindId.HasValue);
                        };
                    }
                    pr.RemindParticipants = source.Where <SysProcessRemindParticipant>(func17).ToList <SysProcessRemindParticipant>();
                    using (IEnumerator <SysProcessRemindParticipant> enumerator10 = pr.RemindParticipants.GetEnumerator())
                    {
                        while (enumerator10.MoveNext())
                        {
                            Func <SysProcessParticipant, bool> func16 = null;
                            SysProcessRemindParticipant        rp     = enumerator10.Current;
                            rp.Remind = pr;
                            if (func16 == null)
                            {
                                func16 = i => i.ParticipantId == rp.ParticipantId;
                            }
                            rp.Participant    = process.ProcessParticipants.FirstOrDefault <SysProcessParticipant>(func16);
                            rp.RemindTemplate = this._context.FindById <SysProcessRemindTemplate>(new object[] { rp.TemplateId });
                        }
                        continue;
                    }
                }
            }
            using (IEnumerator <SysExpression> enumerator11 = process.Expressions.GetEnumerator())
            {
                while (enumerator11.MoveNext())
                {
                    Func <SysActivity, bool> func18 = null;
                    SysExpression            e      = enumerator11.Current;
                    e.Process = process;
                    if (func18 == null)
                    {
                        func18 = i => i.ActivityId == e.ActivityId;
                    }
                    e.Activity = process.Activities.FirstOrDefault <SysActivity>(func18);
                    if (e.FieldId.HasValue)
                    {
                        e.Field = this._cacheFactory.GetFieldCache(e.FieldId.Value);
                    }
                    if (e.RelationId.HasValue)
                    {
                        e.Relation = this._cacheFactory.GetRelationCache(e.RelationId.Value);
                    }
                }
            }
            using (IEnumerator <SysTransition> enumerator12 = process.Transitions.GetEnumerator())
            {
                while (enumerator12.MoveNext())
                {
                    Func <SysActivity, bool>   func19 = null;
                    Func <SysActivity, bool>   func20 = null;
                    Func <SysExpression, bool> func21 = null;
                    Func <SysExpression, bool> func22 = null;
                    SysTransition t = enumerator12.Current;
                    t.Process = process;
                    if (func19 == null)
                    {
                        func19 = i => i.ActivityId == t.PreActivityId;
                    }
                    t.PreActivity = process.Activities.FirstOrDefault <SysActivity>(func19);
                    if (func20 == null)
                    {
                        func20 = i => i.ActivityId == t.PostActivityId;
                    }
                    t.PostActivity = process.Activities.FirstOrDefault <SysActivity>(func20);
                    if (func21 == null)
                    {
                        func21 = i => i.ExpressionId == t.ExpressionId;
                    }
                    t.Expression = process.Expressions.FirstOrDefault <SysExpression>(func21);
                    if (func22 == null)
                    {
                        func22 = delegate(SysExpression i) {
                            long?transitionId = i.TransitionId;
                            long num          = t.TransitionId;
                            return((transitionId.GetValueOrDefault() == num) && transitionId.HasValue);
                        };
                    }
                    t.Expressions = process.Expressions.Where <SysExpression>(func22).ToList <SysExpression>();
                }
            }
            return(process);
        }