public static ClientDataSet.RuleParametersRow GetRuleParameterRow(Guid ruleParameterId, Guid organizationId) { using (RuleParametersTableAdapter adapter = new RuleParametersTableAdapter(OrganizationProvider.GetConnectionString(organizationId))) { ClientDataSet.RuleParametersDataTable table = adapter.GetRuleParameter(ruleParameterId); return((table.Count > 0) ? table[0] : null); } }
public static void UpdateRuleParameter(Guid organizationId, Guid ruleParameterId, Guid ruleId, Guid entityNodeTypeId, bool isInputParameter, bool isEntity, string fieldName, string fullName , string typeName, string term, object value) { if (organizationId.Equals(Guid.Empty) || ruleParameterId.Equals(Guid.Empty) || value == null) { throw new ArgumentNullException("ruleParameterId", Properties.Resources.ExceptionMessage_ArgumentsIsEmpty); } using (RuleParametersTableAdapter adapter = new RuleParametersTableAdapter(OrganizationProvider.GetConnectionString(organizationId))) { ClientDataSet.RuleParametersDataTable table = adapter.GetRuleParameter(ruleParameterId); ClientDataSet.RuleParametersRow row = ((table.Count > 0) ? table[0] : null); if (row == null) { row = table.NewRuleParametersRow(); } row.RuleParameterId = ruleParameterId; row.RuleId = ruleId; row.EntityNodeTypeId = entityNodeTypeId; row.IsInputParameter = isInputParameter; row.IsEntity = isEntity; row.FieldName = fieldName; row.FullName = fullName; row.TypeName = typeName; row.Term = term; row.Value = value; if (row.RowState == DataRowState.Detached) { table.AddRuleParametersRow(row); } adapter.Update(row); } }
public bool Resolve() { ClientDataSet.RuleParametersDataTable table = RuleEngineProvider.GetRuleParameters(this.RuleId); this.LastUsedUserId = UserContext.Current.UserId; RuleEngineProvider.UpdateRuleUses( UserContext.Current.OrganizationId, this.RuleId, UserContext.Current.UserId, DateTime.UtcNow); int count = table.Count; if (count == 0) { return(true); } int result = 0; foreach (ClientDataSet.RuleParametersRow row in table) { foreach (Entity ent in this.InputEntities) { if (ent.Id.Equals(row.EntityNodeTypeId)) { EntityField field = ent.Fields[row.FieldName]; if (field != null) { if (field.DataType.FullName.Equals(row.FullName) && field.Value != null) { #region Comparing if (field.DataType == typeof(short)) { short short1 = (short)row.Value; short short2 = (short)field.Value; switch (row.Term) { case "==": if (short2 == short1) { result++; } break; case "!=": if (short2 != short1) { result++; } break; case ">": if (short2 > short1) { result++; } break; case ">=": if (short2 >= short1) { result++; } break; case "<": if (short2 < short1) { result++; } break; case "<=": if (short2 <= short1) { result++; } break; } } else if (field.DataType == typeof(int)) { int int1 = (int)row.Value; int int2 = (int)field.Value; switch (row.Term) { case "==": if (int2 == int1) { result++; } break; case "!=": if (int2 != int1) { result++; } break; case ">": if (int2 > int1) { result++; } break; case ">=": if (int2 >= int1) { result++; } break; case "<": if (int2 < int1) { result++; } break; case "<=": if (int2 <= int1) { result++; } break; } } else if (field.DataType == typeof(long)) { long long1 = (long)row.Value; long long2 = (long)field.Value; switch (row.Term) { case "==": if (long2 == long1) { result++; } break; case "!=": if (long2 != long1) { result++; } break; case ">": if (long2 > long1) { result++; } break; case ">=": if (long2 >= long1) { result++; } break; case "<": if (long2 < long1) { result++; } break; case "<=": if (long2 <= long1) { result++; } break; } } else if (field.DataType == typeof(decimal)) { decimal decimal1 = (decimal)row.Value; decimal decimal2 = (decimal)field.Value; switch (row.Term) { case "==": if (decimal2 == decimal1) { result++; } break; case "!=": if (decimal2 != decimal1) { result++; } break; case ">": if (decimal2 > decimal1) { result++; } break; case ">=": if (decimal2 >= decimal1) { result++; } break; case "<": if (decimal2 < decimal1) { result++; } break; case "<=": if (decimal2 <= decimal1) { result++; } break; } } else if (field.DataType == typeof(double)) { double double1 = (double)row.Value; double double2 = (double)field.Value; switch (row.Term) { case "==": if (double2 == double1) { result++; } break; case "!=": if (double2 != double1) { result++; } break; case ">": if (double2 > double1) { result++; } break; case ">=": if (double2 >= double1) { result++; } break; case "<": if (double2 < double1) { result++; } break; case "<=": if (double2 <= double1) { result++; } break; } } else if (field.DataType == typeof(float)) { float float1 = (float)row.Value; float float2 = (float)field.Value; switch (row.Term) { case "==": if (float2 == float1) { result++; } break; case "!=": if (float2 != float1) { result++; } break; case ">": if (float2 > float1) { result++; } break; case ">=": if (float2 >= float1) { result++; } break; case "<": if (float2 < float1) { result++; } break; case "<=": if (float2 <= float1) { result++; } break; } } else if (field.DataType == typeof(DateTime)) { DateTime DateTime1 = (DateTime)row.Value; DateTime DateTime2 = (DateTime)field.Value; switch (row.Term) { case "==": if (DateTime2 == DateTime1) { result++; } break; case "!=": if (DateTime2 != DateTime1) { result++; } break; case ">": if (DateTime2 > DateTime1) { result++; } break; case ">=": if (DateTime2 >= DateTime1) { result++; } break; case "<": if (DateTime2 < DateTime1) { result++; } break; case "<=": if (DateTime2 <= DateTime1) { result++; } break; } } else if (field.DataType == typeof(Entity)) { Guid guid1 = (Guid)row.Value; Guid guid2 = (Guid)field.Value; if (row.Term == "==") { if (guid1 == guid2) { result++; } } else if (row.Term == "!=") { if (guid1 != guid2) { result++; } } } else { if (row.Term == "==") { if (field.Value.Equals(row.Value)) { result++; } } else { if (!field.Value.Equals(row.Value)) { result++; } } } #endregion break; } } } } } return(count == result); }