...
Nota |
---|
|
Mesmo utilizando a função setEnable, ainda existe a possibilidade de algum usuário conseguir visualizar informações do campo formulário oculto, utilizando de recursos como a ferramenta de inspeção de código dos navegadores. |
...
...
utilizar o evento enableFields para proteger os campos, é adicionado o caractere underline (_) nas propriedade name e id. Com isso as manipulações via JavaScript puro ou pela biblioteca jQuery não terão efeitos, devido a alteração destas propriedades: Exemplo enableFields.js:
|
Bloco de código |
---|
|
function if ( form.getFormMode() != 'ADD' ){
parseInt(getValue('WKNumState'));
if(atividade == 0 || atividade == 4){
form.setEnabled( | "rnc_cod_ocorrencia",false, true'loginsolicitante', false);
}
| } |
Também é possível utilizar o método setEnhancedSecurityHiddenInputs, que faz com que todos os campos desabilitados pelo método setEnabled fiquem protegidos:
Bloco de código |
---|
|
function enableFields(form) {
if ( form.getFormMode() != 'ADD' ){
form.setEnhancedSecurityHiddenInputs(true);
form.setEnabled("rnc_cod_ocorrencia",
if(atividade == 5){
form.setEnabled('nomesolicitante', false);
}
} |
|
noteHTML: |
|
O método setEnhancedSecurityHiddenInputs só protegerá campos desabilitados após a sua execução no evento e quando o formulário estiver no contexto de uma execução de processo. |
inputFields
Esse evento é disparado no momento em que os dados do formulário são passados para a BO responsável por formulário do fluig. O evento recebe como parâmetro uma referência ao formulário da definição de formulário.
Bloco de código |
---|
<div class="panel-body">
<div class="row inicial" id="inicialRow0">
<div class="col-xs-12 col-md-2 col-sm-12 col-lg-2">
<div class="form-group">
<label class="control-label" for="loginsolicitante">Login</label>
<input type="text" class="form-control" name="loginsolicitante" id="loginsolicitante" value="adm"/>
</div>
</div>
<div class="col-xs-12 col-md-4 col-sm-12 col-lg-4">
<div class="form-group">
<label class="control-label" for="nomesolicitante">Solicitante</label>
<input type="text" class="form-control" name="nomesolicitante" id="nomesolicitante" value="Administrador"/>
</div>
</div>
</div>
</div> |
Resultado no navegador/console, onde o campo loginsolicitante agora é _loginsolicitante e o campo nomesolicitante permanece igual, pois a lógica implementada indica que será bloqueado na próxima movimentação: Image Added |
Protegendo campos desabilitados
Ao proteger um campo desabilitado, ele não terá o seu valor alterado no registro de formulário. Para isso, informe o valor true para o parâmetro protect do método setEnabled conforme o exemplo abaixo:
Bloco de código |
---|
|
function enableFields(form) {
if ( form.getFormMode() != 'ADD' ){
form.setEnabled("rnc_cod_ocorrencia",false, true);
}
} |
Também é possível utilizar o método setEnhancedSecurityHiddenInputs, que faz com que todos os campos desabilitados pelo método setEnabled fiquem protegidos:
Bloco de código |
---|
|
function enableFields(form) {
if ( form.getFormMode() != 'ADD' ){
form.setEnhancedSecurityHiddenInputs(true);
form.setEnabled("rnc_cod_ocorrencia",false);
}
} |
Nota |
---|
|
O método setEnhancedSecurityHiddenInputs só protegerá campos desabilitados após a sua execução no evento e quando o formulário estiver no contexto de uma execução de processo. |
inputFields
...
Esse evento é disparado no momento em que os dados do formulário são passados para a BO responsável por formulário do fluig. O evento recebe como parâmetro uma referência ao formulário da definição de formulário.
Exemplo:
Bloco de código |
---|
|
function inputFields(form){
} |
Nota |
---|
|
O evento inputFields não foi criado para ser utilizado na "Movimentação em Bloco", seu foco é o tratamento de campos que vem do navegador. Esse evento é disparado no momento em que os dados do formulário são passados para a BO responsável por formulário do fluig. O evento recebe como parâmetro um objeto do tipo FormController. Este evento pode ser usado para que as datas persistidas por formulários customizados sejam salvas corretamente. Hoje no sistema as datas salvas através de formulários pelo navegador Chrome tem o padrão americano (yyyy-mm-dd), enquanto as datas nos demais navegadores tem o padrão brasileiro (dd/mm/yyyy). Para empresas que utilizam múltiplos navegadores e querem que os dados de data estejam padronizados, recomendamos a utilização do evento inputFields com o seguinte trecho de código. Bloco de código |
---|
language | js |
---|
title | Código para Datas |
---|
| function inputFields(form) {
var regEx = /^\d{4}-\d{2}-\d{2}$/;
if (form.getValue("dt_solicitacao").match(regEx)) {
var split = form.getValue("dt_solicitacao").split('-');
form.setValue("dt_solicitacao", split[2] + '-' + split[1] + '-' + split[0]);
}
} |
|
validateForm
...
Esse evento é disparado antes da gravação dos dados do formulário. O evento recebe como parâmetro um objeto do tipo FormController.
Ele é utilizado para fazer validações nos campos.
Bloco de código |
---|
language | js |
---|
title | Exemplo da validação do campo de formulário |
---|
linenumbers | true |
---|
|
function validateForm(form) {
if (form.getValue('RNC_colab_abertura') == null){
throw "O colaborador de abertura não foi informado";
}
} |
Bloco de código |
---|
language | js |
---|
title | Exemplo da validação do campo de formulário com mensagem com quebra de linha |
---|
linenumbers | true |
---|
|
function validateForm(form) {
if (form.getValue('RNC_colab_abertura') == null){
throw "O colaborador de abertura não foi informado\nFavor preencher o campo e tentar novamente";
}
} |
afterSaveNew
...
Esse evento é disparado após a criação de um formulário. O evento recebe como parâmetro um objeto do tipo FormController.
Este evento pode ser feito para criar algum tipo de log ou disparar algum eventoExemplo:
Bloco de código |
---|
language | js |
---|
title | Exemplo de uso para imprimir log |
---|
linenumbers | true |
---|
|
function inputFieldsafterSaveNew(form){
} |
Nota |
---|
|
O evento inputFields não foi criado para ser utilizado na "Movimentação em Bloco", seu foco é o tratamento de campos que vem do navegador.
Esse evento é disparado no momento em que os dados do formulário são passados para a BO responsável por formulário do fluig {
log.info("Colaborador de abertura: " + form.getValue("RNC_colab_abertura"));
} |
afterProcessing
...
Este é último evento disparado no formulário. O evento recebe como parâmetro um objeto do tipo FormController.
...
Neste contexto, o FormControler deve ser usado apenas para consulta de dados, alterações nos dados não serão persistidas. Assim como o afterSaveNew pode ser usado para
...
log ou disparo de algum tipo de evento.
Bloco de código |
---|
|
function afterProcessing(form){
} |
beforeMovementOptions
...
Diferentemente dos outros eventos que precisam de um script próprio e são executados no servidor, este evento acontece ao clicar em "enviar" no navegador antes de abrir a tela de movimentação. Por isso, esse código deve ser implementado em um arquivo javascript vinculado ao formulário html. Ele recebe o parâmetro da atividade atual e é muito útil para algumas validações de campos antes mesmo de ser enviado para o servidor.
Bloco de código |
---|
language | js |
---|
title | Exemplo de implementação em um arquivo.js |
---|
linenumbers | true |
---|
|
var beforeMovementOptions = function(numState | Código para Datas | function inputFields(form) {
var regExif (document.form.codigo.value =
/^\d{4}-\d{2}-\d{2}$/;
= '') {
ifthrow (
form.getValue("dt_solicitacao").match(regEx)) { "Erro: O código não foi preenchido");
}
varreturn
splittrue;
= form.getValue("dt_solicitacao").split('-');
form.setValue("dt_solicitacao", split[2] + '-' + split[1] + '-' + split[0]);
}
}
validateForm
Esse evento é disparado antes da gravação dos dados do formulário. O evento recebe como parâmetro um objeto do tipo FormController.
Nota |
---|
|
Este método só é executado caso haja a abertura da tela de movimentação, o que leva em consideração se há mais de uma atividade destino ou o mecanismo de atribuição da próxima tarefa. E também não é considerada em movimentações via api, ou diretamente no formulário pela navegação de documento. Utilize o validateForm em conjunto com esse método para garantir a integridade das validações |
beforeSendValidate
...
Assim como beforeMovementOptions, este evento acontece ao clicar em "enviar" no navegador para executar a movimentação em si. Ou seja, depois do beforeMovementOptions e independente da tela de seleção de atividade/usuário destino.
Esse código deve ser implementado em um arquivo javascript vinculado ao formulário html. Ele recebe o parâmetro da atividade atual e da atividade destino (ou seja, pra qual atividade está sendo enviado essa solicitação) e é muito útil para algumas validações de campos antes mesmo de ser enviado para o servidor.
Ocorre antes da solicitação ser movimentada, após já ter sido selecionada a atividade destino o usuário e demais informações necessárias à solicitaçãoEle é utilizado para fazer validações nos campos.
Bloco de código |
---|
language | js |
---|
title | Exemplo da validação do campo de formuláriode implementação em um arquivo.js |
---|
linenumbers | true |
---|
|
var beforeSendValidate = function validateForm(form) {
if (form.getValue('RNC_colab_abertura') == null)(numState, nextState) {
if (numState == 1 && nextState == 2 && document.form.codigo.value == '') {
throw ("OErro: colaboradorPara demovimentar abertura não foi informado";
}
} |
Bloco de código |
---|
language | js |
---|
title | Exemplo da validação do campo de formulário com mensagem com quebra de linha |
---|
linenumbers | true |
---|
|
function validateForm(form) {
if (form.getValue('RNC_colab_abertura') == null){para a atividade 2, o código deve ser preenchido");
}
return throwtrue;
"O colaborador de abertura não foi informado\nFavor preencher o campo e tentar novamente";
}
} |
afterSaveNew
Esse evento é disparado após a criação de um formulário. O evento recebe como parâmetro um objeto do tipo FormController.
getAttachments
...
É uma função que retorna uma Promise com a lista dos anexos do formulário. Funciona de forma offline.
No exemplo abaixo foi utilizado um await para aguardar a lista dos arquivos que pode ser vazia, caso não haja anexos.
Bloco de código |
---|
language | js |
---|
title | Chamada no JS |
---|
|
var listaArquivos = await JSInterface.getAttachments();
|
O objeto retorna sempre um json que é uma lista de arquivos. Cada arquivo pode ou não ter os dados, conforme abaixoEste evento pode ser feito para criar algum tipo de log ou disparar algum evento:
Bloco de código |
---|
language | js |
---|
theme | Eclipse | title | Exemplo de uso para imprimir log |
---|
linenumbers | true |
---|
|
function afterSaveNew(form) {
log.info("Colaborador de abertura: " + form.getValue("RNC_colab_abertura"));
} |
afterProcessing
Este é último evento disparado no formulário. O evento recebe como parâmetro um objeto do tipo FormController.
Neste contexto, o FormControler deve ser usado apenas para consulta de dados, alterações nos dados não serão persistidas. Assim como o afterSaveNew pode ser usado para log ou disparo de algum tipo de evento.
Bloco de código |
---|
|
function afterProcessing(form){
} |
beforeMovementOptions
Diferentemente dos outros eventos que precisam de um script próprio e são executados no servidor, este evento acontece ao clicar em "enviar" no navegador antes de abrir a tela de movimentação. Por isso, esse código deve ser implementado em um arquivo javascript vinculado ao formulário html. Ele recebe o parâmetro da atividade atual e é muito útil para algumas validações de campos antes mesmo de ser enviado para o servidor.
Bloco de código |
---|
language | js |
---|
title | Exemplo de implementação em um arquivo.js |
---|
linenumbers | true |
---|
|
var beforeMovementOptions = function(numState) {
if (document.form.codigo.value == '') {
throw ("Erro: O código não foi preenchido");
}
return true;
} |
Nota |
---|
|
Este método só é executado caso haja a abertura da tela de movimentação, o que leva em consideração se há mais de uma atividade destino ou o mecanismo de atribuição da próxima tarefa. E também não é considerada em movimentações via api, ou diretamente no formulário pela navegação de documento. Utilize o validateForm em conjunto com esse método para garantir a integridade das validações |
beforeSendValidate
[{
"documentId": 4917,
"version": 1000,
"createDate": 1713872206178,
"newAttach": false,
"size": 1.2485828,
"fileName": "file.pdf",
"description": "file.pdf",
"streamControlUrl": "" //Pode ser http ou caminho do arquivo /folder/file.pdf
}] |
Painel |
---|
borderColor | #f2f2f2 |
---|
bgColor | #f2f2f2 |
---|
|
Caso não tenha a informação no arquivo anexado, o valor será null por padrão. |
Exemplo de chamada no JS de forma async:
Bloco de código |
---|
|
async function getFiles() {
var listFiles = await JSInterface.getAttachments();
} |
sendAttachments
...
Para se ter sincronismo com o envio do formulário, pode-se utilizar o evento igual ao beforeSendValidateAssim como beforeMovementOptions, este evento acontece ao clicar em "enviar" no navegador executar a movimentação em si. Ou seja, depois do beforeMovementOptions e independente da tela de seleção de atividade/usuário destino.
Esse código deve ser implementado em um arquivo javascript vinculado ao formulário html. Ele recebe o parâmetro da atividade atual e da atividade destino (ou seja, pra qual atividade está sendo enviado essa solicitação) e é muito útil para algumas validações de campos antes mesmo de ser enviado para o servidor.Ocorre antes da solicitação ser movimentada, após já ter sido selecionada a atividade destino o usuário e demais informações necessárias à solicitação..
Bloco de código |
---|
|
var sendAttachments = function(listFiles) {
} |
- Os dados sempre serão uma lista de arquivos com os valores:
Bloco de código |
---|
language | jspowershell |
---|
theme | Eclipse | title | Exemplo de implementação em um arquivo.js |
---|
linenumbers | true |
---|
|
[{
var beforeSendValidate = function(numState, nextState) {"documentId": 0,
if (numState == 1 && nextState == 2 && document.form.codigo.value == '') {
throw ("Erro: Para movimentar para a atividade 2, o código deve ser preenchido");
}
return true;
}"version": 0,
"createDate": null,
"newAttach": true,
"size": 1.2485828,
"fileName": "file.pdf",
"description": "file.pdf",
"streamControlUrl": "" //Pode ser http ou caminho do arquivo /folder/file.pdf
}] |
setEnable
...
Este evento está depreciado e não é mais utilizado.
...