如何从sys_user表中获取最新更新的记录,该记录在ServiceNow中的某个时间戳记或之后修改

时间:2017-10-30 12:53:27

标签: servicenow servicenow-rest-api

我想从sys_user表中获取记录,该记录在特定时间戳或之后更新。 因为我已经创建了休息请求

的https:/service-now.com/api/now/v1//table/sys_user sysparm_query = sys_updated_on&GT = JavaScript的:gs.dateGenerate('二零一七年十月三十日'&#39 ; 01:25:00&#39)

我已将IST格式的当前时间转换为GMT并将其传递给dateGenerate()函数。

问题陈述 - 我不想将IST转换为GMT,有什么方法可以在运行时识别ServiceNow实例时区并将给定时间转换为该时间戳并获取用户。 如果我能以UTC格式传递此日期和时间。

1 个答案:

答案 0 :(得分:0)

嗨!

这是一个很好的问题,在ServiceNow(处理时区)中非常困难。 因此,我已经编写了一个工具来为您管理。它完全免费!

该工具名为TimeZoneUtil,可在此处找到: https://snprotips.com/blog/2017/9/12/handling-timezones-in-servicenow-timezoneutil

您只需要初始化GlideDateTime对象,将其'时区设置为IST,使用setDisplayValue()根据IST当前时间设置其'时间,然后使用.getValue()在系统时间内获取相同的时间。 这是因为getDisplayValue()/ setDisplayValue()基于时区工作,而setValue()/ getValue()始终返回相应的系统时间。

编辑:为了使这一点更加清晰,我将在下面提供一些示例用法。

var tz = new TimeZoneUtils(); //initialize with current time
gs.print(tz.getOffsetHours()); //prints out "-7" in my instance, as the system time is in Pacific.
tz.setTimeZone('Asia/Kolkata'); //sets the time-zone to IST/UTC+5.5
gs.print(tz.getOffsetHours()); //prints "5.5".
gs.print(tz.getGDT().getDisplayValue()); //Prints the current time in IST (2017-11-01 20:52:31 at the moment).
gs.print(tz.getGDT().getValue()); //Prints the current time in system time (2017-11-01 15:23:12 at present).

gs.print(new TimeZoneUtils().setTimeZone('Asia/Kolkata').getDisplayValue()); //Single line, also prints current time in IST: 2017-11-01 20:52:31

前6行显示基本用法并解释它是如何工作的。 但是,第八行演示了在一行中的用法,您可以在查询字符串中使用它。例如:

sysparm_query=sys_updated_on>=javascript:new TimeZoneUtils().setTimeZone('Asia/Kolkata').getDisplayValue()

希望这有帮助!

蒂姆伍德拉夫

作者,Learning ServiceNow& Building Powerful Workflows

所有者/创始人,SN Pro Tips