Olá @Anderson.Schneider!
Seja bem vindo à comunidade!
Que bom que conseguiu resolver o problema.
Vou mostrar uma outra solução, também usando JavaScript, partindo do cenário que você apresentou inicialmente.
A implementação consiste em disparar o evento Click de um botão oculto toda a vez que a célula for clicada, e passar por argumento o valor da célula.
Você pode encontrar um exemplo funcional neste link.
Siga os passos abaixo:
-
Nas Consultas, remova todos os links “simbólicos” e desabilite o realce de linha.
-
No Formulário, remova os eventos Rebinded e RowSelected das Consultas.
-
Adicione um botão oculto no Formulário com evento Click. Este evento será chamado sempre uma célula for clicada pelo usuário.
-
No procedimento vinculado ao evento Click do botão, adicione um argumento chamado “cellValue”. Neste argumento, será recebido o valor da célula clicada pelo usuário.
-
Adicione um arquivo JavaScript ao Formulário. Neste arquivo será adicionado todo o código que manipula o evento Click das células (ver código logo abaixo).
Código JavaScript
O código JavaScript abaixo deve ser adicionado no Formulário, conforme passo 5. Explicações sobre o funcionamento do mesmo estão nos comentários do código.
OBS.: Neste exemplo, a grid se chama “qryGridLetras” e o botão se chama “btnHiddenButton”.
// Adiciona callback para ser executado quando cada Grid for criada
// e quando elas sofrerem qualquer atualização.
latromi.gridManager.setOnCreateCallBack(configureGridCellClick);
latromi.gridManager.setOnAfterCommandCallBack(configureGridCellClick);
// Função que configura o evento Click nas células da Grid
function configureGridCellClick(arg) {
// Um pouco de código interno do Latromi....
let gridElement = document.getElementById(arg.clientID);
let consultaElement = gridElement.closest('.QueryObjectDisambig');
let consultaObject = $find(consultaElement.id);
let upgradeCode = consultaObject._upgradeCode;
// Filtre aqui, através do Código de Atualização,
// quais consultas devem adicionar o evento Click as celulas
if (['CST00000016600002420201014170222010305',
'CST...................................',
'CST...................................'
].indexOf(upgradeCode) === -1) {
return;
}
// Localiza o elemento correspondente ao campo do fomulário.
let fieldElement = gridElement.closest('.fieldWrapper').children[0];
// Percorre todas as células da Grid para manipular o evento Click.
let cells = gridElement.querySelectorAll('.rgRow td, .rgAltRow td');
cells.forEach(function(cell) {
cell.style.cursor = 'pointer';
cell.addEventListener('click', function(fieldClientId) {
return function(e) {
gridCellClick(e, fieldClientId);
}
} (fieldElement.id));
});
}
// Esta função será executada sempre que ocorrer o Click na célula da Grid.
function gridCellClick(event, fieldClientId) {
// Localiza os elementos TD e TR
let cell = event.target;
let row = cell.closest('.rgRow, .rgAltRow');
let form = latromi.formManager.getFormInstance();
let field;
let fieldNames = Object.keys(form.fields);
for(let n = 0; n < fieldNames.length; n++) {
if (form.fields[fieldNames[n]].clientId === fieldClientId) {
field = form.fields[fieldNames[n]];
}
}
if (!field) return;
// Aquie é usando um pouco de código interno do latromi para buscar os valores da linha clicada
let gridElement = document.querySelector('#' + field.clientId + ' .GridConsulta');
let gridObject = $find(gridElement.id);
//
let rowIndex = parseInt(row.getAttribute('data-rowindex'));
let rowValues = gridObject.getRowValues(rowIndex); // {col1: "A", col2: "F", col3: "K", col4: "P", col5: "U", col6: "Z"}
// Registra no console os valores da linha clicada
console.log(rowValues);
// Mostra mensagem com o valor da célula clicada, e outros valores da linha
//alert('Valor da célula: ' + cell.innerHTML + '\n' +
// 'Valores da linha: \n' + JSON.stringify(rowValues, null, 2));
// Dispara o evento "Click" de um botão que pode estar oculto
// ou nem ter sido adicionado ao layout do Formulário.
// Neste exemplo o nome do botão é "btnHiddenButton"
//
// O terceiro parâmetro da função "raiseFieldEvent" pode ser usado para passar qualquer valor.
// Estes valores podem ser capurados através de argumentos do procedimento, se forem usados os mesmos nomes.
form.raiseFieldEvent("btnHiddenButton", 'Click',
{
cellValue: cell.innerHTML,
segundoArgumento: 'Valor do argumento "segundoArgumento"',
terceiroArgumento: 'Valor do argumento "terceiroArgumento"'
});
}