Visão Geral
Neste tópico vamos descobrir como carregar o último valor informado em cada campo pelo usuário, para facilitar por exemplo, o preenchimento de campos de filtros e parâmetros.
Estrutura do Formulário
Para desenvolver o Formulário, vamos precisar apenas de uma variável chamada “autoCompleteFields” e de um arquivo Javascript, adicionado na seção “Arquivos Javascript”.
Variáveis
-
A variável autoCompleteKey é a chave identificadora do conjunto de campo/valor. Se nenhum valor for especificado nesta variável, o Cód. de Atualização do Formulário será utilizado como identificador, fazendo com que cada Formário tenha seu próprio conjunto de campo/valor. Use essa variável para ter mais controle sobre qual conjunto de campo/valor será usado.
-
A variável autoCompleteFields precisa receber o nome de todos os campos que vão ser tratados pela rotina de autocompletar. Use
,
(vírgula) para separar o nome dos campos.
Arquivo Javascript
Adicione o código a seguir na seção de Arquivo Javascripts do Formulário. Este código vai preencher os campos logo que o Formulário for carregado e vai armazenar o valor dos campos sempre que um evento for disparado, levando em consideração o nome dos campos informados na variável “autoCompleteFields”.
const formState = (function () {
const _storageKeyPrefix = 'la_fieldstate:';
let _storageKey;
let _storageKeyPrev;
// A variável "autoCompleteFields" recebe o nome dos campos que serão tratados
// na rotina de autocompletar, separados por "," (vírgula)
let _autoCompleteFields;
let _autoCompleteFieldsPrev;
// Adiciona Callbacks no Formulário
latromi.formManager.setOnFormCreatedCallback(onFormCreated);
latromi.formManager.setOnEventFiringCallback(onEventFiring);
latromi.formManager.setOnFieldValueChangedCallback(onFieldValueChanged);
// Ocorre logo após o form ser inicializado
function onFormCreated(ev) {
// O Valor da variável do Formulário "autoCompleteKey" pode ser
// usada como identificador do conjunto. Se nenhum valor for especificado,
// a chave será o Código de Atualização do Formulário.
_storageKey = ev.form.getVariableValue('autoCompleteKey');
//
if (_storageKey === null || _storageKey === undefined || _storageKey === '')
_storageKey = ev.form.upgradeCode
// Alimenta a variável javascript com o valor da variável do Formulário.
_autoCompleteFields = ev.form.getVariableValue('autoCompleteFields');
// Carrega o valor dos campos
loadFieldsState(_storageKey, _autoCompleteFields);
}
// Ocorre quando um evento é disparado no Form
function onEventFiring(ev) {
// Armazena o valor dos campos
storeFieldsState(
_storageKeyPrev || _storageKey,
_autoCompleteFields || _autoCompleteFieldsPrev
);
}
// Ocorre quando o valor de um campo é alterado no Form
function onFieldValueChanged(ev) { }
function loadFieldsState(storageKey, fields) {
if (!fields) return;
if (!storageKey) {
console.error('Argument "storageKey" must be specified.');
return;
}
const form = latromi.formManager.getFormInstance();
const json = localStorage.getItem(_storageKeyPrefix + storageKey);
if (json && json.indexOf("{") === 0) {
const state = JSON.parse(json);
if (state) {
Object.keys(state).forEach(function (key) {
// Verifica se o campo está marcado para autocompletar
if (new RegExp('\\b' + key + '\\b').test(fields))
form.setFieldValue(key, state[key]);
});
}
}
_storageKeyPrev = storageKey;
_autoCompleteFieldsPrev = fields;
}
function storeFieldsState(storageKey, fields) {
if (!fields) return;
if (!storageKey) {
console.error('Argument "storageKey" must be specified.');
return;
}
const form = latromi.formManager.getFormInstance();
const state = {};
Object.keys(form.fields).forEach(function (key) {
// Verifica se o campo está marcado para autocompletar
if (new RegExp('\\b' + key + '\\b').test(fields))
state[key] = form.getFieldValue(key);
});
localStorage.setItem(_storageKeyPrefix + storageKey, JSON.stringify(state));
}
// Todas as funções acima são "privadas", e não podem ser chamadas externamente.
// As únicas funções que podem ser chamadas externamente são as que compões o resultado a seguir:
return {
load: function (options) {
if (!options) options = {};
if (!options.key) options.key = options.key = _autoCompleteFields;
if (!options.fields) options.fields = options.fields = _autoCompleteFields;
loadFieldsState(
options.key || _storageKeyPrev,
options.fields || _autoCompleteFields
);
},
store: function (options) {
if (!options) options = {};
if (!options.key) options.key = options.key = _autoCompleteFields;
if (!options.fields) options.fields = options.fields = _autoCompleteFields;
storeFieldsState(
options.key || _storageKeyPrev,
options.fields || _autoCompleteFields,
);
}
}
})();