Пример #1
0
 public void ExecuteRule(BEManager fm, appDB.ddRuleRow thisRule, DataRow rowToCheck, DataColumn columnToCheck, string msg)
 {
     if (rowToCheck.IsNull(columnToCheck))
     {
         throw new AtriumException(msg);
     }
 }
Пример #2
0
        public void ExecuteAction(FileManager fm, appDB.ddRuleRow ddrr, DataRow dr2Validate)
        {
            //can't handle document right now
            //can't have associated data

            ActivityConfig.ACSeriesRow acsr = myA.acMng.DB.ACSeries.FindByACSeriesId(ddrr.ACSeriesId);
            ExecuteAction(fm, dr2Validate, acsr);
        }
Пример #3
0
        protected override void AfterAdd(DataRow dr)
        {
            appDB.ddRuleRow dtr        = (appDB.ddRuleRow)dr;
            string          ObjectName = this.myddRuleDT.TableName;

            dtr.RuleId  = this.myA.PKIDGet(ObjectName, 1);
            dtr.Enabled = false;
            if (dtr.ddFieldRow != null)
            {
                dtr.TableId = dtr.ddFieldRow.TableId;
            }
        }
Пример #4
0
        public void ExecuteRule(BEManager _fm, appDB.ddRuleRow thisRule, DataRow rowToCheck, DataColumn columnToCheck, string msg)
        {
            FileManager fm   = (FileManager)_fm;
            string      pkid = rowToCheck.Table.PrimaryKey[0].ColumnName;

            int increm = 10;

            if (!thisRule.IsVal2Null())
            {
                increm = System.Convert.ToInt32(thisRule.Val2);
            }
            string objectNm = rowToCheck.Table.TableName;

            if (!thisRule.IsVal1Null())
            {
                objectNm = thisRule.Val1;
            }

            rowToCheck[pkid] = fm.AtMng.PKIDGet(objectNm, increm);
        }
Пример #5
0
        public void ExecuteRule(BEManager _fm, appDB.ddRuleRow thisRule, DataRow rowToCheck, DataColumn columnToCheck, string msg)
        {
            FileManager fm = (FileManager)_fm;

            atriumDB.FileContactRow dr = (atriumDB.FileContactRow)rowToCheck;
            //if contact type is once per file see if it it on any other records
            bool once = false;

            once = (bool)fm.Codes("ContactType").Select("ContactTypeCode='" + dr.ContactType + "'")[0]["OncePerFile"];
            if (once)
            {
                foreach (atriumDB.FileContactRow fcr1 in dr.Table.Rows)
                {
                    if (!fcr1.IsNull("ContactType") && fcr1.ContactType == dr.ContactType && dr.FileContactid != fcr1.FileContactid)
                    {
                        throw new AtriumException(msg, dr.ContactType);
                    }
                }
            }
        }
Пример #6
0
        //rules
        public void EvaluateRule(FileManager fm, appDB.ddRuleRow ddrr, DataRow dr2Validate)
        {
            ActivityConfig.ACSeriesRow acsr = fm.AtMng.acMng.DB.ACSeries.FindByACSeriesId(ddrr.ACSeriesId);

            //we need to endedit on the current record so that it can be evaluated by datatable.select operations
            dr2Validate.EndEdit();

            ACEngine MyACE = new ACEngine(fm);

            MyACE.myAcSeries     = acsr;
            MyACE.myActivityCode = acsr.ActivityCodeRow;

            MyACE.AddToRelTables(dr2Validate, "CONTEXT");

            //MyACE.LoadDataForStep(-10, acsr.ACSeriesId);
            MyACE.DoRelFields();
            //consider the blocks as short-circuited or's
            //eg  A || B || C
            //we succeed on the first successful block


            if (MyACE.HasRel0)
            {
                MyACE.LoadDataForStep(0, acsr.ACSeriesId);
                if (!MyACE.skipBlock)
                {
                    return;
                }
            }
            if (MyACE.HasRel1)
            {
                MyACE.LoadDataForStep(1, acsr.ACSeriesId);
                if (!MyACE.skipBlock)
                {
                    return;
                }
            }
            if (MyACE.HasRel2)
            {
                MyACE.LoadDataForStep(2, acsr.ACSeriesId);
                if (!MyACE.skipBlock)
                {
                    return;
                }
            }
            if (MyACE.HasRel3)
            {
                MyACE.LoadDataForStep(3, acsr.ACSeriesId);
                if (!MyACE.skipBlock)
                {
                    return;
                }
            }
            if (MyACE.HasRel4)
            {
                MyACE.LoadDataForStep(4, acsr.ACSeriesId);
                if (!MyACE.skipBlock)
                {
                    return;
                }
            }
            if (MyACE.HasRel5)
            {
                MyACE.LoadDataForStep(5, acsr.ACSeriesId);
                if (!MyACE.skipBlock)
                {
                    return;
                }
            }

            //rule failed

            string msg = myA.acMng.DB.ACDocumentation.FindByACDocId(ddrr.MsgId)[myA.Translate("TextEng")].ToString();

            throw new AtriumException(msg);
        }
Пример #7
0
 private void ExecuteCodeAction(DataColumn columnToCheck, DataRow rowToCheck, FileManager fm, appDB.ddRuleRow ruleToRun)
 {
     myCodeActions[ruleToRun.Val1].ExecuteRule(fm, ruleToRun, rowToCheck, columnToCheck);
 }
Пример #8
0
        private void ExecuteCodeRule(DataColumn columnToCheck, DataRow rowToCheck, FileManager fm, appDB.ddRuleRow ruleToRun)
        {
            string msg = "";

            if (!ruleToRun.IsMsgIdNull())
            {
                msg = myA.acMng.DB.ACDocumentation.FindByACDocId(ruleToRun.MsgId)[myA.Translate("TextEng")].ToString();
            }

            myCodeRules[ruleToRun.Val1].ExecuteRule(fm, ruleToRun, rowToCheck, columnToCheck, msg);
        }
Пример #9
0
        private void RunRule(DataColumn columnToCheck, DataRow rowToCheck, Dictionary <string, appDB.ddFieldRow> ruleColumnMap, FileManager fm, appDB.ddFieldRow fieldDefinition, appDB.ddRuleRow ruleToRun)
        {
            string Left = "Left" + myA.AppMan.Language;

            switch (ruleToRun.RuleTypeId)
            {
            case 0:    //code based
                ExecuteCodeRule(columnToCheck, rowToCheck, fm, ruleToRun);
                break;

            case 1:    //required
                if (rowToCheck.IsNull(columnToCheck))
                {
                    throw new RequiredException(fieldDefinition[Left].ToString());
                }
                break;

            case 2:    //acseries based
                EvaluateRule(fm, ruleToRun, rowToCheck);
                break;

            case 3:    //domain
                if (!rowToCheck.IsNull(columnToCheck))
                {
                    if (!fm.Codes(ruleToRun.Val1).Rows.Contains(rowToCheck[columnToCheck]))
                    {
                        throw new AtriumException(atriumBE.Properties.Resources.IsNotValid, fieldDefinition[Left].ToString());
                    }
                }
                break;

            case 4:    //related - must be field on same record
                if (rowToCheck.IsNull(ruleToRun.Val1))
                {
                    throw new RelatedException(fieldDefinition.LeftEng, ruleColumnMap[ruleToRun.Val1][Left].ToString());
                }

                break;

            case 5:    //old domain check
                if (!rowToCheck.IsNull(columnToCheck))
                {
                    if (!myA.CheckDomain(rowToCheck[columnToCheck].ToString(), fm.Codes(ruleToRun.Val1)))
                    {
                        throw new AtriumException(atriumBE.Properties.Resources.BadDomainValue, fieldDefinition[Left].ToString(), fieldDefinition.ddTableRow["Description" + myA.AppMan.Language].ToString(), ruleToRun.Val1);
                    }
                }
                break;

            case 6:    //valid date
                if (!rowToCheck.IsNull(columnToCheck))
                {
                    DateTime beginDate;
                    DateTime endDate;
                    DateTime dateValue = (DateTime)rowToCheck[columnToCheck];
                    string   name1     = ruleToRun.Val1;
                    string   name2     = ruleToRun.Val2;

                    if (ruleColumnMap.ContainsKey(ruleToRun.Val1))
                    {
                        beginDate = (DateTime)rowToCheck[ruleColumnMap[ruleToRun.Val1].DBFieldName];
                        name1     = ruleColumnMap[ruleToRun.Val1][Left].ToString();
                    }
                    else
                    {
                        beginDate = (DateTime)fm.GetDefaultValue(ruleToRun.Val1);
                    }

                    if (ruleColumnMap.ContainsKey(ruleToRun.Val2))
                    {
                        endDate = (DateTime)rowToCheck[ruleColumnMap[ruleToRun.Val1].DBFieldName];
                        name2   = ruleColumnMap[ruleToRun.Val2][Left].ToString();
                    }
                    else
                    {
                        endDate = (DateTime)fm.GetDefaultValue(ruleToRun.Val2);
                    }


                    if (dateValue < beginDate || dateValue > endDate)
                    {
                        throw new DateBetweenException(fieldDefinition[Left].ToString(), name1, beginDate.ToShortDateString(), name2, endDate.ToShortDateString());
                    }
                }
                break;

            case 7:    //numeric range
                if (!rowToCheck.IsNull(columnToCheck))
                {
                    int v1, v2, thisVal;
                    if (ruleColumnMap.ContainsKey(ruleToRun.Val1))
                    {
                        v1 = System.Convert.ToInt32(rowToCheck[ruleColumnMap[ruleToRun.Val1].DBFieldName]);
                    }
                    else
                    {
                        v1 = System.Convert.ToInt32(fm.GetDefaultValue(ruleToRun.Val1));
                    }

                    if (ruleColumnMap.ContainsKey(ruleToRun.Val2))
                    {
                        v2 = System.Convert.ToInt32(rowToCheck[ruleColumnMap[ruleToRun.Val1].DBFieldName]);
                    }
                    else
                    {
                        v2 = System.Convert.ToInt32(fm.GetDefaultValue(ruleToRun.Val2));
                    }

                    thisVal = System.Convert.ToInt32(rowToCheck[columnToCheck]);

                    if (thisVal < v1 || thisVal > v2)
                    {
                        throw new AtriumException("Outside numeric range");
                    }
                }
                break;

            case 8:    //string length range
                if (!rowToCheck.IsNull(columnToCheck))
                {
                    int v1, v2, thisVal;
                    if (ruleColumnMap.ContainsKey(ruleToRun.Val1))
                    {
                        v1 = (int)rowToCheck[ruleColumnMap[ruleToRun.Val1].DBFieldName];
                    }
                    else
                    {
                        v1 = (int)fm.GetDefaultValue(ruleToRun.Val1);
                    }

                    if (ruleColumnMap.ContainsKey(ruleToRun.Val2))
                    {
                        v2 = (int)rowToCheck[ruleColumnMap[ruleToRun.Val1].DBFieldName];
                    }
                    else
                    {
                        v2 = (int)fm.GetDefaultValue(ruleToRun.Val2);
                    }

                    thisVal = rowToCheck[columnToCheck].ToString().Length;

                    if (thisVal < v1 || thisVal > v2)
                    {
                        throw new AtriumException("Length out of range");
                    }
                }
                break;

            case 99:    //action
                if (!ruleToRun.IsACSeriesIdNull())
                {
                    ExecuteAction(fm, ruleToRun, rowToCheck);
                }
                break;

            case 100:    //action program
                ExecuteCodeAction(columnToCheck, rowToCheck, fm, ruleToRun);
                break;

            default:
                throw new AtriumException("Not a valid rule");
            }
        }