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); }
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)); }
public object GetValue(SysExpression expr) { KeyValuePair <SysExpression, object> pair = this._dict[expr.ExpressionId]; return(pair.Value); }
public bool ContainsKey(SysExpression expr) { return(this._dict.ContainsKey(expr.ExpressionId)); }
public void Add(SysExpression expr, object value) { this._dict.Add(expr.ExpressionId, new KeyValuePair <SysExpression, object>(expr, value)); }
public abstract object GetValue(SysExpression expr, EntityCache cache, ExpressionCache expr_cache, SysProcessInstance pi, SysActivityInstance ai);
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); }