use of org.compiere.model.MAlertRule in project adempiere by adempiere.
the class AlertProcessor method processAlert.
// doWork
/**
* Process Alert
* @param alert alert
* @return true if processed
*/
private boolean processAlert(MAlert alert) {
if (!alert.isValid())
return false;
log.info("" + alert);
StringBuffer message = new StringBuffer(alert.getAlertMessage()).append(Env.NL);
//
boolean valid = true;
boolean processed = false;
ArrayList<File> attachments = new ArrayList<File>();
MAlertRule[] rules = alert.getRules(false);
for (int i = 0; i < rules.length; i++) {
if (i > 0)
message.append(Env.NL);
// assume r/o
String trxName = null;
MAlertRule rule = rules[i];
if (!rule.isValid())
continue;
log.fine("" + rule);
// Pre
String sql = rule.getPreProcessing();
if (sql != null && sql.length() > 0) {
int no = DB.executeUpdate(sql, false, trxName);
if (no == -1) {
ValueNamePair error = CLogger.retrieveError();
rule.setErrorMsg("Pre=" + error.getName());
m_errors.append("Pre=" + error.getName());
rule.setIsValid(false);
rule.saveEx();
valid = false;
break;
}
}
// Pre
// The processing
sql = rule.getSql(true);
try {
String text = null;
if (MSysConfig.getBooleanValue("ALERT_SEND_ATTACHMENT_AS_XLS", true, Env.getAD_Client_ID(getCtx())))
text = getExcelReport(rule, sql, trxName, attachments);
else
text = getPlainTextReport(rule, sql, trxName, attachments);
if (text != null && text.length() > 0) {
message.append(text);
processed = true;
}
} catch (Exception e) {
rule.setErrorMsg("Select=" + e.getLocalizedMessage());
m_errors.append("Select=" + e.getLocalizedMessage());
rule.setIsValid(false);
rule.saveEx();
valid = false;
break;
}
// Post
sql = rule.getPostProcessing();
if (sql != null && sql.length() > 0) {
int no = DB.executeUpdate(sql, false, trxName);
if (no == -1) {
ValueNamePair error = CLogger.retrieveError();
rule.setErrorMsg("Post=" + error.getName());
m_errors.append("Post=" + error.getName());
rule.setIsValid(false);
rule.saveEx();
valid = false;
break;
}
}
/** Trx */
if (trxName != null) {
Trx trx = Trx.get(trxName, false);
if (trx != null) {
trx.commit();
trx.close();
}
}
}
// Update header if error
if (!valid) {
alert.setIsValid(false);
alert.saveEx();
return false;
}
// Nothing to report
if (!processed) {
m_summary.append(alert.getName()).append("=No Result - ");
return true;
}
//
// Report footer - Date Generated
DateFormat df = DisplayType.getDateFormat(DisplayType.DateTime);
message.append("\n\n");
message.append(Msg.translate(getCtx(), "Date")).append(" : ").append(df.format(new Timestamp(System.currentTimeMillis())));
Collection<Integer> users = alert.getRecipientUsers();
int countMail = notifyUsers(users, alert.getAlertSubject(), message.toString(), attachments);
m_summary.append(alert.getName()).append(" (EMails+Notes=").append(countMail).append(") - ");
return valid;
}
Aggregations