コード例 #1
0
 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);
     }
 }
コード例 #2
0
        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);
            }
        }
コード例 #3
0
        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);
        }