📄 login.java
字号:
log.log(Level.SEVERE, "No Clients for Role: " + role.toStringX());
return null;
}
// Role Info
Env.setContext(m_ctx, "#AD_Role_ID", role.getKey());
Env.setContext(m_ctx, "#AD_Role_Name", role.getName());
Ini.setProperty(Ini.P_ROLE, role.getName());
// User Level
Env.setContext(m_ctx, "#User_Level", rs.getString(1)); // Format 'SCO'
// ConnectionProfile
CConnection cc = CConnection.get();
if (m_connectionProfile == null) // No User Based
{
m_connectionProfile = rs.getString(2); // Role Based
if (m_connectionProfile != null
&& !cc.getConnectionProfile().equals(m_connectionProfile))
{
cc.setConnectionProfile(m_connectionProfile);
Ini.setProperty(Ini.P_CONNECTION, cc.toStringLong());
Ini.saveProperties(false);
}
}
// load Clients
do
{
int AD_Client_ID = rs.getInt(3);
String Name = rs.getString(4);
KeyNamePair p = new KeyNamePair(AD_Client_ID, Name);
list.add(p);
}
while (rs.next());
rs.close();
pstmt.close();
pstmt = null;
//
retValue = new KeyNamePair[list.size()];
list.toArray(retValue);
log.fine("Role: " + role.toStringX() + " - clients #" + retValue.length);
}
catch (SQLException ex)
{
log.log(Level.SEVERE, sql, ex);
retValue = null;
}
try
{
if (pstmt != null)
pstmt.close();
pstmt = null;
}
catch (Exception e)
{
pstmt = null;
}
return retValue;
} // getClients
/**
* Load Organizations.
* <p>
* Sets Client info in context and loads its organization, the role has access to
* @param client client information
* @return list of valid Org KeyNodePairs or null if in error
*/
public KeyNamePair[] getOrgs (KeyNamePair client)
{
if (client == null)
throw new IllegalArgumentException("Client missing");
if (Env.getContext(m_ctx,"#AD_Role_ID").length() == 0) // could be number 0
throw new UnsupportedOperationException("Missing Context #AD_Role_ID");
int AD_Role_ID = Env.getContextAsInt(m_ctx,"#AD_Role_ID");
int AD_User_ID = Env.getContextAsInt(m_ctx, "#AD_User_ID");
// s_log.fine("Client: " + client.toStringX() + ", AD_Role_ID=" + AD_Role_ID);
// get Client details for role
ArrayList<KeyNamePair> list = new ArrayList<KeyNamePair>();
KeyNamePair[] retValue = null;
//
String sql = "SELECT o.AD_Org_ID,o.Name,o.IsSummary " // 1..3
+ "FROM AD_Role r, AD_Client c"
+ " INNER JOIN AD_Org o ON (c.AD_Client_ID=o.AD_Client_ID OR o.AD_Org_ID=0) "
+ "WHERE r.AD_Role_ID=?" // #1
+ " AND c.AD_Client_ID=?" // #2
+ " AND o.IsActive='Y'"
+ " AND (r.IsAccessAllOrgs='Y' "
+ "OR (r.IsUseUserOrgAccess='N' AND o.AD_Org_ID IN (SELECT AD_Org_ID FROM AD_Role_OrgAccess ra "
+ "WHERE ra.AD_Role_ID=r.AD_Role_ID AND ra.IsActive='Y')) "
+ "OR (r.IsUseUserOrgAccess='Y' AND o.AD_Org_ID IN (SELECT AD_Org_ID FROM AD_User_OrgAccess ua "
+ "WHERE ua.AD_User_ID=? AND ua.IsActive='Y'))" // #3
+ ") "
+ "ORDER BY o.Name";
//
PreparedStatement pstmt = null;
MRole role = null;
try
{
pstmt = DB.prepareStatement(sql, null);
pstmt.setInt(1, AD_Role_ID);
pstmt.setInt(2, client.getKey());
pstmt.setInt(3, AD_User_ID);
ResultSet rs = pstmt.executeQuery();
// load Orgs
while (rs.next())
{
int AD_Org_ID = rs.getInt(1);
String Name = rs.getString(2);
boolean summary = "Y".equals(rs.getString(3));
if (summary)
{
if (role == null)
role = MRole.get(m_ctx, AD_Role_ID);
getOrgsAddSummary (list, AD_Org_ID, Name, role);
}
else
{
KeyNamePair p = new KeyNamePair(AD_Org_ID, Name);
if (!list.contains(p))
list.add(p);
}
}
rs.close();
pstmt.close();
pstmt = null;
//
retValue = new KeyNamePair[list.size()];
list.toArray(retValue);
log.fine("Client: " + client.toStringX()
+ ", AD_Role_ID=" + AD_Role_ID
+ ", AD_User_ID=" + AD_User_ID
+ " - orgs #" + retValue.length);
}
catch (SQLException ex)
{
log.log(Level.SEVERE, sql, ex);
retValue = null;
}
try
{
if (pstmt != null)
pstmt.close();
pstmt = null;
}
catch (Exception e)
{
pstmt = null;
}
// No Orgs
if (retValue == null || retValue.length == 0)
{
log.log(Level.WARNING, "No Org for Client: " + client.toStringX()
+ ", AD_Role_ID=" + AD_Role_ID
+ ", AD_User_ID=" + AD_User_ID);
return null;
}
// Client Info
Env.setContext(m_ctx, "#AD_Client_ID", client.getKey());
Env.setContext(m_ctx, "#AD_Client_Name", client.getName());
Ini.setProperty(Ini.P_CLIENT, client.getName());
return retValue;
} // getOrgs
/**
* Get Orgs - Add Summary Org
* @param list list
* @param Summary_Org_ID summary org
* @param Summary_Name name
* @param role role
* @see org.compiere.model.MRole#loadOrgAccessAdd
*/
private void getOrgsAddSummary (ArrayList<KeyNamePair> list, int Summary_Org_ID,
String Summary_Name, MRole role)
{
if (role == null)
{
log.warning("Summary Org=" + Summary_Name + "(" + Summary_Org_ID + ") - No Role");
return;
}
// Do we look for trees?
if (role.getAD_Tree_Org_ID() == 0)
{
log.config("Summary Org=" + Summary_Name + "(" + Summary_Org_ID + ") - No Org Tree: " + role);
return;
}
// Summary Org - Get Dependents
MTree_Base tree = MTree_Base.get(m_ctx, role.getAD_Tree_Org_ID(), null);
String sql = "SELECT AD_Client_ID, AD_Org_ID, Name, IsSummary FROM AD_Org "
+ "WHERE IsActive='Y' AND AD_Org_ID IN (SELECT Node_ID FROM "
+ tree.getNodeTableName()
+ " WHERE AD_Tree_ID=? AND Parent_ID=? AND IsActive='Y') "
+ "ORDER BY Name";
PreparedStatement pstmt = null;
try
{
pstmt = DB.prepareStatement (sql, null);
pstmt.setInt (1, tree.getAD_Tree_ID());
pstmt.setInt (2, Summary_Org_ID);
ResultSet rs = pstmt.executeQuery ();
while (rs.next ())
{
int AD_Client_ID = rs.getInt(1);
int AD_Org_ID = rs.getInt(2);
String Name = rs.getString(3);
boolean summary = "Y".equals(rs.getString(4));
//
if (summary)
getOrgsAddSummary (list, AD_Org_ID, Name, role);
else
{
KeyNamePair p = new KeyNamePair(AD_Org_ID, Name);
if (!list.contains(p))
list.add(p);
}
}
rs.close ();
pstmt.close ();
pstmt = null;
}
catch (Exception e)
{
log.log (Level.SEVERE, sql, e);
}
try
{
if (pstmt != null)
pstmt.close ();
pstmt = null;
}
catch (Exception e)
{
pstmt = null;
}
} // getOrgAddSummary
/**
* Load Warehouses
* @param org organization
* @return Array of Warehouse Info
*/
public KeyNamePair[] getWarehouses (KeyNamePair org)
{
if (org == null)
throw new IllegalArgumentException("Org missing");
// s_log.info("loadWarehouses - Org: " + org.toStringX());
ArrayList<KeyNamePair> list = new ArrayList<KeyNamePair>();
KeyNamePair[] retValue = null;
String sql = "SELECT M_Warehouse_ID, Name FROM M_Warehouse "
+ "WHERE AD_Org_ID=? AND IsActive='Y' "
+ "ORDER BY Name";
PreparedStatement pstmt = null;
try
{
pstmt = DB.prepareStatement(sql, null);
pstmt.setInt(1, org.getKey());
ResultSet rs = pstmt.executeQuery();
if (!rs.next())
{
rs.close();
pstmt.close();
log.info("No Warehouses for Org: " + org.toStringX());
return null;
}
// load Warehousess
do
{
int AD_Warehouse_ID = rs.getInt(1);
String Name = rs.getString(2);
KeyNamePair p = new KeyNamePair(AD_Warehouse_ID, Name);
list.add(p);
}
while (rs.next());
rs.close();
pstmt.close();
pstmt = null;
//
retValue = new KeyNamePair[list.size()];
list.toArray(retValue);
log.fine("Org: " + org.toStringX()
+ " - warehouses #" + retValue.length);
}
catch (SQLException ex)
{
log.log(Level.SEVERE, "getWarehouses", ex);
retValue = null;
}
try
{
if (pstmt != null)
pstmt.close();
pstmt = null;
}
catch (Exception e)
{
pstmt = null;
}
return retValue;
} // getWarehouses
/**
* Validate Login
* @param org log-in org
* @return error message
*/
public String validateLogin (KeyNamePair org)
{
int AD_Client_ID = Env.getAD_Client_ID(m_ctx);
int AD_Org_ID = org.getKey();
int AD_Role_ID = Env.getAD_Role_ID(m_ctx);
int AD_User_ID = Env.getAD_User_ID(m_ctx);
String error = ModelValidationEngine.get().loginComplete(AD_Client_ID, AD_Org_ID, AD_Role_ID, AD_User_ID);
if (error != null && error.length() > 0)
{
log.severe("Refused: " + error);
return error;
}
return null;
} // validateLogin
/**
* Load Preferences into Context for selected client.
* <p>
* Sets Org info in context and loads relevant field from
* - AD_Client/Info,
* - C_AcctSchema,
* - C_AcctSchema_Elements
* - AD_Preference
* <p>
* Assumes that the context is set for #AD_Client_ID, #AD_User_ID, #AD_Role_ID
*
* @param org org information
* @param warehouse optional warehouse information
* @param timestamp optional date
* @param printerName optional printer info
* @return AD_Message of error (NoValidAcctInfo) or ""
*/
public String loadPreferences (KeyNamePair org,
KeyNamePair warehouse, java.sql.Timestamp timestamp, String printerName)
{
log.info("Org: " + org.toStringX());
if (m_ctx == null || org == null)
throw new IllegalArgumentException("Required parameter missing");
if (Env.getContext(m_ctx,"#AD_Client_ID").length() == 0)
throw new UnsupportedOperationException("Missing Comtext #AD_Client_ID");
if (Env.getContext(m_ctx,"#AD_User_ID").length() == 0)
throw new UnsupportedOperationException("Missing Comtext #AD_User_ID");
if (Env.getContext(m_ctx,"#AD_Role_ID").length() == 0)
throw new UnsupportedOperationException("Missing Comtext #AD_Role_ID");
// Org Info - assumes that it is valid
Env.setContext(m_ctx, "#AD_Org_ID", org.getKey());
Env.setContext(m_ctx, "#AD_Org_Name", org.getName());
Ini.setProperty(Ini.P_ORG, org.getName());
// Warehouse Info
if (warehouse != null)
{
Env.setContext(m_ctx, "#M_Warehouse_ID", warehouse.getKey());
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -