📄 wwindow.java
字号:
/******************************************************************************
* The contents of this file are subject to the Compiere License Version 1.1
* ("License"); You may not use this file except in compliance with the License
* You may obtain a copy of the License at http://www.compiere.org/license.html
* Software distributed under the License is distributed on an "AS IS" basis,
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for
* the specific language governing rights and limitations under the License.
* The Original Code is Compiere ERP & CRM Smart Business Solution. The Initial
* Developer of the Original Code is Jorg Janke. Portions created by Jorg Janke
* are Copyright (C) 1999-2005 Jorg Janke.
* All parts are Copyright (C) 1999-2005 ComPiere, Inc. All Rights Reserved.
* Contributor(s): ______________________________________.
*****************************************************************************/
package org.compiere.www;
import java.io.*;
import java.math.*;
import java.sql.*;
import java.util.*;
import java.util.logging.*;
import javax.servlet.*;
import javax.servlet.http.*;
import org.apache.ecs.*;
import org.apache.ecs.xhtml.*;
import org.compiere.model.*;
import org.compiere.util.*;
/**
* Web Window Servlet
*
* @author Jorg Janke
* @version $Id: WWindow.java,v 1.28 2005/07/18 03:56:02 jjanke Exp $
*/
public class WWindow extends HttpServlet
{
/** Logger */
protected static CLogger log = CLogger.getCLogger(WWindow.class);
/**
* Initialize global variables
* @param config
* @throws ServletException
*/
public void init(ServletConfig config) throws ServletException
{
super.init (config);
if (!WebEnv.initWeb(config))
throw new ServletException("WWindow.init");
} // init
/**
* Get Servlet information
* @return info
*/
public String getServletInfo()
{
return "Compiere Web Window";
} // getServletInfo
/**
* Clean up resources
*/
public void destroy()
{
log.fine("destroy");
} // destroy
/** Window Number Counter */
private static int s_WindowNo = 1;
/** Form Name */
protected static final String FORM_NAME = "WForm";
/** Hidden Parameter Command - Button */
private static final String P_Command = "PCommand";
/** Hidden Parameter - Tab No */
private static final String P_Tab = "PTab";
/** Hidden Parameter - MultiRow Row No */
private static final String P_MR_RowNo = "PMRRowNo";
/** Hidden Parameter - Changed Field for Callout/etc. */
private static final String P_ChangedColumn = "ChangedColumn";
/** Multi Row Lines per Screen */
private static final int MAX_LINES = 12;
/** Indicator for last line */
private static final int LAST_LINE = 999999;
/** Error Indicator */
private static final String ERROR = " ERROR! ";
/**
* Process the HTTP Get request - Initial Call.
* <br>
* http://localhost/compiere/WWindow?AD_Window_ID=123
* <br>
* Create Window with request parameters
* AD_Window_ID
* AD_Menu_ID
*
* Clean up old/existing window
*
* @param request
* @param response
* @throws ServletException
* @throws IOException
*/
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
{
// Get Session attributes
HttpSession sess = request.getSession();
WebSessionCtx wsc = WebSessionCtx.get(request);
if (wsc == null)
{
WebUtil.createTimeoutPage(request, response, this, null);
return;
}
// Parameter: AD_Window_ID
int AD_Window_ID = WebUtil.getParameterAsInt(request, "AD_Window_ID");
// Get Parameter: Menu_ID
int AD_Menu_ID = WebUtil.getParameterAsInt(request, "AD_Menu_ID");
//
log.info("AD_Window_ID=" + AD_Window_ID
+ "; AD_Menu_ID=" + AD_Menu_ID);
// Clean up old Window
WWindowStatus ws = WWindowStatus.get(request);
if (ws != null)
{
int WindowNo = ws.mWindow.getWindowNo();
log.fine("Disposing - WindowNo=" + WindowNo + ", ID=" + ws.mWindow.getAD_Window_ID());
ws.mWindow.dispose();
Env.clearWinContext(wsc.ctx, WindowNo);
}
/**
* New Window data
*/
MWindowVO mWindowVO = MWindowVO.create (wsc.ctx, s_WindowNo++, AD_Window_ID, AD_Menu_ID);
if (mWindowVO == null)
{
String msg = Msg.translate(wsc.ctx, "AD_Window_ID") + " "
+ Msg.getMsg(wsc.ctx, "NotFound") + ", ID=" + AD_Window_ID + "/" + AD_Menu_ID;
WebUtil.createErrorPage(request, response, this, msg);
sess.setAttribute(WWindowStatus.NAME, null);
return;
}
// Create New Window
ws = new WWindowStatus(mWindowVO);
sess.setAttribute(WWindowStatus.NAME, ws);
// Query
ws.curTab.query(ws.mWindow.isTransaction());
ws.curTab.navigate(0);
/**
* Build Page
*/
WebDoc doc = null;
if (ws.curTab.isSingleRow())
doc = getSR_Form (request.getRequestURI(), wsc, ws);
else
doc = getMR_Form (request.getRequestURI(), wsc, ws);
// fini
log.fine("Fini");
// log.trace(log.l6_Database, doc.toString());
WebUtil.createResponse (request, response, this, null, doc, true);
log.fine("Closed");
} // doGet
/**************************************************************************
* Process the HTTP Post request
*
* @param request request
* @param response response
* @throws ServletException
* @throws IOException
*/
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException
{
WebEnv.dump(request);
// Get Session Info
WebSessionCtx wsc = WebSessionCtx.get(request);
WWindowStatus ws = WWindowStatus.get(request);
if (wsc == null || ws == null)
{
if (wsc == null)
WebUtil.createTimeoutPage(request, response, this, "No Context");
else
doGet(request, response);
return;
}
// Get Parameter: Command
String p_cmd = WebUtil.getParameter (request, P_Command);
String column = WebUtil.getParameter (request, P_ChangedColumn);
log.info("Cmd=" + p_cmd + " - ChangedColumn=" + column);
// Changed Column
if (column != null && column.length() > 0)
{
updateFields(request, wsc, ws);
}
else // Exit & Commands
{
if (p_cmd.equals("Exit"))
{
MSession cSession = MSession.get(wsc.ctx, false);
if (cSession != null)
cSession.logout();
WebUtil.createLoginPage(request, response, this, ws.ctx, "Exit");
return;
}
executeCommand(request, p_cmd, wsc, ws);
}
/**************************************************
* Build Page
*/
WebDoc doc = null;
// Create Simgle/Multi Row
if (ws.curTab.isSingleRow())
doc = getSR_Form (request.getRequestURI(), wsc, ws);
else
doc = getMR_Form (request.getRequestURI(), wsc, ws);
//
log.fine("Fini");
// log.trace(log.l6_Database, doc.toString());
WebUtil.createResponse (request, response, this, null, doc, true);
log.fine("Closed");
} // doPost
/**************************************************************************
* Execute Command.
*
* @param request request
* @param p_cmd command
* @param wsc session context
* @param ws window status
*/
private void executeCommand (HttpServletRequest request,
String p_cmd, WebSessionCtx wsc, WWindowStatus ws)
{
// Get Parameter: Command and Tab changes
String p_tab = WebUtil.getParameter (request, P_Tab);
String p_row = WebUtil.getParameter (request, P_MR_RowNo); // MR Row Command
log.config(p_cmd + " - Tab=" + p_tab + " - Row=" + p_row);
/**
* Multi-Row Selection (i.e. display single row)
*/
if (p_row != null && p_row.length() > 0)
{
try
{
int newRowNo = Integer.parseInt (p_row);
ws.curTab.navigate(newRowNo);
ws.curTab.setSingleRow(true);
}
catch (Exception e)
{
log.log(Level.SEVERE, "Parse RowNo="+ p_row, e);
}
}
/**
* Tab Change
*/
else if (p_tab != null && p_tab.length() > 0)
{
int newTabNo = 0;
try
{
newTabNo = Integer.parseInt (p_tab);
}
catch (Exception e)
{
log.log(Level.SEVERE, "Parse TabNo="+ p_tab, e);
}
// move to detail
if (newTabNo > ws.curTab.getTabNo())
{
ws.curTab = ws.mWindow.getTab(newTabNo);
ws.curTab.query(false);
ws.curTab.navigate(0);
}
// move back
else if (newTabNo < ws.curTab.getTabNo())
{
ws.curTab = ws.mWindow.getTab(newTabNo);
ws.curTab.dataRefresh();
}
}
/**
* Multi-Row Toggle
*/
else if (p_cmd.equals("Multi"))
{
boolean single = ws.curTab.isSingleRow();
ws.curTab.setSingleRow(!single);
if (single)
ws.curTab.navigate(0);
}
/**
* Position Commands
*/
else if (p_cmd.equals("First"))
{
ws.curTab.navigate(0);
}
else if (p_cmd.equals("Next"))
{
ws.curTab.navigateRelative(+1); // multi row is positioned at last displayed row
}
else if (p_cmd.equals("Previous"))
{
int rows = ws.curTab.isSingleRow() ? -1 : -2*MAX_LINES;
ws.curTab.navigateRelative(rows);
}
else if (p_cmd.equals("Last"))
{
ws.curTab.navigateRelative(999999);
}
/**
* Find
*/
else if (p_cmd.equals("Find"))
{
/** @todo Find */
}
/**
* Refresh
*/
else if (p_cmd.equals("Refresh"))
{
ws.curTab.dataRefreshAll();
}
/**
* Attachment
*/
else if (p_cmd.equals("Attachment"))
{
/** @todo Attachment */
}
/**
* History
*/
else if (p_cmd.equals("History"))
{
if (ws.mWindow.isTransaction() && ws.curTab.getWindowNo() == 0)
{
ws.curTab.query( !ws.curTab.isOnlyCurrentRows() );
ws.curTab.navigate(0);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -