Наткнулся на проблему и задумался над способом решения. Надо создать симметричный линк между объектами одного класса. Для объектов разного класса линк всегда симметричный. Поскольку выглядит например так (id, server_id, person_id) у соответствующих классов в соответствующем атрибуте будет key_to_me=server_id у класса сервер и key_to_me=person_id у персоны. Если в объекте класса сервер задать линк на персону то у персоны появится соответствующий линк на сервер.
Отлично. Но пусть теперь нам нужен линк Сервер-Сервер. Мы не можем создать линк-класс вида (id,server_id,server_id), поля в базе не могут иметь одинаковые названия. Можем сделать только (id,left_server_id,right_server_id) но в классе сервер у нас соответствующий линку атрибут должен быть один, например, key_to_me=left_server_id.
Но тогда мы увидим линк только в том сервере на котором его задали, в “партнере” его не будет, поскольку его id записан в другом поле в left_server_id его нет.
Вот я и задумался, как эту проблему объехать. Один из способов оверлоадить в описании класса lnkServerToServer метод, который создает новый объект, чтобы прямо в нем создать еще одну симметричную запись в базе. Но засада в том, что на ITOP ни фига нет документации (или я не знаю, где ее найти).
Собственно вопрос:
где найти описание? или может, кто знает, как решить эту проблему? Или сталкивался с аналогичным по сути случаем, когда надо было оверлоадить создание объекта. Откровенно говоря на вскидку по исходникам я не понял какая именно функция занимается созданием объекта. Я смотрел в cmdbAbstractClass но не понял. Если кто знает - ткните пальцем.
Пока я вижу самым простым решением сделать внешнюю утилиту, которая будет проверять наличие симметричного линка и добавлять его в таблицу линк-класса, если он отсутствует. Это можно сделать через json. У них этот интерфейс хоть как-то описан.
И, пожалуйста, не пишите в стиле “зачем это нужно”, “да это и не нужно вовсе”. Это нужно. Излагать всю историю зачем и почему - утомлять читателей, которым и так понятно, и уходить от сути вопроса