1003949 IDEMPIERE-1952 Create ability to run reports in the scheduler using context variables for dates. Implement context variable support for scheduler name.

This commit is contained in:
Heng Sin Low 2014-04-24 22:49:50 +08:00
parent bc960ac0fa
commit 4f74d9842e
1 changed files with 38 additions and 9 deletions

View File

@ -22,6 +22,7 @@ import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Timestamp;
import java.text.DecimalFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.List;
@ -159,6 +160,7 @@ public class Scheduler extends AdempiereServer
if (log.isLoggable(Level.INFO)) log.info(process.toString());
boolean isReport = (process.isReport() || process.getAD_ReportView_ID() > 0 || process.getJasperReport() != null || process.getAD_PrintFormat_ID() > 0);
String schedulerName = Env.parseContext(m_schedulerctx, -1, m_model.getName(), false, true);
// Process (see also MWFActivity.performWork
int AD_Table_ID = m_model.getAD_Table_ID();
@ -192,20 +194,20 @@ public class Scheduler extends AdempiereServer
if (email)
{
MClient client = MClient.get(m_model.getCtx(), m_model.getAD_Client_ID());
client.sendEMail(from, user, process.getName(), pi.getSummary() + " " + pi.getLogInfo(), null);
client.sendEMail(from, user, schedulerName, pi.getSummary() + " " + pi.getLogInfo(), null);
}
if (notice) {
int AD_Message_ID = 442; // HARDCODED ProcessRunError
MNote note = new MNote(getCtx(), AD_Message_ID, supervisor, null);
note.setClientOrg(m_model.getAD_Client_ID(), m_model.getAD_Org_ID());
note.setTextMsg(pi.getSummary());
note.setTextMsg(schedulerName+"\n"+pi.getSummary());
note.setRecord(MPInstance.Table_ID, pi.getAD_PInstance_ID());
note.saveEx();
String log = pi.getLogInfo(true);
if (log != null && log.trim().length() > 0) {
MAttachment attachment = new MAttachment (getCtx(), MNote.Table_ID, note.getAD_Note_ID(), null);
attachment.setClientOrg(m_model.getAD_Client_ID(), m_model.getAD_Org_ID());
attachment.setTextMsg(m_model.getName());
attachment.setTextMsg(schedulerName);
attachment.addEntry("ProcessLog.html", log.getBytes("UTF-8"));
attachment.saveEx();
}
@ -240,11 +242,11 @@ public class Scheduler extends AdempiereServer
MNote note = new MNote(getCtx(), AD_Message_ID, userIDs[i].intValue(), null);
note.setClientOrg(m_model.getAD_Client_ID(), m_model.getAD_Org_ID());
if (isReport) {
note.setTextMsg(m_model.getName());
note.setTextMsg(schedulerName);
note.setDescription(m_model.getDescription());
note.setRecord(AD_Table_ID, Record_ID);
} else {
note.setTextMsg(m_model.getName() + "\n" + pi.getSummary());
note.setTextMsg(schedulerName + "\n" + pi.getSummary());
note.setRecord(MPInstance.Table_ID, pi.getAD_PInstance_ID());
}
if (note.save()) {
@ -253,7 +255,7 @@ public class Scheduler extends AdempiereServer
// Attachment
attachment = new MAttachment (getCtx(), MNote.Table_ID, note.getAD_Note_ID(), null);
attachment.setClientOrg(m_model.getAD_Client_ID(), m_model.getAD_Org_ID());
attachment.setTextMsg(m_model.getName());
attachment.setTextMsg(schedulerName);
for (File entry : fileList)
attachment.addEntry(entry);
@ -263,7 +265,7 @@ public class Scheduler extends AdempiereServer
if (attachment == null) {
attachment = new MAttachment (getCtx(), MNote.Table_ID, note.getAD_Note_ID(), null);
attachment.setClientOrg(m_model.getAD_Client_ID(), m_model.getAD_Org_ID());
attachment.setTextMsg(m_model.getName());
attachment.setTextMsg(schedulerName);
}
attachment.addEntry("ProcessLog.html", log.getBytes("UTF-8"));
attachment.saveEx();
@ -277,9 +279,9 @@ public class Scheduler extends AdempiereServer
{
MClient client = MClient.get(m_model.getCtx(), m_model.getAD_Client_ID());
if (fileList != null && !fileList.isEmpty()) {
client.sendEMailAttachments(from, user, m_model.getName(), m_model.getDescription(), fileList);
client.sendEMailAttachments(from, user, schedulerName, m_model.getDescription(), fileList);
} else {
client.sendEMail(from, user, m_model.getName(), pi.getSummary() + " " + pi.getLogInfo(true), null, true);
client.sendEMail(from, user, schedulerName, pi.getSummary() + " " + pi.getLogInfo(), null);
}
}
@ -341,6 +343,7 @@ public class Scheduler extends AdempiereServer
if (DisplayType.isNumeric(sPara.getDisplayType())
|| DisplayType.isID(sPara.getDisplayType()))
{
DecimalFormat decimalFormat = DisplayType.getNumberFormat(sPara.getDisplayType());
BigDecimal bd = toBigDecimal(value);
iPara.setP_Number(bd);
if (toValue != null)
@ -348,17 +351,34 @@ public class Scheduler extends AdempiereServer
bd = toBigDecimal(toValue);
iPara.setP_Number_To(bd);
}
if (Util.isEmpty(paraDesc))
{
String info = decimalFormat.format(iPara.getP_Number());
if (iPara.getP_Number_To() != null)
info = info + " - " + decimalFormat.format(iPara.getP_Number_To());
iPara.setInfo(info);
}
if (log.isLoggable(Level.FINE)) log.fine(sPara.getColumnName()
+ " = " + variable + " (=" + bd + "=)");
}
else if (DisplayType.isDate(sPara.getDisplayType()))
{
SimpleDateFormat dateFormat = DisplayType.getDateFormat(sPara.getDisplayType());
Timestamp ts = toTimestamp(value);
iPara.setP_Date(ts);
if (toValue != null) {
ts = toTimestamp(toValue);
iPara.setP_Date_To(ts);
}
if (Util.isEmpty(paraDesc))
{
String info = dateFormat.format(iPara.getP_Date());
if (iPara.getP_Date_To() != null)
{
info = info + " - " + dateFormat.format(iPara.getP_Date_To());
}
iPara.setInfo(info);
}
if (log.isLoggable(Level.FINE)) log.fine(sPara.getColumnName()
+ " = " + variable + " (=" + ts + "=)");
}
@ -369,6 +389,15 @@ public class Scheduler extends AdempiereServer
{
iPara.setP_String_To(toValue.toString());
}
if (Util.isEmpty(paraDesc))
{
String info = iPara.getP_String();
if (iPara.getP_String_To() != null)
{
info = info + " - " + iPara.getP_String_To();
}
iPara.setInfo(info);
}
if (log.isLoggable(Level.FINE)) log.fine(sPara.getColumnName()
+ " = " + variable
+ " (=" + value + "=) " + value.getClass().getName());