Árvore de páginas

Versões comparadas

Chave

  • Esta linha foi adicionada.
  • Esta linha foi removida.
  • A formatação mudou.

...

Nota
titleFique atento!

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.

...

Aviso
titleAtenção

Ao

...

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
Bloco de código
languagejs
 function
 enableFields(form) {

 var atividade = 
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:

note
Bloco de código
languagejs
function enableFields(form) { if ( form.getFormMode() != 'ADD' ){ form.setEnhancedSecurityHiddenInputs(true); form.setEnabled("rnc_cod_ocorrencia",
    
    if(atividade == 5){
     form.setEnabled('nomesolicitante', false);
    }
}

HTML:

titleAtenção!

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
languagejs
 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
languagejs
function enableFields(form) { 
    if ( form.getFormMode() != 'ADD' ){   
		form.setEnhancedSecurityHiddenInputs(true); 
        form.setEnabled("rnc_cod_ocorrencia",false);
    }
}
Nota
titleAtenção!

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
languagejs
function inputFields(form){
}
Nota
titleAtenção!

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
languagejs
titleCó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
languagejs
titleExemplo da validação do campo de formulário
linenumberstrue
function validateForm(form) {
   if (form.getValue('RNC_colab_abertura') == null){
     throw "O colaborador de abertura não foi informado";
   }   
}
Bloco de código
languagejs
titleExemplo da validação do campo de formulário com mensagem com quebra de linha
linenumberstrue
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:

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
Bloco de código
languagejs
titleExemplo de uso para imprimir log
linenumberstrue
function inputFieldsafterSaveNew(form){
}
Nota
titleAtenção!
 {
  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
languagejs
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.

function inputFields(form
) {

    
var regEx
if (document.form.codigo.value =
/^\d{4}-\d{2}-\d{2}$/;
= '') {
      
if
throw (
form.getValue("dt_solicitacao").match(regEx)) {
"Erro: O código não foi preenchido");
    }
    
var
return 
split
true;
 
= form.getValue("dt_solicitacao").split('-'); form.setValue("dt_solicitacao", split[2] + '-' + split[1] + '-' + split[0]); } }
Bloco de código
languagejs
titleExemplo de implementação em um arquivo.js
linenumberstrue
  var beforeMovementOptions = function(numState
Código para Datas

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
titleFique atento!

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
languagejs
titleExemplo da validação do campo de formuláriode implementação em um arquivo.js
linenumberstrue
  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
languagejs
titleExemplo da validação do campo de formulário com mensagem com quebra de linha
linenumberstrue
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
languagejs
titleChamada 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
languagejs
themeEclipsetitleExemplo de uso para imprimir log
linenumberstrue
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
languagejs
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
languagejs
titleExemplo de implementação em um arquivo.js
linenumberstrue
  var beforeMovementOptions = function(numState) {
    if (document.form.codigo.value == '') {
      throw ("Erro: O código não foi preenchido");
    }
    return true;
  }
Nota
titleFique atento!

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
languagejs
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
languagejs
var sendAttachments = function(listFiles) { 
                             
} 


  • Os dados sempre serão uma lista de arquivos com os valores:
Bloco de código
languagejspowershell
themeEclipsetitleExemplo de implementação em um arquivo.js
linenumberstrue
 [{
 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.

...