📄 aenv.java
字号:
* @param AD_Table_ID
* @param Record_ID
*/
public static void zoom (int AD_Table_ID, int Record_ID)
{
String TableName = null;
int AD_Window_ID = 0;
int PO_Window_ID = 0;
String sql = "SELECT TableName, AD_Window_ID, PO_Window_ID FROM AD_Table WHERE AD_Table_ID=?";
try
{
PreparedStatement pstmt = DB.prepareStatement(sql, null);
pstmt.setInt(1, AD_Table_ID);
ResultSet rs = pstmt.executeQuery();
if (rs.next())
{
TableName = rs.getString(1);
AD_Window_ID = rs.getInt(2);
PO_Window_ID = rs.getInt(3);
}
rs.close();
pstmt.close();
}
catch (SQLException e)
{
log.log(Level.SEVERE, sql, e);
}
// Nothing to Zoom to
if (TableName == null || AD_Window_ID == 0)
return;
// PO Zoom ?
boolean isSOTrx = true;
if (PO_Window_ID != 0)
{
String whereClause = TableName + "_ID=" + Record_ID;
isSOTrx = DB.isSOTrx(TableName, whereClause);
if (!isSOTrx)
AD_Window_ID = PO_Window_ID;
}
log.config(TableName + " - Record_ID=" + Record_ID + " (IsSOTrx=" + isSOTrx + ")");
AWindow frame = new AWindow();
if (!frame.initWindow(AD_Window_ID, MQuery.getEqualQuery(TableName + "_ID", Record_ID)))
return;
AEnv.showCenterScreen(frame);
frame = null;
} // zoom
/**
* Zoom
* @param query query
*/
public static void zoom (MQuery query)
{
if (query == null || query.getTableName() == null || query.getTableName().length() == 0)
return;
String TableName = query.getTableName();
int AD_Window_ID = 0;
int PO_Window_ID = 0;
String sql = "SELECT AD_Window_ID, PO_Window_ID FROM AD_Table WHERE TableName=?";
try
{
PreparedStatement pstmt = DB.prepareStatement(sql, null);
pstmt.setString(1, TableName);
ResultSet rs = pstmt.executeQuery();
if (rs.next())
{
AD_Window_ID = rs.getInt(1);
PO_Window_ID = rs.getInt(2);
}
rs.close();
pstmt.close();
}
catch (SQLException e)
{
log.log(Level.SEVERE, sql, e);
}
// Nothing to Zoom to
if (AD_Window_ID == 0)
return;
// PO Zoom ?
boolean isSOTrx = true;
if (PO_Window_ID != 0)
{
isSOTrx = DB.isSOTrx(TableName, query.getWhereClause(false));
if (!isSOTrx)
AD_Window_ID = PO_Window_ID;
}
log.config(query + " (IsSOTrx=" + isSOTrx + ")");
AWindow frame = new AWindow();
if (!frame.initWindow(AD_Window_ID, query))
return;
AEnv.showCenterScreen(frame);
frame = null;
} // zoom
/**
* Exit System
* @param status System exit status (usually 0 for no error)
*/
public static void exit (int status)
{
if (s_server != null)
{
try
{
s_server.remove();
}
catch (Exception ex)
{
}
}
Env.exitEnv(status);
} // exit
/**
* Is Workflow Process view enabled.
* @return true if enabled
*/
public static boolean isWorkflowProcess ()
{
if (s_workflow == null)
{
s_workflow = Boolean.FALSE;
int AD_Table_ID = 645; // AD_WF_Process
if (MRole.getDefault().isTableAccess (AD_Table_ID, true)) // RO
s_workflow = Boolean.TRUE;
else
{
AD_Table_ID = 644; // AD_WF_Activity
if (MRole.getDefault().isTableAccess (AD_Table_ID, true)) // RO
s_workflow = Boolean.TRUE;
else
log.config(s_workflow.toString());
}
// Get Window
if (s_workflow.booleanValue())
{
s_workflow_Window_ID = DB.getSQLValue (null,
"SELECT AD_Window_ID FROM AD_Table WHERE AD_Table_ID=?", AD_Table_ID);
if (s_workflow_Window_ID == 0)
s_workflow_Window_ID = 297; // fallback HARDCODED
// s_workflow = Boolean.FALSE;
log.config(s_workflow + ", Window=" + s_workflow_Window_ID);
}
}
return s_workflow.booleanValue();
} // isWorkflowProcess
/**
* Start Workflow Process Window
* @param AD_Table_ID optional table
* @param Record_ID optional record
*/
public static void startWorkflowProcess (int AD_Table_ID, int Record_ID)
{
if (s_workflow_Window_ID == 0)
return;
//
MQuery query = null;
if (AD_Table_ID != 0 && Record_ID != 0)
{
query = new MQuery("AD_WF_Process");
query.addRestriction("AD_Table_ID", MQuery.EQUAL, AD_Table_ID);
query.addRestriction("Record_ID", MQuery.EQUAL, Record_ID);
}
//
AWindow frame = new AWindow();
if (!frame.initWindow(s_workflow_Window_ID, query))
return;
AEnv.showCenterScreen(frame);
frame = null;
} // startWorkflowProcess
/*************************************************************************/
/** Workflow Menu */
private static Boolean s_workflow = null;
/** Workflow Menu */
private static int s_workflow_Window_ID = 0;
/** Server Re-tries */
private static int s_serverTries = 0;
/** Server Session */
private static Server s_server = null;
/** Logger */
private static CLogger log = CLogger.getCLogger(AEnv.class);
/**
* Is AppsServer Active ?
* @return true if active
*/
public static boolean isServerActive()
{
boolean contactAgain = s_server == null && s_serverTries == 0;
boolean ok = CConnection.get().isAppsServerOK(contactAgain);
if (ok)
{
s_serverTries = 0;
return true;
}
if (s_serverTries > 1) // try twice
return false;
// Try to connect
CLogMgt.enable(false);
try
{
s_serverTries++;
log.config("try #" + s_serverTries);
ok = CConnection.get().isAppsServerOK(true);
if (ok)
s_serverTries = 0;
}
catch (Exception ex)
{
ok = false;
s_server = null;
}
CLogMgt.enable(true);
//
return ok;
} // isServerActive
/**
* Get Server Version
* @return Apps Server Version
* @see ALogin#checkVersion
*/
public static String getServerVersion ()
{
return CConnection.get().getServerVersion();
} // getServerVersion
/** Window Cache */
private static CCache<Integer,MWindowVO> s_windows
= new CCache<Integer,MWindowVO>("AD_Window", 10);
/**
* Get Window Model
*
* @param WindowNo Window No
* @param AD_Window_ID window
* @param AD_Menu_ID menu
* @return Model Window Value Obkect
*/
public static MWindowVO getMWindowVO (int WindowNo, int AD_Window_ID, int AD_Menu_ID)
{
log.config("Window=" + WindowNo + ", AD_Window_ID=" + AD_Window_ID);
MWindowVO mWindowVO = null;
if (AD_Window_ID != 0 && Ini.isCacheWindow()) // try cache
{
mWindowVO = s_windows.get(AD_Window_ID);
if (mWindowVO != null)
{
mWindowVO = mWindowVO.clone(WindowNo);
log.info("Cached=" + mWindowVO);
}
}
// try to get from Server when enabled
if (mWindowVO == null && DB.isRemoteObjects() && isServerActive())
{
log.config("trying server");
try
{
s_server = CConnection.get().getServer();
if (s_server != null)
{
mWindowVO = s_server.getWindowVO(Env.getCtx(), WindowNo, AD_Window_ID, AD_Menu_ID);
log.config("from Server: success");
}
}
catch (RemoteException e)
{
log.log(Level.SEVERE, "(RE)", e);
mWindowVO = null;
s_server = null;
}
catch (Exception e)
{
Throwable tt = e.getCause();
if (tt != null && tt instanceof InvalidClassException)
log.log(Level.SEVERE, "(Server<>Client class) " + tt);
else if (tt != null && tt instanceof NotSerializableException)
log.log(Level.SEVERE, "Serialization: " + tt.getMessage(), e);
else
log.log(Level.SEVERE, "ex", e);
mWindowVO = null;
s_server = null;
}
catch (Throwable t)
{
log.log(Level.SEVERE, t.toString());
mWindowVO = null;
s_server = null;
}
if (mWindowVO != null)
s_windows.put(AD_Window_ID, mWindowVO);
} // from Server
// Create Window Model on Client
if (mWindowVO == null)
{
log.config("create local");
mWindowVO = MWindowVO.create (Env.getCtx(), WindowNo, AD_Window_ID, AD_Menu_ID);
if (mWindowVO != null)
s_windows.put(AD_Window_ID, mWindowVO);
} // from Client
if (mWindowVO == null)
return null;
// Check (remote) context
if (!mWindowVO.ctx.equals(Env.getCtx()))
{
// Remote Context is called by value, not reference
// Add Window properties to context
Enumeration keyEnum = mWindowVO.ctx.keys();
while (keyEnum.hasMoreElements())
{
String key = (String)keyEnum.nextElement();
if (key.startsWith(WindowNo+"|"))
{
String value = mWindowVO.ctx.getProperty (key);
Env.setContext(Env.getCtx(), key, value);
}
}
// Sync Context
mWindowVO.setCtx(Env.getCtx());
}
return mWindowVO;
} // getWindow
/**
* Post Immediate
* @param WindowNo window
* @param AD_Table_ID Table ID of Document
* @param AD_Client_ID Client ID of Document
* @param Record_ID Record ID of this document
* @param force force posting
* @return null if success, otherwise error
*/
public static String postImmediate (int WindowNo, int AD_Client_ID,
int AD_Table_ID, int Record_ID, boolean force)
{
log.config("Window=" + WindowNo
+ ", AD_Table_ID=" + AD_Table_ID + "/" + Record_ID
+ ", Force=" + force);
String error = null;
// try to get from Server when enabled
if (isServerActive())
{
log.config("trying server");
try
{
s_server = CConnection.get().getServer();
if (s_server != null)
{
error = s_server.postImmediate(Env.getCtx(), AD_Client_ID,
AD_Table_ID, Record_ID, force, null);
log.config("from Server: " + error== null ? "OK" : error);
}
else
{
ADialog.error(WindowNo, null, "NoAppsServer");
return "NoAppsServer";
}
}
catch (RemoteException e)
{
log.log(Level.SEVERE, "(RE)", e);
error = e.getMessage();
s_server = null;
}
catch (Exception e)
{
log.log(Level.SEVERE, "ex", e);
error = e.getMessage();
s_server = null;
}
}
else
{
ADialog.error(WindowNo, null, "NoAppsServer");
return "NoAppsServer";
}
return error;
} // postImmediate
/**
* Cache Reset
* @param tableName table name
* @param Record_ID record id
*/
public static void cacheReset (String tableName, int Record_ID)
{
log.config("TableName=" + tableName + ", Record_ID=" + Record_ID);
// try to get from Server when enabled
if (isServerActive())
{
log.config("trying server");
try
{
Server server = CConnection.get().getServer();
if (server != null)
{
server.cacheReset(tableName, Record_ID);
}
}
catch (RemoteException e)
{
log.log(Level.SEVERE, "(RE)", e);
s_server = null;
}
catch (Exception e)
{
log.log(Level.SEVERE, "ex", e);
s_server = null;
}
}
} // cacheReset
} // AEnv
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -