boa tarde,
Estava tentando um cadastro quando me deparei com a seguinte situação.
Tenho uma tela de cadastro com 2 Tabs linkadas.
A coluna chave da primeira tab chama-se Tabela_ID.
A coluna a ser linkada na segunda tab chama-se TabelaFilha_ID.
O problema concentra-se em ao tentar buscar o valor para montar o where na tab1 ele procura a coluna TabelaFilha_ID especificamente.
Vi 3 alternativas:
- colo mais uma coluna no dicionario do Adempiere para representar a colunas da tab1 a ser linkada
- faço um select na tabela da tab1 para encontrar o nome da coluna chave e pegar seu valor.
- implemento o where qualificado. (O problema é colocar todas as questões referentes a permissao estaticamente.).
A principio implementei a segunda alternativa:
Classe: GridTab
Metodo: public void query (boolean onlyCurrentRows, int onlyCurrentDays, int maxRows)…
Antes +-Linha 574:
String value = Env.getContext(m_vo.ctx, m_vo.WindowNo, lc);
Depois:
String value = Env.getContext(m_vo.ctx, m_vo.WindowNo, lc);
if( value.equals("") ) {
lc = getLinkColumnNameTo();
value = Env.getContext(m_vo.ctx, m_vo.WindowNo, lc);
}
Adicionei o seguint metodo:
public String getLinkColumnNameTo() {
StringBuilder sb = new StringBuilder();
sb.append("SELECT ");
sb.append("col.columnname ");
sb.append("FROM ad_column col ");
sb.append("where ad_table_id = ");
sb.append("( ");
sb.append(" select ");
sb.append(" t1.ad_table_id ");
sb.append(" from ad_tab t1 ");
sb.append(" where t1.ad_tab_id= ");
sb.append(" ( ");
sb.append(" select ");
sb.append(" ad_tab_id ");
sb.append(" from ad_tab ");
sb.append(" where ad_window_id=? ");
sb.append(" and seqno < (select max(t3.seqno) from ad_tab t3 where t3.ad_tab_id=?) ");
sb.append(" and tablevel < ");
sb.append(" ( ");
sb.append(" select ");
sb.append(" max(t3.tablevel) ");
sb.append(" from ad_tab t3 ");
sb.append(" where t3.ad_tab_id=? ");
sb.append(" ) ");
sb.append(" ) ");
sb.append(") ");
sb.append("and col.iskey='Y' ");
String columnLinked = null;
try
{
PreparedStatement pstmt = DB.prepareStatement(sb.toString(), null);
pstmt.setInt(1, m_vo.AD_Window_ID);
pstmt.setInt(2, m_vo.AD_Tab_ID);
pstmt.setInt(3, m_vo.AD_Tab_ID);
ResultSet rs = pstmt.executeQuery();
if (rs.next())
columnLinked = rs.getString(1);
rs.close();
pstmt.close();
}
catch (SQLException e)
{
log.log(Level.SEVERE, "Problema ao recuperar a column link da tab", e);
}
return columnLinked;
}
O que vcs acham? Tem algum outra forma de linkar a tab sem reescrever todo o where?