⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 wwindow.java

📁 Java写的ERP系统
💻 JAVA
📖 第 1 页 / 共 3 页
字号:
	 *  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("&gt;");        //  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 = "&nbsp;";                //  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 + -