The CreatorCon Call for Content is officially open! Get started here.

Carlos Camacho
Mega Sage
Mega Sage

 

 find_real_file.png


    Comparar se um campo do tipo data (datetime) é maior que a data atual às vezes pode dar trabalho pois existem muitos formatos diferentes.


Exemplos:

DD-MM-YYYY HH:MM:SS
YYYY-MM-DD HH:MM:SS


Aonde:

YYYY = Ano, MM = Mês, DD = Dia,

HH = Hora, MM= Minuto, SS = Segundo

 

Uma maneira de garantir que a comparação está correta é converter os dois valores para objetos do tipo GlideDateTime.

Abaixo está o exemplo de uma função que converte dois valores para GlideDateTime e realiza a comparação entre a data fornecida e a data atual.

 

var DateUtil = Class.create();

DateUtil.prototype = {

    initialize: function() {

    },

    // Usage: new DateUtil().hasDatePassed(current.getValue('state_date'))

    hasDatePassed : function(dateFieldValue) {

        var now     = new GlideDateTime();

        var startDt = new GlideDateTime(dateFieldValue);

        if (startDt.getNumericValue() < now.getNumericValue())

            return true;

 
        return false;

 
    },

    type: 'DateUtil'

};

 

 

Outro caso de Uso: 

Imagine que você tem um formulário de pedido aonde os funcionários podem, por exemplo, solicitar um novo notebook. 

No seu formulário há um campo do tipo date/time chamado "para_quando". 

Você pode criar uma Business Rule para garantir que o colaborador não informe uma data anterior a data atual, evitando assim que dados inconsistentes sejam gravados no pedido.

  • Crie uma Business Rule em System Definition > Business Rules;
  • Clique em New;
  • Name: Para Quando Precisa Disso;
  • Table: (Selecione a sua tabela que contém o campo para_quando);
  • Marque o checkbox Advanced;
  • Aba When to run: Before Update
  • Utilize o código abaixo na aba Advanced:
(function executeRule(current, previous /*null when async*/) {

	// agora armazena a data/hora atual
    var agora = new GlideDateTime();
    // Cria um objeto GlideDateTime para quando você precisa do item de catálogo
    var paraQuando = new GlideDateTime(current.para_quando);
  
    // Se o item de catálogo for solicitado para uma data anterior a data atual, não grava o registro e exibe mensagem de erro na tela.
    if(paraQuando.before(agora)){
        gs.addErrorMessage("A data do campo Para Quando Precisa Disso não pode estar no passado. O seu pedido não foi salvo no banco de dados.");
        current.setAbortAction(true);
    }

})(current, previous);
  • Clique em Update.

 

Pronto. Agora é só testar o formulário informando uma data anterior a data atual. 

 

 

 

 

 

 

________________________

Carlos Camacho
https://www.linkedin.com/in/camachojunior

 

Version history
Last update:
‎12-22-2021 02:56 AM
Updated by: