public MAlertRule[] GetRules(bool reload) { if (m_rules != null && !reload) { return(m_rules); } String sql = "SELECT * FROM AD_AlertRule " + "WHERE isactive='Y' AND AD_Alert_ID=" + GetAD_Alert_ID(); List <MAlertRule> list = new List <MAlertRule>(); DataSet ds = DB.ExecuteDataset(sql); try { foreach (DataRow dr in ds.Tables[0].Rows) { MAlertRule mAlertRule = new MAlertRule(GetCtx(), dr, null); ValidateAlertRuleCondition(mAlertRule); list.Add(mAlertRule); } } catch (Exception e) { log.Log(Level.SEVERE, sql, e); } // m_rules = new MAlertRule[list.Count()]; m_rules = list.ToArray(); return(m_rules); } // getRules
/** * Alert Condition * @param alert alert * @return true if processed */ public bool ValidateAlertRuleCondition(MAlertRule AlertRule) { bool returnConditionValue = true; int errorType = 0; string Sql = "SELECT object_name FROM all_objects WHERE object_type IN ('TABLE','VIEW') AND (object_name) = UPPER('AD_ALERTRULECONDITION') AND OWNER LIKE '" + DB.GetSchema() + "'"; string ObjectName = Convert.ToString(DB.ExecuteScalar(Sql)); if (ObjectName != "") { //Fetch All Alert Condition Against AlertID............. DataSet dsAlertCondition = DB.ExecuteDataset("select ad_alertRulecondition_id from ad_alertRulecondition where ad_alertrule_ID=" + AlertRule.GetAD_AlertRule_ID() + " and isactive='Y' order by sequence,ad_alertrulecondition_id"); //IF No Alert Condition Find then return true otherwise Follow further Condition............ if (dsAlertCondition != null && dsAlertCondition.Tables[0].Rows.Count > 0) { for (int i = 0; i < dsAlertCondition.Tables[0].Rows.Count; i++) { decimal numericValue = 0; string stringValue = ""; DateTime dateValue = new DateTime(); bool validateResult = false; errorType = 0; int alertConditionID = Convert.ToInt32(dsAlertCondition.Tables[0].Rows[i]["ad_alertRulecondition_id"]); X_AD_AlertRuleCondition alertCondition = new X_AD_AlertRuleCondition(AlertRule.GetCtx(), alertConditionID, null); string sqlQuery = alertCondition.GetSqlQuery(); try { if (alertCondition.GetSqlQuery().ToLower().Trim().StartsWith("select")) { //Check What is the return type of Query. if Query retrun more than one record than throw error............ if (alertCondition.GetReturnValueType() == X_AD_AlertRuleCondition.RETURNVALUETYPE_Number) //Numeric Value { errorType = 1; //if error occured in following query than used in catch if (DB.ExecuteScalar(sqlQuery) == DBNull.Value || DB.ExecuteScalar(sqlQuery) == null) { numericValue = Convert.ToDecimal(0); } else { numericValue = Convert.ToDecimal(DB.ExecuteScalar(sqlQuery)); } errorType = 2;//if error occured in following comparison then used in catch //This function Match condition on Query Return Value and User's enterd Value based on users Selected Operator........... validateResult = EvaluateNumaricLogic(numericValue, Convert.ToDecimal(alertCondition.GetAlphaNumValue()), alertCondition.GetOperator()); } else if (alertCondition.GetReturnValueType() == X_AD_AlertRuleCondition.RETURNVALUETYPE_String) //String Value { errorType = 1; //if error occured in following query than used in catch if (DB.ExecuteScalar(sqlQuery) == DBNull.Value || DB.ExecuteScalar(sqlQuery) == null) { stringValue = ""; } else { stringValue = Convert.ToString(DB.ExecuteScalar(sqlQuery)); } errorType = 2;//if error occured in following comparison then used in catch //This function Match condition on Query Return Value and User's enterd Value based on users Selected Operator........... validateResult = EvaluateStringLogic(stringValue, alertCondition.GetAlphaNumValue(), alertCondition.GetOperator()); } else if (alertCondition.GetReturnValueType() == X_AD_AlertRuleCondition.RETURNVALUETYPE_Date)// Date Value { // this Date Section is not implemented in Alert Return Value Type List....................... errorType = 1; //if error occured in following query than used in catch dateValue = Convert.ToDateTime(DB.ExecuteScalar(sqlQuery)); errorType = 2; //if error occured in following comparison then used in catch //This function Match condition on Query Return Value and User's enterd Value based on users Selected Operator........... validateResult = EvaluateDateLogic(dateValue, Convert.ToDateTime(alertCondition.GetDateValue()), alertCondition.GetOperator(), alertCondition.IsDynamic(), alertCondition.GetDateOperation(), alertCondition.GetDay(), alertCondition.GetMONTH(), alertCondition.GetYEAR()); } //if we Find multiple condition against same alert then we have to find on the basis of And OR if (i != 0) { if (X_AD_AlertRuleCondition.ANDOR_Or.Equals(alertCondition.GetAndOr())) { returnConditionValue = returnConditionValue || validateResult; } else { returnConditionValue = returnConditionValue && validateResult; } } else { returnConditionValue = validateResult; } } else { returnConditionValue = false; AlertRule.SetErrorMsg("Conditional Sequence Number " + alertCondition.GetSequence() + " Error= Only Execute Select Query"); AlertRule.SetIsValid(false); AlertRule.Save(); return(false); } } catch (Exception e) { returnConditionValue = false; if (errorType == 1) { AlertRule.SetErrorMsg("Conditional Sequence Number " + alertCondition.GetSequence() + " Select Error=" + e.Message); } else { AlertRule.SetErrorMsg("Conditional Sequence Number " + alertCondition.GetSequence() + " Comparison Error=" + e.Message); } AlertRule.SetIsValid(false); AlertRule.Save(); return(false); } } } else { returnConditionValue = true; } } else { returnConditionValue = true; } if (AlertRule.GetErrorMsg() == null || AlertRule.GetErrorMsg() == string.Empty) { AlertRule.SetIsValid(returnConditionValue); AlertRule.Save(); } return(returnConditionValue); }