Механизм dot-walking и оператор возможности $$: способы получения доступа к расширенным полям дочерней таблицы

Механизм dot-walking позволяет получить доступ к значению полей связанных таблиц. В таблице могут содержаться ссылки на другие таблицы.

Например, в таблице Инцидент (itsm_incident) есть референсное (ссылочное) поле Заявитель. Значение в этом поле отсылает к записи пользователя в другой таблице — таблица Сотрудники. У записи пользователя есть поле Электронная почта.

Таким образом, взаимосвязанные значения, которые расположены в разных таблицах, образуют цепочку. Чтобы получить значение электронной почты сотрудника, который сообщил об инциденте, в скрипте нужно построить цепочку Инцидент.Заявитель.Почта с разбиением по точкам:

const current = new SimpleRecord('itsm_incident'); // объектом current будет запись из таблицы инцидентов

current.get('170539993117855116'); // получаем конкретную запись инцидента по id

ss.info(current.caller.email); // получаем информацию о почте заявителя инцидента

Поскольку Заявитель это поле типа Reference , то для получения значения референсного поля вместо dot-walking рекомендуется использовать метод getValue(property):

current.getValue(‘caller’);

Если у дочерней таблицы набор полей шире, чем у родительской, то использование dot-walking в скриптах недостаточно. При обращении через dot-walking к полям дочерней таблицы, которых нет в родительской, будет возникать ошибка «Property {название поля} not exist!».

Чтобы избежать такого поведения программы и получить через скрипт доступ к расширенным полям дочерней таблицы, на платформе SimpleOne предусмотрен оператор возможности — $$.

Данный оператор $$ указывается перед наименованием поля дочерней таблицы (атрибута объекта).

Например, необходимо получить мобильный телефон сотрудника, который сообщил об инциденте.

Поле Мобильный телефон расположено в таблице Сотрудники (Employee), которая является дочерней от таблицы Пользователи (User). При этом в родительской таблице Пользователи нет поля Мобильный телефон. В этом случае в скрипте необходимо указать оператор возможности $$ следующим образом:

const current = new SimpleRecord('itsm_incident');

current.get('170539993117855116');

ss.info(current.caller.$$mobile_phone);

Оператор возможности $$ позволяет искать значение в расширенных полях дочерней таблицы. И если значение не будет найдено, то вместо ошибки скрипт возвратит ответ null.

4 лайка

Рабочее название:
$$ – “Оператор возможности”

3 лайка

хорошо бы эту статью в документацию добавить…

сейчас про этот оператор лишь мельком упоминается в одном месте. поиск по “$$” эту страницу в документации не находит.

и надеюсь в учебном курсе про этот оператор будут инженерам рассказывать.

В курсе есть про это. Даже подробнее чем в доке…

2 лайка