Как получить последнюю обновленную запись из таблицы 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 Советы