Как получить последнюю обновленную запись из таблицы sys_user, которая изменена во время или после определенной отметки времени в ServiceNow

Я хочу получить запись из таблицы sys_user, которая обновляется во время или после определенной отметки времени. для этого я создал запрос на отдых как

HTTPS: /service-now.com/api/now/v1//table/sys_user sysparm_query=sys_updated_on>= JavaScript:gs.dateGenerate('2017-10-30','1:25:00')

Я преобразовал текущее время в формате IST в GMT и передал его функции dateGenerate().

Постановка проблемы - я не хочу конвертировать IST в GMT, есть ли способ, с помощью которого я могу идентифицировать часовой пояс экземпляра ServiceNow во время выполнения и конвертировать заданное время в эту метку времени и получить пользователей. Если я могу передать эту дату и время в формате UTC.

1 ответ

Ahoy!

Это отличный вопрос, и это довольно сложно в 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 & Создание мощных рабочих процессов

Владелец / Основатель, SN Pro Советы

Другие вопросы по тегам