ABAP Object Services — это платформа для различных служб, связанных с созданием и работой с устойчивыми объектами. Устойчивые объекты позволяют использовать чисто объектно-ориентированную модель данных для хранения данных, а не реляционную модель данных. SAP предоставляет Persistence Service, которая действует как программный уровень между устойчивыми объектами и базовой базой данных; Другими словами, Persistence Service позволяет вам работать с устойчивыми данными без необходимости использования операторов Open SQL в вашей программе.
В этом разделе мы обсудим, как использовать ABAP Object Services для устойчивых объектов. Мы начнем с обзора того, что такое Persistence Service, затем рассмотрим создание устойчивых классов ( Persistence classes ) и работу с устойчивыми объектами ( Рersistent objects. ).
Обзор Persistence Service
Служба Persistence основана на инструментах сопоставления объектных отношений (ORM). Используя инструменты ORM, детали персистентности инкапсулируются внутри персистентных классов путем сопоставления таблиц/структур/представлений базы данных с объектно-ориентированной моделью. Фактически это позволяет вам работать с данными в реляционной базе данных объектно-ориентированным способом. Классы с объектно-реляционным сопоставлением называются постоянными классами, а атрибуты, сопоставленные со столбцами в таблице базы данных, называются постоянными атрибутами.
В других языках программирования, таких как Java, структура ORM автоматически создает соответствующие таблицы базы данных и представляет данные в виде объектов при создании класса с атрибутами. Однако SAP пока не поддерживает такую функциональность. Persistence Service — это программный уровень, который является промежуточным звеном между устойчивыми объектами и реляционной базой данных. Сами устойчивые объекты являются временными по своей природе.
Persistence service обрабатывает извлечение данных из базы данных и инициализацию атрибутов сохраняемого объекта, а также работает с экземплярами устойчивых объектов.
Создание устойчивого класса - Persistent Classes.
Действия по созданию persistent класса аналогичны созданию обычного класса, за исключением того, что вы выбираете устойчивый класс в качестве типа класса.
Когда устойчивый класс создается, он реализует интерфейс IF_OS_STATE. Этот интерфейс реализован во всех персистентных классах, чтобы гарантировать согласованный доступ ко всем персистентным классам.
Построитель классов также создает два класса агентов с соглашением об именах CA_ и CB_. Эти классы агентов используются для управления устойчивым объектами устойчивого класса. Другими словами, эти классы агентов будут иметь методы, которые реализуют фактические операторы Open SQL и заботятся об инициализации устойчивых объектов.
Например, мы создаем постоянный класс с именем ZCL_TEST_EXAMPLE, а Class Builder создаст классы агентов ZCA_TEST_EXAMPLE и ZCB_TEST_EXAMPLE.
Класс агента ZCB_TEST_EXAMPLE является абстрактным классом, и класс ZCA_OS_SFLIGHT наследуется от него. Класс ZCB_OS_SFLIGHT добавляется в качестве друга к персистентному классу ZCL_OS_SFLIGHT, как показано ниже.
На данный момент класс ZCL_TEST_EXAMPLE имеет только методы из интерфейса IF_OS_STATE. Построитель классов добавляет дополнительные методы, как только мы выполняем сопоставление устойчивости с таблицей, структурой или представлением базы данных. Сопоставление устойчивости— это процесс сопоставления полей таблицы базы данных с атрибутами класса постоянства.
Чтобы выполнить сопоставление устойчивости, нажмите кнопку «Отображение устойчивости» Пункт меню->Перейти к. Откроется инструмент сопоставления, как показано ниже. Укажите имя таблицы/структуры, с которой вы хотите сопоставить класс сохраняемости.
Class Builder автоматически создаст атрибуты в классе для полей отображаемой таблицы/структуры. Он также создаст методы установки и получения для управления этими полями. Методы установки не создаются для ключевых полей таблицы, потому что ключ не должен быть изменен.
Как только вы укажете имя таблицы/структуры, все поля таблицы будут загружены в нижнюю часть, как показано ниже. Вы можете дважды щелкнуть имя поля, чтобы при необходимости изменить некоторые свойства поля, например, чтобы сделать поле доступным только для чтения.
Выберите каждое поле и нажмите (Enter), чтобы добавить поле в класс. Должны быть добавлены все поля таблицы. Если вы хотите использовать только некоторые поля таблицы, создайте ракурс проекции для таблицы и используйте имя ракурса для устойчивости. Когда все поля будут добавлены, нажмите «Сохранить», а затем «Назад».
Обратите внимание, что все поля добавляются как атрибуты и создаются соответствующие методы SET и GET.
Теперь активируйте класс. Если вы ранее не активировали этот класс, система покажет вам подсказку с вопросом, следует ли также активировать активатор класса. Нажмите Да.
Работа с устойчивыми объектами
Работать с устойчивыми объектами довольно просто. Класс агента ZCA_ реализует одноэлементный шаблон проектирования, поэтому мы не можем создать экземпляр объекта напрямую с помощью инструкции CREATE OBJECT в программе. Одноэлементный шаблон проектирования гарантирует, что существует только один экземпляр объекта.
Чтобы получить ссылку на класс агента, нам нужно получить доступ к статическому атрибуту агента, определенному в классе агента. Оттуда мы можем работать с постоянными данными так же, как с объектом, вызывая методы get_persistent, create_persistent и delete_persistent для чтения, записи и удаления записи в таблице базы данных.
Ниже показан пример чтения записи путем вызова метода get_persistent класса агента.
DATA :lo_sflight_agent TYPE REF TO zca_test_example, "Агент lo_sflight TYPE REF TO zcl_test_example, "Устойчивый класс lv_price TYPE s_price. TRY. lo_sflight_agent = zca_test_example=>agent. lo_sflight = lo_sflight_agent->get_persistent( i_carrid = 'AA' i_connid = 0017 i_fldate = '20190921' ). lv_price = lo_sflight->get_price( ). WRITE lv_price. CATCH cx_os_object_not_found INTO DATA(lo_msg). "ObjectnotFound WRITE lo_msg->get_text( ). ENDTRY.
Комментарии
Отправить комментарий