public void ExecuteRule(BEManager fm, appDB.ddRuleRow thisRule, DataRow rowToCheck, DataColumn columnToCheck, string msg) { if (rowToCheck.IsNull(columnToCheck)) { throw new AtriumException(msg); } }
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); }
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; } }
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); }
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); } } } }
//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); }
private void ExecuteCodeAction(DataColumn columnToCheck, DataRow rowToCheck, FileManager fm, appDB.ddRuleRow ruleToRun) { myCodeActions[ruleToRun.Val1].ExecuteRule(fm, ruleToRun, rowToCheck, columnToCheck); }
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); }
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"); } }