Olá @amendes!
Seja bem vindo à comunidade!
É possível implementar uma solução envolvendo Javascript no Formulário.
No exemplo que vou apresentar a seguir, tenho um Formulário com seguinte estrutura.
Com a estrutura a cima estabelecida, adicionei um arquivo na seção “Arquivos Javascript” do Formulário, contendo o seguinte código:
(function () {
// Essa função é executada assim logo após a criação do Form
function onFormCreated(args) {
// Busca as configurações das variáveis chamadas "allowLowerCase", "allowMultipleSpaces", "allowDiacritics"
var options = {
allowLowerCase: args.form.getVariableValue('allowLowerCase') != 0,
allowMultipleSpaces: args.form.getVariableValue('allowMultipleSpaces') != 0,
allowDiacritics: args.form.getVariableValue('allowDiacritics') != 0
}
// Procura o elemento "textarea" do campo do tipo TextBox chamado "CampoTexto"
var input = document.querySelector('#' + args.form.fields['CampoTexto'].wrapperClientId + ' textarea');
// Configura o elemento textarea
if (input) configureInputBehaviour(input, options);
}
// Essa função faz a configuração dos de um campo
function configureInputBehaviour(input, options) {
if (options == undefined || options == null)
throw 'Nenhuma opcao foi definida';
if (options.allowLowerCase === false) input.setAttribute('data-lowercase', 'deny');
if (options.allowMultipleSpaces === false) input.setAttribute('data-multiplespaces', 'deny');
if (options.allowDiacritics === false) input.setAttribute('data-diacritics', 'deny');
// Primeiro remove o listener (caso esteja reconfigurando um campo)
//input.removeEventListener('keyup', onTextChanged);
input.removeEventListener('change', onTextChanged);
// Adiciona os listeners
input.addEventListener('change', onTextChanged);
}
function onTextChanged(ev) {
// Obtem as configuracoes do campo dos atributos do elemento
var options = {
allowLowerCase: ev.currentTarget.getAttribute('data-lowercase') !== 'deny',
allowMultipleSpaces: ev.currentTarget.getAttribute('data-multiplespaces') !== 'deny',
allowDiacritics: ev.currentTarget.getAttribute('data-diacritics') !== 'deny'
};
// Se nenhum restricao foi definida, pode sair
if (options.allowLowerCase && options.allowMultipleSpaces && options.allowDiacritics)
return;
// Remove o listener do evento para evitar que entre Loop ao substituir o texto
ev.currentTarget.removeEventListener('change', onTextChanged);
var text = ev.currentTarget.value;
var textPosition = ev.currentTarget.selectionStart;
// Converte para maiusculo
if (!options.allowLowerCase)
text = text.toUpperCase();
// Percorre cada uma das linhas do texto para remover os espaços duplicados
// e caracteres especiais, preservando as quebras de linha
if (!options.allowMultipleSpaces || !options.allowDiacritics) {
var textLines = text.split('\n');
for (var n = 0; n < textLines.length; n++) {
// Substitui mais de um espaço por apenas um
if (!options.allowMultipleSpaces)
textLines[n] = textLines[n].replace(/\s{2,}/g, ' ');
// Remove acentos: https://stackoverflow.com/questions/990904/remove-accents-diacritics-in-a-string-in-javascript
if (!options.allowDiacritics)
textLines[n] = textLines[n].normalize('NFD').replace(/\p{Diacritic}/gu, '');
}
text = textLines.join('\r\n');
}
// Ajusta posição do cursor, evitando que fique maior que o tamanho do texto.
textPosition = Math.min(textPosition, text.length);
// Passa o texto processado e a posição do cursor para o campo
ev.currentTarget.value = text;
ev.currentTarget.selectionStart = textPosition;
ev.currentTarget.selectionEnd = textPosition;
// Adiciona o listener do evento
ev.currentTarget.addEventListener('change', onTextChanged);
}
// Adiciona Callbacks no Formulário
latromi.formManager.setOnFormCreatedCallback(onFormCreated);
})();
Este código substitui os caracteres (conforme a configuração) quando o evento change for disparado, que no caso do preenchimento pelo usuário, seria logo após o campo perder o foco.
Por fim, basta preencher as variáveis no evento Load do Formulário com valores 0
ou 1
.