Пробуем абрикосовый джем или Использование SQL Hierarchy на примере CDS и ABAP SQL

Рассмотрим пример, в котором присутствует иерархия.

В системе есть классификация, т.е. могут быть вышестоящие и подчиненные классы.

Возьмем класс 3011803, обозначенный как Джем абрикосовый.

Иерархический список выглядит следующим образом:

Наша задача – реализовать модель данных, которая умеет возвращать список вышестоящий классов.

Первый способ – реализовать всю модель на уровне CDS

Создадим CDS нижнего уровня.

Логика простая, родитель – текущая запись, дочерний элемент – данные из ассоциации _tree, которую мы пробрасываем целиком.

Теперь организуем иерархическую CDS, с параметром, от которого будет начинаться “развертка” иерархии.

В нашем случае мы должны указать в качестве параметра внутренний номер класса для абрикосового джема

Пробуем вызвать CDS, используя ABAP SQL

 

Второй способ решения – использовать define hierarchy на уровне ABAP SQL.

В этом случае мы не создаем ZI_HIER_DEMO_TREE, а выносим эту часть на уровень ABAP SQL, используя в качестве источника CDS zi_hier_demo.

 

Третий способ решения – без использования CDS.

Всю часть можно реализовать на ABAP. Будем использовать CTE (обобщенные табличные выражения)

Процесс схож с первым способом.

Вместо ZI_HIER_DEMO мы организуем +cte_tree_source как основной ресурс, и предоставляем ассоциацию _tree для развертки иерархии. В теле основного запроса обращаемся к HIERARCHY, указывая источник и остальные параметры.

Дополнительно выбираем название класса из таблицы swor через ассоциацию.

Спасибо всем, кто прочитал до конца. Надеюсь, эта небольшая статья будет кому-то полезна 🙂