Mudar propriedades em tempo de execução (Máscara DInamica)

Tem algumas propriedades de campos e formularios que o scriptcase só permite modificar no ambiente de desenvolvimento. Acho que seria interessante permitir esse tipo de facilidade em tempo de execução.

As propriedades são salvas nos fontes do SC para quando gerar a aplicação o HTML, CSS, JAVASCRIPT sejam gerados conforme as propriedades previamente definidas.

Quais propriedades, por exemplo, se refere?

Como assim trocar em tempo de execução (dinamicamente)? Porque um usuário final trocaria as propriedades de um campo em tempo de execução?

Só para entender?

Uma propriedade que acho que seria interessante seria a máscara por exemplo tem clientes que querem trabalhar com o sistema com 2,3,4 e 6 decimais e tem ainda sem casa decimais por exemplo criar no banco o campo com 6 casas decimais e criar um parâmetro para colocar a máscara e depois em tempo de execução reconfigurava as máscara de acordo com o parâmetro!

1 Curtida

Acho que toda propriedade deveria ser acessivel, tanto atraves do painel de configuracao quanto via codigo.

não sei se é o caso, se é o que precisa, mas de uma olhada na macro sc_trunc_num

https://www.scriptcase.com.br/docs/pt_br/v81/macros-scriptcase/macros-scriptcase#sc_trunc_num

Eu já faço isso dinamicamente.
Mas requer conhecimento mais avançado.

Haroldo,

Poderia me passar os caminho das pedras e tecnologias que você utilizou para estar mudando as máscaras em tempo de execução.

Haroldo,

Fiz esse rotina em javascript para poder mudar as máscaras em tempo de execução só que quando o comando é executado se o campo tiver evento ajax o mesmo perde o ajax do campo e como você disse que utiliza esse recurso veja a minha função e se puder de uma dica onde estou errando ou mostre o recurso que você utiliza.

	campo = 'valor_vendido';
	valor = '1.234,56';
	tamNovo = '12';
	decNovo = '5';
	meuValor = valor.toLocaleString('pt-BR', { minimumFractionDigits: decNovo,  maximumFractionDigits: decNovo});

	atributos = $('#id_sc_field_'+campo).attr('alt');
	
	posInicial = atributos.indexOf('maxLength')+11;
	posFinal = atributos.indexOf(', precision:');
	
	tamAnt = atributos.substring(posInicial, posFinal);

	posInicial = atributos.indexOf('precision')+11;
	posFinal = atributos.indexOf(', decimalSep:');
	decAnt = atributos.substring(posInicial, posFinal);

	atributos = atributos.replace('precision: '+decAnt,'precision: '+decNovo);
	atributos = atributos.replace('maxLength: '+tamAnt,'maxLength: '+tamNovo);

	$('#id_sc_field_'+campo).attr('alt', atributos);
	$('#id_sc_field_'+campo).unbind();
	var elemento = $('#id_sc_field_'+campo);
	elemento.val(meuValor);
	$.scInput.setInput(elemento);

Ná prática, de forma simples e funcional com menos riscos de dar problemas com novas versões do Scriptcase:

Javascript/Form/Onload:

$('#id_sc_field_valor').mask("#.##0,00", {reverse: true});

Javascript/Form/onSubmit:

let valor = $("#id_sc_field_valor").val();
$("#id_sc_field_valor").val(parseFloat(valor.replace(/[^0-9,]*/g, '').replace(',', '.')));

OnScriptInit:

echo <<<HTML
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery.mask/1.14.16/jquery.mask.min.js" integrity="sha512-pHVGpX7F/27yZ0ISY+VVjyULApbDlD0/X0rgGbTqCE7WFW5MezNTWG/dnhtbBuICzsd0WQPgpE4REBLv+UqChw==" crossorigin="anonymous" referrerpolicy="no-referrer"></script>
HTML;

Evento ajax onchange campo Decimal:

if ({decimais}==0) {
	$mask = '#.##0';
}else{
	$mask = '#.##0,'.str_pad($input, {decimais}, "0", STR_PAD_RIGHT);
}

sc_ajax_javascript("$('#id_sc_field_valor').mask",[$mask,'{reverse: true}']);
{valor} = '';
sc_set_focus('valor');

onValidade:

echo 'Valor:',{valor};

Observação:

Se for usar o campo para cálculos em eventos ajax deve remover a mascará e convertê-lo para float.
Para Valor use campo scriptcase do tipo texto e deixe aceitar todos caracteres, assim o SC não aplica javscript ao campo, evitando conflitos e o mask do jquery já trata seu conteúto.

TAGS: HAROLDO, MASCÁRA, DINAMICA, JQUERY, JAVASCRIPT

Obrigado grande Haroldo!

Eu já tinha conseguido fazer o meu código funcionar retirando essa linha.

image

Mas vou utilizar a sua sugestão para ver se consigo adaptar as minhas necessidades.