Como mostrar apenas um subconjunto de uma tabela
-
27-10-2019 - |
Pergunta
Estou tendo problemas para preencher uma tabela de dados com os dados corretos.
Tenho uma tabela de dados que estou usando em um formulário. É denominado userConfigProfiles. Ele tem 2 colunas FK groupId (isso se junta a UserGroupInfo) e corpProfileId (isso se junta a uma tabela que eu criei). Esses dados em userConfigProfiles são preenchidos a partir de outro formulário e atualmente são preenchidos de forma adequada.
O problema é que preciso criar um menu suspenso no formulário SalesTable que mostra um subconjunto das linhas em userConfigProfiles com base nos grupos de usuários em que o usuário atual está.
Tentei fazer isso adicionando o código abaixo à tabela, userConfigProfiles no formulário SalesTable:
public void init()
{
userConfigProfiles.data(userConfigProfiles::find());
super();
}
Então, adicionei este método find à própria tabela:
static public userConfigProfiles find()
{
userConfigProfiles userProfile;
UserGroupList userGroupList;
str 8 u = curUserId();
select *
from userProfile
order by userProfile.bdcProfileId
join userGroupList
where userProfile.groupId == userGroupList.groupId
&& userGroupList.userId == u;
return userProfile;
}
No entanto, parece que, embora meu método find seja chamado e retorne os dados corretos, ele não está afetando os dados que vão para a lista suspensa em meu formulário.
Minha lista suspensa é um campo StringEdit com um DataSource de userConfigProfiles e um DataField de corpProfileId.
Tenho certeza de que existem várias maneiras de resolver meu problema e estou aberto a qualquer uma delas, mesmo que isso signifique remover todo o meu código e fazer a caixa suspensa de maneira completamente diferente.
Solução
Crie uma consulta usando a tabela UserConfigProfiles
com uma junção exist (propriedade joinMode
) para a tabela UserGroupList
, use a relação apropriada e, em seguida, adicione um intervalo no campo UserId
com um value
de (currentUserId())
.
Este valor é uma expressão de consulta que é fornecida pela classe SysQueryRangeUtil .
Finalmente crie uma pesquisa usando a classe SysTableLookup usando sua consulta.
Outras dicas
De longe, o melhor tutorial sobre métodos de pesquisa é o de Vanya:
http://kashperuk.blogspot.com/04/2009 / lookup-methods-tutorial-custom-list.html
Baixe seu tutorial XPO e use uma de suas opções para o seu formulário.Seu código parece um pouco com um trabalho de hack.
Se você estiver tentando exibir um subconjunto de registros na tabela, deverá modificar a consulta (), mas se estiver tentando alterar os valores exibidos em uma pesquisa, eu verificaria sua postagem no blog.