📄 dataengine.java
字号:
if (!m_group.isGroupColumn(group_pdc.getColumnName()))
continue;
// Group change
Object value = m_group.groupChange(group_pdc.getColumnName(), rs.getObject(group_pdc.getAlias()));
if (value != null) // Group change
{
char[] functions = m_group.getFunctions(group_pdc.getColumnName());
for (int f = 0; f < functions.length; f++)
{
printRunningTotal(pd, levelNo, rowNo++);
pd.addRow(true, levelNo);
// get columns
for (int c = 0; c < pd.getColumnInfo().length; c++)
{
pdc = pd.getColumnInfo()[c];
// log.fine("loadPrintData - PageBreak = " + pdc.isPageBreak());
if (group_pdc.getColumnName().equals(pdc.getColumnName()))
{
String valueString = value.toString();
if (value instanceof Timestamp)
valueString = DisplayType.getDateFormat(pdc.getDisplayType(), m_language).format(value);
valueString += PrintDataFunction.getFunctionSymbol(functions[f]);
pd.addNode(new PrintDataElement(pdc.getColumnName(),
valueString, DisplayType.String, false, pdc.isPageBreak()));
}
else if (m_group.isFunctionColumn(pdc.getColumnName(), functions[f]))
{
pd.addNode(new PrintDataElement(pdc.getColumnName(),
m_group.getValue(group_pdc.getColumnName(),
pdc.getColumnName(), functions[f]),
PrintDataFunction.getFunctionDisplayType(functions[f]),
false, pdc.isPageBreak()));
}
} // for all columns
} // for all functions
// Reset Group Values
for (int c = 0; c < pd.getColumnInfo().length; c++)
{
pdc = pd.getColumnInfo()[c];
m_group.reset(group_pdc.getColumnName(), pdc.getColumnName());
}
} // Group change
} // for all columns
} // group change
// new row ---------------------------------------------------
printRunningTotal(pd, levelNo, rowNo++);
pd.addRow(false, levelNo);
int counter = 1;
// get columns
for (int i = 0; i < pd.getColumnInfo().length; i++)
{
pdc = pd.getColumnInfo()[i];
PrintDataElement pde = null;
// Key Column - No DisplayColumn
if (pdc.getAlias().equals(KEY))
{
if (pdc.getColumnName().endsWith("_ID"))
{
// int id = rs.getInt(pdc.getColumnIDName());
int id = rs.getInt(counter++);
if (!rs.wasNull())
{
KeyNamePair pp = new KeyNamePair(id, KEY); // Key
pde = new PrintDataElement(pdc.getColumnName(), pp, pdc.getDisplayType(), true, pdc.isPageBreak());
}
}
else
{
// String id = rs.getString(pdc.getColumnIDName());
String id = rs.getString(counter++);
if (!rs.wasNull())
{
ValueNamePair pp = new ValueNamePair(id, KEY); // Key
pde = new PrintDataElement(pdc.getColumnName(), pp, pdc.getDisplayType(), true, pdc.isPageBreak());
}
}
}
// Non-Key Column
else
{
// Display and Value Column
if (pdc.hasAlias())
{
// DisplayColumn first
String display = rs.getString(counter++);
if (pdc.getColumnName().endsWith("_ID"))
{
int id = rs.getInt(counter++);
if (display != null && !rs.wasNull())
{
KeyNamePair pp = new KeyNamePair(id, display);
pde = new PrintDataElement(pdc.getColumnName(), pp, pdc.getDisplayType());
}
}
else
{
String id = rs.getString(counter++);
if (display != null && !rs.wasNull())
{
ValueNamePair pp = new ValueNamePair(id, display);
pde = new PrintDataElement(pdc.getColumnName(), pp, pdc.getDisplayType());
}
}
}
// Display Value only
else
{
// Transformation for Booleans
if (pdc.getDisplayType() == DisplayType.YesNo)
{
String s = rs.getString(counter++);
if (!rs.wasNull())
{
boolean b = s.equals("Y");
pde = new PrintDataElement(pdc.getColumnName(), new Boolean(b), pdc.getDisplayType());
}
}
else if (pdc.getDisplayType() == DisplayType.TextLong)
{
Clob clob = rs.getClob(counter++);
String value = "";
if (clob != null)
{
long length = clob.length();
value = clob.getSubString(1, (int)length);
}
pde = new PrintDataElement(pdc.getColumnName(), value, pdc.getDisplayType());
}
else
// The general case
{
Object obj = rs.getObject(counter++);
if (obj != null && obj instanceof String)
{
obj = ((String)obj).trim();
if (((String)obj).length() == 0)
obj = null;
}
if (obj != null)
{
// Translate Spool Output
if (translateSpool && obj instanceof String)
{
String s = (String)obj;
s = Msg.parseTranslation(pd.getCtx(), s);
pde = new PrintDataElement(pdc.getColumnName(), s, pdc.getDisplayType());
}
else
pde = new PrintDataElement(pdc.getColumnName(), obj, pdc.getDisplayType());
}
}
} // Value only
} // Non-Key Column
if (pde != null)
{
pd.addNode(pde);
m_group.addValue(pde.getColumnName(), pde.getFunctionValue());
}
} // for all columns
} // for all rows
rs.close();
pstmt.close();
}
catch (SQLException e)
{
log.log(Level.SEVERE, pdc + " - " + e.getMessage() + "\nSQL=" + pd.getSQL());
}
// -- we have all rows - finish
// Check last Group Change
if (m_group.getGroupColumnCount() > 1) // one is TOTAL
{
for (int i = pd.getColumnInfo().length-1; i >= 0; i--) // backwards (leaset group first)
{
PrintDataColumn group_pdc = pd.getColumnInfo()[i];
if (!m_group.isGroupColumn(group_pdc.getColumnName()))
continue;
Object value = m_group.groupChange(group_pdc.getColumnName(), new Object());
if (value != null) // Group change
{
char[] functions = m_group.getFunctions(group_pdc.getColumnName());
for (int f = 0; f < functions.length; f++)
{
printRunningTotal(pd, levelNo, rowNo++);
pd.addRow(true, levelNo);
// get columns
for (int c = 0; c < pd.getColumnInfo().length; c++)
{
pdc = pd.getColumnInfo()[c];
if (group_pdc.getColumnName().equals(pdc.getColumnName()))
{
String valueString = value.toString();
if (value instanceof Timestamp)
valueString = DisplayType.getDateFormat(pdc.getDisplayType(), m_language).format(value);
valueString += PrintDataFunction.getFunctionSymbol(functions[f]);
pd.addNode(new PrintDataElement(pdc.getColumnName(),
valueString, DisplayType.String));
}
else if (m_group.isFunctionColumn(pdc.getColumnName(), functions[f]))
{
pd.addNode(new PrintDataElement(pdc.getColumnName(),
m_group.getValue(group_pdc.getColumnName(),
pdc.getColumnName(), functions[f]),
PrintDataFunction.getFunctionDisplayType(functions[f])));
}
}
} // for all functions
// No Need to Reset
} // Group change
}
} // last group change
// Add Total Lines
if (m_group.isGroupColumn(PrintDataGroup.TOTAL))
{
char[] functions = m_group.getFunctions(PrintDataGroup.TOTAL);
for (int f = 0; f < functions.length; f++)
{
printRunningTotal(pd, levelNo, rowNo++);
pd.addRow(true, levelNo);
// get columns
for (int c = 0; c < pd.getColumnInfo().length; c++)
{
pdc = pd.getColumnInfo()[c];
if (c == 0) // put Function in first Column
{
String name = "";
if (!format.getTableFormat().isPrintFunctionSymbols()) // Translate Sum, etc.
name = Msg.getMsg(format.getLanguage(), PrintDataFunction.getFunctionName(functions[f]));
name += PrintDataFunction.getFunctionSymbol(functions[f]); // Symbol
pd.addNode(new PrintDataElement(pdc.getColumnName(), name.trim(), DisplayType.String));
}
else if (m_group.isFunctionColumn(pdc.getColumnName(), functions[f]))
{
pd.addNode(new PrintDataElement(pdc.getColumnName(),
m_group.getValue(PrintDataGroup.TOTAL,
pdc.getColumnName(), functions[f]),
PrintDataFunction.getFunctionDisplayType(functions[f])));
}
} // for all columns
} // for all functions
// No Need to Reset
} // TotalLine
if (pd.getRowCount() == 0)
{
if (CLogMgt.isLevelFiner())
log.warning("NO Rows - ms=" + (System.currentTimeMillis()-m_startTime)
+ " - " + pd.getSQL());
else
log.warning("NO Rows - ms=" + (System.currentTimeMillis()-m_startTime));
}
else
log.info("Rows=" + pd.getRowCount()
+ " - ms=" + (System.currentTimeMillis()-m_startTime));
} // loadPrintData
/**
* Print Running Total
* @param pd Print Data to add lines to
* @param levelNo level no
* @param rowNo row no
*/
private void printRunningTotal (PrintData pd, int levelNo, int rowNo)
{
if (m_runningTotalLines < 1) // -1 = none
return;
log.fine("(" + m_runningTotalLines + ") - Row=" + rowNo
+ ", mod=" + rowNo % m_runningTotalLines);
if (rowNo % m_runningTotalLines != 0)
return;
log.fine("Row=" + rowNo);
PrintDataColumn pdc = null;
int start = 0;
if (rowNo == 0) // no page break on page 1
start = 1;
for (int rt = start; rt < 2; rt++)
{
pd.addRow (true, levelNo);
// get sum columns
for (int c = 0; c < pd.getColumnInfo().length; c++)
{
pdc = pd.getColumnInfo()[c];
if (c == 0)
{
String title = "RunningTotal";
pd.addNode(new PrintDataElement(pdc.getColumnName(),
title, DisplayType.String, false, rt==0)); // page break
}
else if (m_group.isFunctionColumn(pdc.getColumnName(), PrintDataFunction.F_SUM))
{
pd.addNode(new PrintDataElement(pdc.getColumnName(),
m_group.getValue(PrintDataGroup.TOTAL, pdc.getColumnName(), PrintDataFunction.F_SUM),
PrintDataFunction.getFunctionDisplayType(PrintDataFunction.F_SUM), false, false));
}
} // for all sum columns
} // two lines
} // printRunningTotal
/*************************************************************************
* Test
* @param args args
*/
public static void main(String[] args)
{
org.compiere.Compiere.startup(true);
// DataEngine de = new DataEngine(null);
DataEngine de = new DataEngine(Language.getLanguage("de_DE"));
MQuery query = new MQuery();
query.addRestriction("AD_Table_ID", MQuery.LESS, 105);
// PrintData pd = de.load_fromTable(100, query, null, null, false);
// pd.dump();
// pd.createXML(new javax.xml.transform.stream.StreamResult(System.out));
}
} // DataEngine
/**
* Table Reference Info
*/
class TableReference
{
public String TableName;
public String KeyColumn;
public String DisplayColumn;
public boolean IsValueDisplayed = false;
public boolean IsTranslated = false;
} // TableReference
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -