Следующие несколько абзацев помогут тебе сэкономить время при разработке большинства видов отчетов на языке ABAP.

Оглавление

Введение

Создание приложения

Model

View

Controller

Модули, активация и первый запуск

Алгоритм работы

Насколько тема актуальна?

Заключение

Введение

Привет, коллега!

Следующие несколько абзацев помогут тебе сэкономить время при разработке большинства видов отчетов на языке ABAP. Так же они помогут тебе разнести всю программную логику по отдельным блокам - классам. Для дальнейшего понимания материала тебе понадобятся всего лишь базовые знания объектно-ориентированного подхода к программированию.

Я уже чувствую, как в твоей голове летает долька сомнения и недоверия, но давай по порядку. Речь пойдет о так называемом шаблоне архитектуры или паттерне MVC (что такое шаблоны архитектуры более подробно можно прочитать здесь). А рассматривать их мы будем на примере создания классического отчета с использованием ALV-таблицы.

Мы разберем самый простой пример - отчет на основе ALV-таблицы, который будет показывать нам все единицы оборудования, созданные после заданной на экране даты.

Создание приложения

Я предлагаю сразу рассматривать архитектуру на живом примере, но для начала давайте посмотрим на рисунок ниже (Рис. 1). На нем схематично изображены составляющие части MVC.

Рис. 1. Схема взаимодействия компонентов MVC

Model, View и Controller (отсюда и MVC) - это те самые компоненты, которые нам необходимо реализовать в виде отдельных классов. Основной идеей такой архитектуры является разделение обработки данных, пользовательского интерфейса и управляющей логики на три отдельных компонента: модель, представление и контроллер. При таком разнесении логики модификация каждого компонента может осуществляться независимо.

Для чего нужен каждый из компонентов:

  • Модель (Model) предоставляет данные и реагирует на команды контроллера, изменяя свое состояние.
  • Представление (View) отвечает за отображение данных модели пользователю, реагируя на изменения модели.
  • Контроллер (Controller) интерпретирует действия пользователя, оповещая модель о необходимости изменений.

За счет разделения у нас появляются более широкие возможности повторного использования кода (наследование). Особенно это помогает, когда пользователь должен видеть те же самые данные в различных контекстах и/или с различных точек зрения. Это наиболее актуально в следующих ситуациях:

  • Когда к одной модели необходимо использовать несколько представлений. Например, когда одни и те же данные требуется вывести вформате ALV, PDF и на Write'ах.
  • Когда необходимо изменить реакцию на действие пользователя на экране. В таком случае достаточно использовать другой контроллер, а представление и модель остаются без изменений.
  • Для разделения и/или ускорения ведения разработки, когда реализация каждого компонента архитектуры достается разным разработчикам.

Итак, давайте поближе познакомимся с каждым компонентом и реализуем их на ABAP.

Model

Model (модель) - это некоторый объект, представляющий из себя данные. Например, полученный список единиц оборудования из таблицы EQUI.

Давайте сразу же его и реализуем в нашем приложении (Рис. 2).

Для описания каждого класса я советаю делать свой отдельный инклуд. Итак, создаем новый инклуд в нашей программе и описываем в нем класс lcl_model.

Рис. 2. Список единиц оборудования из таблицы EQUI

Мы только что описали класс, с помощью которого будет происходить получение данных по ЕО для вывода в ALV таблицу. В конструкторе мы запоминаем дату создания ЕО, начиная с которой будет происходить поиск. Далее в методе init_data получаем данные из БД. Эта логика выполнена в виде отдельного метода, потому что он нам еще понадобится в следующем уроке.

Как вы видите, все данные и логика их получения лежат в одном классе. Но при этом в нем нет ни строчки кода, которая бы отвечала за вывод их на экран. Это сделано специально для того, чтобы разнести логику данных и их отображение.

View

Переходим к реализации класса отображения на экране полученной объектом модели  информации - lcl_view. Так же, как и в предыдущем пункте, создаем для него отдельный инклуд (рис. 3).

Рис. 3. Реализация класса отображения

Конкретно

Если хотите прочитать статью полностью и оставить свои комментарии присоединяйтесь к sapland

У вас уже есть учетная запись?

Войти