📄 wwindow.java
字号:
* Execute Save
* @param request
* @param ws
*/
private void executeSave (HttpServletRequest request, WWindowStatus ws)
{
Log.trace(Log.l5_DData, "WWindow.save");
boolean error = false;
// loop through parameters
Enumeration en = request.getParameterNames();
while (en.hasMoreElements())
{
String key = (String)en.nextElement();
// ignore hidden commands
if (key.equals(P_Command) || key.equals(P_MR_RowNo) || key.equals(P_Tab))
continue;
MField mField = ws.curTab.getField(key);
// we found a writable field
if (mField != null && mField.isEditable(true))
{
String value = (String)request.getParameter(key);
Object dbValue = mField.getValue();
boolean fieldError = false;
Log.trace(Log.l6_Database, mField.getColumnName(),
dbValue==null ? "null" : dbValue.toString() + " -> " + value==null ? "null" : value.toString());
// same = both null
if (dbValue == null && value == null)
continue;
// new value null
else if (dbValue != null && value == null)
ws.curTab.setValue (mField, null);
// from null to new value
else if (dbValue == null && value != null)
fieldError = !setFieldValue (ws, mField, value);
// same
else if (dbValue.equals(value))
continue;
else
fieldError = !setFieldValue (ws, mField, value);
//
if (!error && fieldError)
{
Log.trace(Log.l1_User, "WWindow.executeSave - Error", mField.getColumnName());
error = fieldError;
}
}
} // for all parameteres
// Check Mandatory
Log.trace(Log.l5_DData, "WWindow.save - Mandatory check");
int size = ws.curTab.getFieldCount();
for (int i = 0; i < size; i++)
{
MField field = (MField)ws.curTab.getField(i);
if (field.isMandatory(true)) // context check
{
Object value = field.getValue();
if (value == null || value.toString().length() == 0)
{
field.setInserting (true); // set editable otherwise deadlock
field.setError(true);
field.setErrorValue(value == null ? null : value.toString());
if (!error)
error = true;
Log.trace(Log.l1_User, "WWindow.executeSave - Mandatory Error", field.getColumnName());
}
else
field.setError(false);
}
}
if (error)
{
Log.trace(Log.l4_Data, "WWindow.executeSave - Error");
return;
}
// save it - of errors ignore changes
if (!ws.curTab.dataSave(true))
ws.curTab.dataIgnore();
Log.trace(Log.l4_Data, "WWindow.executeSave - Done");
} // executeSave
/**
* Set Field Value
* @param ws
* @param mField
* @param value as String
* @return true if correct
*/
private boolean setFieldValue(WWindowStatus ws, MField mField, String value)
{
Object newValue = getFieldValue (ws, mField, value);
if (ERROR.equals(newValue))
{
mField.setErrorValue(value);
return false;
}
Object dbValue = mField.getValue();
if ((newValue == null && dbValue != null)
|| (newValue != null && !newValue.equals(dbValue)))
ws.curTab.setValue(mField, newValue);
return true;
} // setFieldValue
/**
* Get Field value (convert value to datatype of MField)
*
* @param ws
* @param mField
* @param value String Value
* @return converted Field Value
*/
private Object getFieldValue (WWindowStatus ws, MField mField, String value)
{
if (value == null || value.length() == 0)
return null;
int dt = mField.getDisplayType();
// BigDecimal
if (DisplayType.isNumeric(dt))
{
BigDecimal bd = null;
try
{
Number nn = null;
if (dt == DisplayType.Amount)
nn = ws.amountFormat.parse(value);
else if (dt == DisplayType.Quantity)
nn = ws.quantityFormat.parse(value);
else
nn = ws.numberFormat.parse(value);
if (nn instanceof BigDecimal)
bd = (BigDecimal)nn;
else
bd = new BigDecimal(nn.toString());
}
catch (Exception e)
{
Log.trace(Log.l6_Database, "BigDecimal", value + ERROR);
return ERROR;
}
Log.trace(Log.l6_Database, "WWindow.getFieldValue - BigDecimal", value + " -> " + bd);
return bd;
}
// ID
else if (DisplayType.isID(dt))
{
Integer ii = null;
try
{
ii = new Integer (value);
}
catch (Exception e)
{
Log.error("WWindow.getFieldValue - ID=" + value, e);
ii = null;
}
// -1 indicates NULL
if (ii.intValue() == -1)
ii = null;
Log.trace(Log.l6_Database, "WWindow.getFieldValue - ID", value + " -> " + ii);
return ii;
}
// Date/Time
else if (DisplayType.isDate(dt))
{
Timestamp ts = null;
try
{
java.util.Date d = null;
if (dt == DisplayType.Date)
d = ws.dateFormat.parse(value);
else
d = ws.dateTimeFormat.parse(value);
ts = new Timestamp(d.getTime());
}
catch (Exception e)
{
Log.trace(Log.l6_Database, "WWindow.getFieldValue - Date", value + ERROR);
return ERROR;
}
Log.trace(Log.l6_Database, "WWindow.getFieldValue - Date", value + " -> " + ts);
return ts;
}
// Checkbox
else if (dt == DisplayType.YesNo)
{
if (value.equals("true"))
return "Y";
return "N";
}
// treat as string
return value;
} // getFieldType
/*************************************************************************/
/**
* Return SingleRow Form details
* @param action
* @param ws
* @param loginInfo
* @return Form
*/
private form getSR_Form (String action, WWindowStatus ws, String loginInfo)
{
Log.trace(Log.l2_Sub, "WWindow.getSR_Form - Tab=" + ws.curTab.getTabNo());
/**********************
* For all Fields
*/
table table = new table().setAlign(AlignType.CENTER);
//
tr line = new tr();
int noFields = ws.curTab.getFieldCount();
for (int i = 0; i < noFields; i++)
{
MField field = ws.curTab.getField(i);
String colName = field.getColumnName();
/**
* Get Data and convert to String (singleRow)
*/
Object data = ws.curTab.getValue(field);
String info = null;
if (data == null)
info = "";
else
{
switch(field.getDisplayType())
{
case DisplayType.Date:
info = ws.dateFormat.format(data);
break;
case DisplayType.DateTime:
info = ws.dateTimeFormat.format(data);
break;
case DisplayType.Amount:
info = ws.amountFormat.format(data);
break;
case DisplayType.Number:
info = ws.numberFormat.format(data);
break;
case DisplayType.Quantity:
info = ws.quantityFormat.format(data);
break;
case DisplayType.Integer:
info = ws.integerFormat.format(data);
break;
/** @todo output formatting */
default:
info = data.toString();
}
}
if (info == null)
info = "";
/**
* Display field
*/
if (field.isDisplayed(false))
{
if (!field.isSameLine())
line = new tr();
//
addField(line, field, data, info, false /*gc.getDisplayDependencies().contains(colName)*/);
table.addElement(line);
}
} // for all fields
// Status Line
int rowNo = ws.curTab.getCurrentRow();
String statusDB = String.valueOf(rowNo+1) + " # " + ws.curTab.getRowCount();
return createLayout(action, table, ws,
loginInfo, "", statusDB);
} // getSR_Form
/*************************************************************************/
/**
* Return MultiRow Form details
* @param action
* @param ws
* @param loginInfo
* @return Form
*/
private form getMR_Form (String action, WWindowStatus ws, String loginInfo)
{
Log.trace(Log.l2_Sub, "WWindow.getMR_Form - Tab=" + ws.curTab.getTabNo());
int initRowNo = ws.curTab.getCurrentRow();
/**
* Table Header
*/
table table = new table().setAlign(AlignType.CENTER);
table.setClass("MultiRow");
table.setBorder(1);
table.setCellSpacing(1);
tr line = new tr();
// First Column
line.addElement(new th().addElement(" "));
// for all columns
int noFields = ws.curTab.getFieldCount();
for (int colNo = 0; colNo < noFields; colNo++)
{
MField field = ws.curTab.getField(colNo);
if (field.isDisplayed(false))
{
th th = new th();
th.addElement(field.getHeader()); // Name
th.setAbbr(field.getDescription()); // Description
line.addElement(th);
}
} // for all columns
table.addElement(new thead().addElement(line));
/**
* Table Lines
*/
int lastRow = initRowNo + MAX_LINES;
lastRow = Math.min(lastRow, ws.curTab.getRowCount());
for (int lineNo = initRowNo; lineNo < lastRow; lineNo++)
{
// Row
ws.curTab.navigate(lineNo);
line = new tr();
// Selector
button selector = new button();
selector.addElement(">"); // displays ">"
selector.setOnClick("document." + FORM_NAME + "." + P_MR_RowNo + ".value='" + lineNo + "'; submit();");
line.addElement(new td().addElement(selector));
// for all columns
for (int colNo = 0; colNo < noFields; colNo++)
{
td td = new td();
//
MField field = ws.curTab.getField(colNo);
if (!field.isDisplayed(false))
continue;
// Get Data - turn to string
Object data = ws.curTab.getValue(field.getColumnName());
String info = null;
//
if (data == null)
info = "";
else
{
int dt = field.getDisplayType();
switch (dt)
{
case DisplayType.Date:
info = ws.dateFormat.format(data);
td.setAlign("right");
break;
case DisplayType.DateTime:
info = ws.dateTimeFormat.format(data);
td.setAlign("right");
break;
case DisplayType.Amount:
info = ws.amountFormat.format(data);
td.setAlign("right");
break;
case DisplayType.Number:
info = ws.numberFormat.format(data);
td.setAlign("right");
break;
case DisplayType.Quantity:
info = ws.quantityFormat.format(data);
td.setAlign("right");
break;
case DisplayType.Integer:
info = ws.integerFormat.format(data);
td.setAlign("right");
break;
case DisplayType.YesNo:
info = Msg.getMsg(ws.ctx, data.toString());
break;
/** @todo output formatting 2 */
default:
if (DisplayType.isLookup(dt))
info = field.getLookup().getDisplay(data);
else
info = data.toString();
}
}
// Empty info
if (info == null || info.length() == 0)
info = " "; // Space
//
td.addElement(info);
line.addElement(td);
} // for all columns
table.addElement(line);
} // for all table lines
// Status Line
String statusDB = String.valueOf(initRowNo+1) + "-" + String.valueOf(lastRow) + " # " + ws.curTab.getRowCount();
return createLayout(action, table, ws,
loginInfo, "", statusDB);
} // getMR_Form
/**
* Create Layout
*
* @param action
* @param table
* @param ws
* @param loginInfo
* @param statusInfo
* @param statusDB
* @return Form
*/
private static form createLayout (String action, table table, WWindowStatus ws,
String loginInfo, String statusInfo, String statusDB)
{
Log.trace(Log.l3_Util, "WWindow.createLayout");
form form = null;
form = new form(action, form.post, form.ENC_DEFAULT);
form.setTarget(WEnv.TARGET_WINDOW);
String AD_Language = Env.getAD_Language(ws.ctx);
// Window
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -