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"); } }