Использование dot-walking в скриптах
Механизм dot-walking предоставляет доступ к полям связанных таблиц с формы, со списка или из скрипта. В таблице могут содержаться ссылки на другие таблицы. Доступ к полям в этих таблицах можно получить при помощи dot-walking.
Механизм dot-walking создает цепочку наименований атрибутов, разделенных точками. Например, incident.assigned_user.company ссылается на компанию пользователя, назначенного на инцидент.
В текущей статье описывается работа механизма dot-walking в скриптах. Подробнее о функциональности читайте в статье Dot-walking.
В следующем примере скрипт возвращает адрес электронной почты пользователя, ответственного за текущую назначенную группу:
const current = new SimpleRecord('itsm_incident');
current.get('158557395619812771');
ss.info(current.assignment_group.responsible.email);
// Info: john.doe@example.com
Для ускорения выполнения скрипта используйте метод getValue(property), чтобы получить значения полей типа Reference, вместо использования dot-walking.
Например, предпочтительнее использовать структуру current.getValue('reference_field') вместо current.reference_field.sys_id.
Обработка контекста
Например, вы, как администратор, работаете с записями таблицы Задачи (task). Вам нужно получить информацию о заявителе по конкретной задаче. Обычно заявителем указан объект из таблицы Пользователи (user). Однако в данном случае заявитель – это объект из таблицы Сотрудники (employee), которая является дочерней от Пользователей и имеет расширенный набор полей.
Телефон начальника заявителя хранится только в таблице Сотрудники. Чтобы получить номер телефона, используйте скрипт, который реализует атрибуты вызываемой записи в контексте текущего элемента. В этом примере объект current является объектом таблицы Задачи (task).
Поле Заявитель ссылается на таблицу Пользователи (user). Чтобы получить значение атрибута дочерней таблицы Сотрудники, перезагрузите запись в контексте текущей таблицы Задачи. Для этого добавьте символы '$$' перед наименованием вызываемого атрибута.
const current = new SimpleRecord('task');
current.get('161157603117108419'); // a task record where a caller is an Employee object.
ss.info( "VIP: " + current.caller.$$vip) // Info: VIP: true
ss.info( "Non-existing attribute: " + current.caller.$$NonExisting) // Info: Non-existing attribute: null
if (!!current.caller.$$manager) {
ss.info("Manager: " + current.caller.manager.getDisplayValue()) // Info: Manager: John Doe
}
При вызове несуществующего атрибута, скрипт возвращает null.
При попытке применить этот скрипт к записи, в которой заявитель не является объектом таблицы Сотрудники (employee), скрипт возвращает null на все запросы.