<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Ordenação de colunas que são FK&#x27;s nas grids dos sistemas.]]></title><description><![CDATA[<p dir="auto">Atualmente os sistemas GT, Akita, Ponto Enterprise e Ex possuem a situação onde em algumas ocasiões a ordenação de uma coluna da grid retorna apenas aqueles registros no qual o valor dessa coluna é "not null".</p>
<p dir="auto">Cenário do problema:</p>
<ul>
<li>coluna da grid é uma fk opcional;</li>
<li>getSortParam está implementado nessa coluna seguindo o contexto 'tabelaOrigem.campoExibidoNaColuna';</li>
<li>mapeamento da domainClass da grid tem associação direta com a domainClass que representa a fk. Ex: TipoPessoa tipoPessoa.</li>
</ul>
<p dir="auto">Notou-se que definir o atributo "tabelaOrigem" como "nullable: true" na domainClass, bem como o fetchMode("tabelaOrigem", FetchMode.JOIN) no getDefaultWhere não resolvem o problema. Durante a execução da consulta a claúsula SQL no console exibe o "inner join" na tabela que possui o campo sendo ordenado, mesmo que esta seja uma fk opcional. O correto nesse caso é "left join".</p>
<p dir="auto">Solução para este cenário:</p>
<ul>
<li>grids devem passar a utilizar views na listagem dos registros;</li>
<li>a domainClass mapeada dessa view deve conter os atributos necessários da fk como tipo primitivo. Exemplo: tabela X possui fk com TIPOS_PESSOAS. A view da tabela X exibe TIPOS_PESSOAS.TIPO_PESSOA e TIPOS_PESSOAS.DESCRICAO. A domainClass da view deve conter "Long tipoPessoa" e "String descricao" (atualmente é comum encontrar o formato "TipoPessoa tipoPessoa" e "String descricao").</li>
<li>getShowModel do controller.groovy utilizado pelo programa deve retornar o registro contendo esses atributos dentro do objeto "tabelaOrigem". Seguindo o exemplo anterior ficaria "tipoPessoa: [id: bean.codigoTipoPessoa, descricao: bean.descricao]".</li>
</ul>
<p dir="auto">Os dois ultimos itens da lista parecem controversos porem isso se dá pelo comportamento do extjs/ext-ui frente as grids/formulários.</p>
<p dir="auto">Na classe XXXXGrid.js da tela, é necessário que essas colunas estejam mapeadas como:<br />
{<br />
text : 'tipoPessoa',<br />
name: 'colunaTipoPessoaId',<br />
dataIndex : 'tipoPessoa',<br />
renderer: function(v){<br />
return v ? <a href="http://v.id" rel="nofollow ugc">v.id</a> : null;<br />
},<br />
locales : {<br />
"default" : "default.item.xxxx"<br />
},<br />
filter : "numeric"<br />
},{<br />
name: 'colunaDescrTipoPessoa',<br />
text : 'descrTipoPessoa',<br />
dataIndex : 'descricao',<br />
locales : {<br />
"default" : "default.item.xxxx"<br />
},<br />
filter : "string"<br />
}</p>
<p dir="auto">explicação dos itens acima:</p>
<p dir="auto"><strong>dataIndex</strong> - quando a grid renderiza o registro, procura no "record" o atributo com o nome definido nesta propriedade. Quando o usuário filtra a coluna, esse nome será passado ao controller para aplicação do filtro: eq("tipoPessoa", params.valorDoUsuario).<br />
<strong>renderer</strong> - o formulário dessa grid possui o tipoPessoa como lookup, nesse caso é necessário que o record possua esse atributo como tipo objeto contendo id e descricao (são os campos definidos na lookup). Esse tipo "objeto" é oriundo do getShowModel.</p>
<p dir="auto">Abaixo imagens que mostram o cenário atual.</p>
<p dir="auto">Antes da ordenação:<br />
<img src="/assets/uploads/files/1628022118031-antes-ordena%C3%A7%C3%A3o.png" alt="antes ordenação.PNG" class="img-responsive img-markdown" /><br />
Depois da ordenação:<br />
<img src="/assets/uploads/files/1628022123882-depois-ordena%C3%A7%C3%A3o.png" alt="depois ordenação.PNG" class="img-responsive img-markdown" /></p>
]]></description><link>http://insoft-docker1:4567/topic/24/ordenação-de-colunas-que-são-fk-s-nas-grids-dos-sistemas</link><generator>RSS for Node</generator><lastBuildDate>Fri, 23 Oct 2026 07:24:30 GMT</lastBuildDate><atom:link href="http://insoft-docker1:4567/topic/24.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 03 Aug 2021 20:23:49 GMT</pubDate><ttl>60</ttl></channel></rss>