Древовидный реестр с иерархией, построенной не по сущности указанной в источнике данных

Мне нужно сделать иерархический реестр, у которого иерархия строится не по паренту текущего источника данных, а по другому полю. Есть ли такие возможности в конструкторе? Или нужно полностью строить свою вьюху? И если второй вариант, то интересно, как полностью написанная мной вьюха впиливается в общую рмсную архитектуру. Или она начинает полностью жить своей жизнью? И вообще возможно ли это.
Попробую описать пример. Есть плоские данные, у которых одно из полей является объектом. И этот объект уже можно сгруппировать по парентам. Ну и соответственно задача - чтобы текущие плоские данные отображались в виде дерева.

Предположим что плоская сущность называется Х, а деревянная (ссылка на которую есть в Х) - У.

Есть несколько вариантов:

  • в сущности У сделать формульное поле, которое будет вести на Х (например c помощью sql-функции) - тогда вы сможете организовать дерево по У, но при этом по ссылке выводить поля Х

  • создать в рмс sql-представление Ц, которое возвращает набор данных из Х и У, и содержит родительское поле того же типа Ц которое заполняется по нужным условиям - тут главное чтобы идентификаторы записи Ц были с одной стороны уникальными, с друго стороны - предсказуемыми (например хеш-код от ключевых полей Х и У)
    По этой вьюхе можно будет создать дерево

  • создать пустую sql-вьюху Й вида select 0 as id, 0 as parent
    и в качестве типа для parent указать Й.
    далее - создать дерево по этой вьюхе и добавить в него любое количество Свободных колонок (не привязанных к источнику данных) - для колонок будут созданы поля в DTO.
    После этого вы сможете оверайднуть сервис дерева и заполнить его по любым нужным вам условиям. Помните, что стандартная фильтрация не распространяется на свободные колонки

1 Лайк