[RESOLVIDO] Bloquear ícone (lapis) do grid para alteração

Tenho um grid de clientes e dependendo de um campos status preciso esconder ou bloquear o lapis de um determinado registro de clientes para não permitir alteração.

Já tentei no onRecord
sc_btn_display(“update”, “off”);
ou
sc_actionbar_hide(“update”);

Nenhum deles funcionou.

Já num botão “excluir” que criei funcionou
sc_btn_display(“excluir”, “off”);

Poderia até tirar a ligação entre aplicações que o “lapis” some, mas nesse caso o botão “Novo” tambem some.

Alguem para dar uma ajudinha?

Use a macro sc_apl_conf(“Aplicação”, “Propriedade”, “Valor”) na aplicação que chama essa tua grid (ex: menu) ai usa o parâmetro lig_edit off, daí vc cria um botão na barra de ação para poder editar e substituir a edição padrão, daí vc consegue validar sc_actionbar_hide

É possível fazer o que você deseja usando Javascript. Você deve habilitar o footer da sua consulta e inserir lá um método Javascript que analise as linhas da tabela e desative o lápis quando encontrar determinada condição no conteúdo daquela linha. Não sou nem de longe professor de Javascript, ainda assim vou te enviar o método que eu fiz para desabilitar o botão em uma consulta aqui em função do nome do cliente. No meu caso quero desabilitar quando o texto do campo cliente tiver a palavra ‘ALTECH’.
No método a seguir ‘css_invoicecliente_grid_line’ é a classe CSS que identifica meu campo de cliente.
O ‘children[0]’ deste campo é justamente o conteúdo do mesmo, no qual eu procuro o cliente ‘ALTECH’. O ‘parentElement.children[1]’ é o lápis. Que eu apago fazendo seu innerHTML = ‘’.

<script>
	let rr = document.getElementsByClassName('css_invoicecliente_grid_line');
	for(let i = 0; i < rr.length; i++){
		if (rr[i].children[0].innerHTML.includes('ALTECH')){
			rr[i].parentElement.children[1].innerHTML = "";	
		}
	}
</script>
1 Curtida

Adoraria enviar uma imagem do resultado mas o forum não está aceitando.

:thinking:

Rastrear elementos de uma página e conforme um determinado valor alterar um atributo?

Já vi soluções assim antes, e no meu ponto de visto, não vejo com bons olhos.

è muito mais limpo, mais prático, fazer isso pelo php no onrecord, adicionando ao uma campo virtual o lapis com link para app, do que esse rastreio em js.

Não quero polemitizar, mas realmente acho esse tipo de programação como uma má prática e exatamente o que não se deve fazer.

Ponto de vista apenas.

1 Curtida

Boa tarde, tente isso no onRecord e coloque dentro de um if() que julgue mais apropriado, sendo:

Para colorir a cor do fundo toda da grid e remover o checkbox da linha

onRecord: (Se tiver condicional, colocar dentro)

if ( minha_condicao ) {

	echo "
		<style>
			#SC_ancor$this->SC_seq_page {
				background-color: #D4EDDA;
			}
			#sc_open_line_SC_seq_page {
				display: none !important;
			}

			#NM_ck_run$this->SC_seq_page {
				display:none !important;
			}
		</style>
	";

}

Inspecione os nomes dos elementos na sua grid e vá ajustando ali dentro do até conseguir o que precisa.

1 Curtida

Resolvi da seguinte forma.

  • Apaguei a ligação do grid x form
  • Criei um novo botão no grid ligando o formulário em alteração.
  • Com esse novo botão, consigo fazer qualquer bloqueio e inclusive colocar um ícone de melhor aparência…
  • Tambem criei um botâo “Novo”, pois quando se tira a ligação grid x form ele some.

Grato a todos.

2 Curtidas

É o que foi sugerido e é o que é mais adequado a fazer no caso do seu problema.

2 Curtidas