logo

NJP

Comparando datas em ServiceNow

Import · Dec 22, 2021 · article
image 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);

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

________________________

Carlos Camacho

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

Labels:

image

View original source

https://www.servicenow.com/community/brazil-snug/comparando-datas-em-servicenow/ta-p/2304116