- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
05-11-2023 10:35 AM
Olá comunidade!
Realizei a criação de um item de catálogo onde preciso restringir que o usuário informe uma data inicial maior que 7 dias a partir da data atual. Obs: Tenho outras regras que envolvem essa data inicial e essas funcionam normalmente.
Para isso, configurei um script include com a seguinte parte do código para tratar essa regra:
Ao inserir a data na variável do item de catálogo, a regra funciona restringindo a inserção apenas dos dias entre 19 e 31 de qualquer mês, seja ele o atual o subsequente. Ex: Ao preencher a variável com a data 19/05/2023 a regra é acionada e funciona perfeitamente, porém ao inserir o dia 01/06/2023 a regra não é acionada.
Alguém pode me ajudar a identificar qual o erro e como devo corrigir?
Solved! Go to Solution.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
05-12-2023 12:27 PM
Olá Alan,
Me parece que o problema é que você está comparando as datas no formato 'dd/MM/yyyy'. No seu exemplo, quando o if comparar '11/05/2023' com '01/06/2023', 11/05 será maior que 01/06, pois o "1" (primeiro dígito da data de maio) é maior que "0" (primeiro dígito da data de junho). Quando se lida com datas, é um boa prática usar o formato ano + mes + dia, pois assim as comparações serão feitas como esperamos.
Experimente rodar este teste no background script para verificar o comportamento:
Então, se você trocar a formatação de 'dd/MM/yyyy' para 'yyyy/MM/dd' deve resolver o problema. Inclusive a barra nem é necessária neste caso, podendo usar 'yyyyMMdd'.
Além disso, vale a pena dar um olhada no método getValue(). Ao executar (com base no seu exemplo)
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
05-12-2023 12:27 PM
Olá Alan,
Me parece que o problema é que você está comparando as datas no formato 'dd/MM/yyyy'. No seu exemplo, quando o if comparar '11/05/2023' com '01/06/2023', 11/05 será maior que 01/06, pois o "1" (primeiro dígito da data de maio) é maior que "0" (primeiro dígito da data de junho). Quando se lida com datas, é um boa prática usar o formato ano + mes + dia, pois assim as comparações serão feitas como esperamos.
Experimente rodar este teste no background script para verificar o comportamento:
Então, se você trocar a formatação de 'dd/MM/yyyy' para 'yyyy/MM/dd' deve resolver o problema. Inclusive a barra nem é necessária neste caso, podendo usar 'yyyyMMdd'.
Além disso, vale a pena dar um olhada no método getValue(). Ao executar (com base no seu exemplo)
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
06-21-2023 12:34 PM
Olá @Leonardo Bentes,
Continuo na saga para resolver esse problema.
Segui as suas orientações de formatação de data e de "enxugar" o código mais ainda continua com o problema na comparação.
Vou adicionar aqui os dois scripts envolvidos nesse processo, os quais foram desenvolvidos por parceiro ServiceNow e não tenho mais o suporte do mesmo.
Esse é o Script do cliente de catálogo:
Será que ainda consegue me ajudar?
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
06-26-2023 10:16 AM
Veja se esse código possa lhe ajudar:
Deixei ele genérico pra poder aplicar tanto em SI Server Side quanto Client fazendo os devidos ajustes.
var initialDateFromClient = '2023-07-03 18:00:00'
var initDate = new GlideDateTime(initialDateFromClient)
var now = new GlideDateTime()
gs.info('Data Atual: '+now) //Debug
now.addDaysUTC(7)
gs.info('Data Máxima: '+now) //Debug
gs.info('Data Inicial Escolhida: '+initDate) //Debug
/*
Equals (0)
initDate is after now(1)
initDate is before now(-1)
*/
var dur = initDate.compareTo(now)
gs.info(dur) //Debug
if(dur == 1){
gs.info('Data não permitida')
} else {
gs.info('Data permitida')
}