SAP ABAP - Краткое руководство

ABAP означает Advanced Business Application Programming, язык 4GL (4-го поколения). В настоящее время он позиционируется вместе с Java как основной язык программирования серверов приложений SAP.

Начнем с высокоуровневой архитектуры системы SAP. Трехуровневая архитектура клиент / сервер типичной системы SAP представлена ​​следующим образом.

В Presentation layerсостоит из любого устройства ввода, которое может использоваться для управления системой SAP. Это может быть веб-браузер, мобильное устройство и т. Д. Вся центральная обработка происходит вApplication server. Сервер приложений - это не просто одна система, он может быть несколькими экземплярами системы обработки. Сервер связывается сDatabase layerкоторый обычно хранится на отдельном сервере, в основном из соображений производительности, а также из соображений безопасности. Связь происходит между каждым уровнем системы, от уровня представления до базы данных, а затем выполняется резервное копирование по цепочке.

Note- Программы ABAP работают на уровне сервера приложений. Техническое распространение программного обеспечения не зависит от его физического местонахождения. Это означает, что в основном все три уровня могут быть установлены друг над другом на одном компьютере или каждый уровень может быть установлен на другом компьютере или сервере.

Программы ABAP находятся в базе данных SAP. Они выполняются под управлением системы времени выполнения, которая является частью ядра SAP. Система времени выполнения обрабатывает все операторы ABAP, управляя логикой потока и отвечая на пользовательские события.

Таким образом, в отличие от C ++ и Java, программы ABAP не хранятся в отдельных внешних файлах. Внутри базы данных код ABAP существует в двух формах:

  • Source код, который можно просматривать и редактировать с помощью инструментов ABAP.

  • Generated code, которое является двоичным представлением. Если вы знакомы с Java, этот сгенерированный код несколько сравним с байтовым кодом Java.

Систему времени выполнения можно рассматривать как виртуальную машину, подобную виртуальной машине Java. Ключевым компонентом системы времени выполнения ABAP является интерфейс базы данных, который превращает независимые от базы данных операторы (Open SQL) в операторы, понятные базовой базе данных (Native SQL). SAP может работать с широким спектром баз данных, и одна и та же программа ABAP может работать со всеми из них.

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

Привет ABAP

Начнем с обычного примера «Hello World».

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

Вам необходимо ввести свой код с помощью редактора ABAP, который является частью инструментов ABAP, поставляемых с сервером приложений SAP NetWeaver ABAP (также известный как «AS ABAP»).

«AS ABAP» - это сервер приложений с собственной базой данных, средой выполнения ABAP и инструментами разработки ABAP, такими как ABAP Editor. AS ABAP предлагает платформу разработки, не зависящую от оборудования, операционной системы и базы данных.

Использование редактора ABAP

Step 1- Запустите транзакцию SE38, чтобы перейти к редактору ABAP (обсуждается в следующей главе). Приступим к созданию отчета, который является одним из многих объектов ABAP.

Step 2- На первом экране редактора укажите название вашего отчета в поле ввода ПРОГРАММА. Вы можете указать имя как ZHELLO1. Предыдущая буква Z важна для имени. Z гарантирует, что ваш отчет находится в пространстве имен клиента.

Пространство имен клиентов включает все объекты с префиксом Y или Z. Оно всегда используется, когда клиенты или партнеры создают объекты (например, отчет), чтобы отличать эти объекты от объектов SAP и предотвратить конфликты имен с объектами.

Step 3- Вы можете ввести название отчета строчными буквами, но редактор изменит его на верхний регистр. Таким образом, имена объектов ABAP не чувствительны к регистру.

Step 4- После указания имени отчета нажмите кнопку СОЗДАТЬ. Появится всплывающее окно ABAP: АТРИБУТЫ ПРОГРАММЫ, и вы предоставите дополнительную информацию о своем отчете.

Step 5- Выберите «Исполняемая программа» в качестве типа отчета, введите заголовок «Мой первый отчет ABAP» и затем выберите СОХРАНИТЬ, чтобы продолжить. Затем появится окно СОЗДАТЬ КАТАЛОГ ОБЪЕКТОВ. Выберите кнопку ЛОКАЛЬНЫЙ ОБЪЕКТ, и всплывающее окно закроется.

Вы можете заполнить свой первый отчет, введя оператор WRITE под оператором REPORT, чтобы полный отчет содержал только две следующие строки:

REPORT ZHELLO1. 
WRITE 'Hello World'.

Запуск отчета

Мы можем использовать клавиатуру (Ctrl + S) или значок сохранения (справа рядом с полем команды), чтобы сохранить отчет. Разработка ABAP происходит в AS ABAP.

Запустить отчет так же просто, как сохранить его. Щелкните кнопку АКТИВАЦИЯ (слева от значка запуска) и запустите отчет, используя значок ПРЯМАЯ ОБРАБОТКА или функциональную клавишу F8. Также отображается заголовок «Мой первый отчет ABAP» и вывод «Hello World». Вот результат -

My First ABAP Report 
Hello World

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

Просмотр существующего кода

Если вы посмотрите на поле «Программа» и дважды щелкните значение ZHELLO1, редактор ABAP отобразит код для вашего отчета. Это называется прямой навигацией. Двойной щелчок по имени объекта открывает этот объект в соответствующем инструменте.

Чтобы понять SAP ABAP, вам необходимо иметь базовые знания об экранах, таких как «Вход», «Редактор ABAP», «Выход из системы» и т. Д. В этой главе основное внимание уделяется экранной навигации и стандартным функциям панели инструментов.

Экран входа в систему

После входа на сервер SAP на экране входа в систему SAP будет предложено ввести идентификатор пользователя и пароль. Вам необходимо указать действующий идентификатор пользователя и пароль и нажать Enter (идентификатор пользователя и пароль предоставляются системным администратором). Ниже показан экран входа в систему.

Значок панели инструментов

Ниже представлена ​​панель инструментов экрана SAP.

Menu Bar - Строка меню - это верхняя строка диалогового окна.

Standard Toolbar - На этой панели инструментов доступны большинство стандартных функций, таких как начало страницы, конец страницы, страница вверх, страница вниз и сохранение.

Title Bar - В строке заголовка отображается имя приложения / бизнес-процесса, в котором вы сейчас находитесь.

Application Toolbar - Здесь доступны опции меню для конкретных приложений.

Command Field- Мы можем запустить приложение без навигации по меню транзакций, и некоторые логические коды назначаются бизнес-процессам. Коды транзакций вводятся в поле команды для непосредственного запуска приложения.

Редактор ABAP

Вы можете просто запустить транзакцию SE38 (введите SE38 в поле команды), чтобы перейти к редактору ABAP.

Стандартные клавиши и значки

Exit keysиспользуются для выхода из программы / модуля или выхода из системы. Они также используются для возврата к последнему доступному экрану.

Ниже приведены стандартные ключи выхода, используемые в SAP, как показано на изображении.

Ниже приведены варианты проверки, активации и обработки отчетов.

Выйти

Всегда рекомендуется выйти из редактора ABAP или / и выйти из системы SAP после завершения работы.

Заявления

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

Первая строка без комментариев в программе начинается со слова REPORT. Отчет всегда будет первой строкой любой созданной исполняемой программы. За оператором следует имя созданной ранее программы. Затем линия заканчивается точкой.

Синтаксис -

REPORT [Program_Name]. 
 
[Statements…].

Это позволяет оператору занимать столько строк в редакторе, сколько нужно. Например, ОТЧЕТ может выглядеть так -

REPORT Z_Test123_01.

Операторы состоят из команды и любых переменных и параметров, оканчивающихся точкой. Пока в конце выписки стоит точка, никаких проблем не возникнет. Именно на этом сроке заявление заканчивается.

Напишем код.

В строке под оператором REPORT просто введите этот оператор: Напишите «ABAP Tutorial».

REPORT Z_Test123_01.

Write 'This is ABAP Tutorial'.

Four things to consider while writing statements -

  • Оператор записи записывает все, что находится в кавычках, в окно вывода.

  • Редактор ABAP преобразует весь текст в верхний регистр, кроме текстовых строк, заключенных в одинарные кавычки.

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

  • ABAP не имеет ограничений на расположение операторов. То есть несколько операторов могут быть помещены в одну строку, или один оператор может растягиваться на несколько строк.

Обозначение двоеточия

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

Ниже приведен пример программы, которая может сэкономить некоторое нажатие клавиш.

WRITE 'Hello'. 
WRITE 'ABAP'. 
WRITE 'World'.

Используя обозначение двоеточия, это можно было бы переписать так -

WRITE: 'Hello', 
       'ABAP', 
       'World'.

Как и любой другой оператор ABAP, макет не имеет значения. Это столь же правильное утверждение -

WRITE: 'Hello', 'ABAP', 'World'.

Комментарии

Встроенные комментарии могут быть объявлены в любом месте программы одним из двух методов:

  • Полные строчные комментарии обозначаются звездочкой (*) в первой позиции строки, и в этом случае вся строка рассматривается системой как комментарий. Комментарии не должны заканчиваться точкой, потому что они не могут занимать более одной строки -

* This is the comment line
  • Частичные строковые комментарии обозначаются двойными кавычками (") после оператора. Весь текст, следующий за двойными кавычками, рассматривается системой как комментарий. Вам не нужно заканчивать частичные строчные комментарии точкой, потому что они не могут распространяться на большее количество строк. чем одна строка -

WRITE 'Hello'. "Here is the partial comment

Note - Комментированный код не пишется редактором ABAP с заглавных букв.

Подавление пробелов

Команда NO-ZERO следует за оператором DATA. Он подавляет все ведущие нули числового поля, содержащего пробелы. Вывод обычно легче читается пользователями.

пример

REPORT Z_Test123_01. 

DATA: W_NUR(10) TYPE N.
      MOVE 50 TO W_NUR.
      WRITE W_NUR NO-ZERO.

Приведенный выше код дает следующий вывод -

50

Note - Без команды NO-ZERO вывод будет: 0000000050

Пустые строки

Команда SKIP помогает вставлять пустые строки на страницу.

пример

Команда сообщения выглядит следующим образом -

WRITE 'This is the 1st line'. 
SKIP. 
WRITE 'This is the 2nd line'.

Приведенная выше команда сообщения дает следующий вывод -

This is the 1st line 
This is the 2nd line

Мы можем использовать команду SKIP для вставки нескольких пустых строк.

SKIP number_of_lines.

Результатом будет несколько пустых строк, определяемых количеством строк. Команда SKIP также может помещать курсор в нужную строку на странице.

SKIP TO LINE line_number.

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

Вставка линий

Команда ULINE автоматически вставляет горизонтальную линию поперек вывода. Также можно контролировать положение и длину линии. Синтаксис довольно прост -

ULINE.

пример

Команда сообщения выглядит следующим образом -

WRITE 'This is Underlined'.
ULINE.

Приведенный выше код дает следующий вывод -

This is Underlined (and a horizontal line below this).

Сообщения

Команда MESSAGE отображает сообщения, определенные идентификатором сообщения, указанным в операторе REPORT в начале программы. Идентификатор сообщения - это двухсимвольный код, который определяет, к какому набору из 1000 сообщений программа получит доступ при использовании команды MESSAGE.

Сообщения пронумерованы от 000 до 999. С каждым номером связан текст сообщения длиной до 80 символов. При вызове номера сообщения отображается соответствующий текст.

Ниже приведены символы для использования с командой Сообщение:

Сообщение Тип Последствия
E ошибка Появляется сообщение, и приложение останавливается в текущей точке. Если программа работает в фоновом режиме, задание отменяется, и сообщение записывается в журнал задания.
W Предупреждение Появится сообщение, и пользователь должен нажать Enter, чтобы приложение продолжило работу. В фоновом режиме сообщение записывается в журнал работы.
я Информация Откроется всплывающее окно с текстом сообщения, и пользователь должен нажать Enter, чтобы продолжить. В фоновом режиме сообщение записывается в журнал работы.
А Abend Этот класс сообщения отменяет транзакцию, которую пользователь в настоящее время использует.
S Успех Внизу экрана появится информационное сообщение. Отображаемая информация носит положительный характер и предназначена только для обратной связи с пользователем. Сообщение никак не мешает работе программы.
Икс Прервать Это сообщение прерывает выполнение программы и создает короткий дамп ABAP.

Сообщения об ошибках обычно используются, чтобы помешать пользователям делать то, что они не должны делать. Предупреждающие сообщения обычно используются, чтобы напомнить пользователям о последствиях их действий. Информационные сообщения предоставляют пользователям полезную информацию.

пример

Когда мы создаем сообщение для сообщения ID AB, команда MESSAGE - MESSAGE E011 дает следующий вывод -

EAB011 This report does not support sub-number summarization.

При программировании на ABAP нам нужно использовать множество переменных для хранения различной информации. Переменные - это не что иное, как зарезервированные ячейки памяти для хранения значений. Это означает, что когда вы создаете переменную, вы резервируете некоторое место в памяти. Вы можете хранить информацию о различных типах данных, таких как символьные, целые числа, с плавающей запятой и т. Д. В зависимости от типа данных переменной операционная система выделяет память и решает, что можно сохранить в зарезервированной памяти.

Элементарные типы данных

ABAP предлагает программисту широкий ассортимент типов данных фиксированной и переменной длины. В следующей таблице перечислены элементарные типы данных ABAP -

Тип Ключевое слово
Байтовое поле Икс
Текстовое поле C
Целое число я
Плавающая запятая F
Упакованный номер п
Текстовая строка STRING

Некоторые поля и числа можно изменить, используя одно или несколько имен, как показано ниже:

  • byte
  • numeric
  • character-like

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

Тип Типичная длина Типичный диапазон
Икс 1 байт Любые байтовые значения (от 00 до FF)
C 1 персонаж 1 до 65535
N (числовое текстовое поле) 1 персонаж 1 до 65535
D (символьная дата) 8 символов 8 символов
T (характерное время) 6 персонажей 6 персонажей
я 4 байта От -2147483648 до 2147483647
F 8 байт 2.2250738585072014E-308 до 1.7976931348623157E + 308 положительный или отрицательный
п 8 байт [-10 ^ (2len -1) +1] до [+ 10 ^ (2len -1) 1] (где len = фиксированная длина)
STRING Переменная Любые буквенно-цифровые символы
XSTRING (байтовая строка) Переменная Любые байтовые значения (от 00 до FF)

пример

REPORT YR_SEP_12. 
DATA text_line TYPE C LENGTH 40. 
text_line = 'A Chapter on Data Types'. 
Write text_line. 

DATA text_string TYPE STRING. 
text_string = 'A Program in ABAP'. 
Write / text_string. 

DATA d_date TYPE D. 
d_date = SY-DATUM. 
Write / d_date.

В этом примере у нас есть символьная строка типа C с предопределенной длиной 40. STRING - это тип данных, который может использоваться для любой символьной строки переменной длины (текстовые строки). Объекты данных типа STRING обычно следует использовать для символьного содержимого, где фиксированная длина не важна.

Приведенный выше код дает следующий вывод -

A Chapter on Data Types 
A Program in ABAP 
12092015

Тип DATE используется для хранения информации о дате и может хранить восемь цифр, как показано выше.

Сложные и ссылочные типы

Сложные типы подразделяются на Structure types и Table types. В типах структур элементарные типы и структуры (т.е. структура, встроенная в структуру) сгруппированы вместе. Вы можете рассматривать только группировку элементарных типов. Но вы должны знать о наличии вложенности конструкций.

Когда элементарные типы сгруппированы вместе, к элементу данных можно получить доступ как к сгруппированному элементу данных или можно получить доступ к отдельным элементам данных элементарного типа (полям структуры). Типы таблиц в других языках программирования более известны как массивы.Arraysмогут быть простыми или структурными массивами. В ABAP массивы называются внутренними таблицами, и они могут быть объявлены и работать с ними разными способами по сравнению с другими языками программирования. В следующей таблице показаны параметры, по которым характеризуются внутренние таблицы.

S.No. Параметр и описание
1

Line or row type

Строка внутренней таблицы может быть элементарной, сложной или справочной.

2

Key

Задает поле или группу полей в качестве ключа внутренней таблицы, определяющей строки таблицы. Ключ содержит поля элементарных типов.

3

Access method

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

Ссылочные типы используются для ссылки на экземпляры классов, интерфейсов и элементов данных времени выполнения. Службы времени выполнения ABAP OOP (RTTS) позволяют объявлять элементы данных во время выполнения.

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

Вы должны объявить все переменные, прежде чем их можно будет использовать. Основная форма объявления переменной -

DATA <f> TYPE <type> VALUE <val>.

Здесь <f> указывает имя переменной. Имя переменной может содержать до 30 символов. <type> указывает тип переменной. Любой тип данных с полностью указанными техническими атрибутами известен как <тип>. <val> указывает начальное значение переменной <f>. Если вы определяете элементарную переменную фиксированной длины, оператор DATA автоматически заполняет значение переменной начальным значением, зависящим от типа. Другие возможные значения для <val> могут быть литералом, константой или явным предложением, например Is INITIAL.

Ниже приведены действительные примеры объявления переменных.

DATA d1(2) TYPE C.  
DATA d2 LIKE d1.  
DATA minimum_value TYPE I VALUE 10.

В приведенном выше фрагменте кода d1 - это переменная типа C, d2 - это переменная типа d1, а minimum_value - это переменная целочисленного типа ABAP I.

В этой главе объясняются различные типы переменных, доступные в ABAP. В ABAP есть три типа переменных:

  • Статические переменные
  • Справочные переменные
  • Системные переменные

Статические переменные

  • Статические переменные объявляются в подпрограммах, функциональных модулях и статических методах.

  • Время жизни связано с контекстом объявления.

  • С помощью оператора CLASS-DATA вы можете объявлять переменные внутри классов.

  • Оператор 'PARAMETERS' может использоваться для объявления объектов элементарных данных, которые связаны с полями ввода на экране выбора.

  • Вы также можете объявить внутренние таблицы, которые связаны с полями ввода на экране выбора, используя оператор SELECT-OPTIONS.

Ниже приведены соглашения, используемые при именовании переменной:

  • Для имен переменных нельзя использовать специальные символы, такие как «t» и «,».

  • Имя предопределенных объектов данных изменить нельзя.

  • Имя переменной не может совпадать с каким-либо ключевым словом или предложением ABAP.

  • Имя переменных должно передавать значение переменной без необходимости дополнительных комментариев.

  • Дефис зарезервирован для обозначения компонентов структур. Поэтому в именах переменных следует избегать дефисов.

  • Символ подчеркивания можно использовать для разделения составных слов.

Эта программа показывает, как объявить переменную с помощью оператора PARAMETERS -

REPORT ZTest123_01. 
PARAMETERS: NAME(10) TYPE C, 
CLASS TYPE I, 
SCORE TYPE P DECIMALS 2, 
CONNECT TYPE MARA-MATNR.

Здесь NAME представляет параметр из 10 символов, CLASS указывает параметр целочисленного типа с размером по умолчанию в байтах, SCORE представляет параметр упакованного типа со значениями до двух десятичных знаков, а CONNECT относится к типу MARA-MATNF словаря ABAP. .

Приведенный выше код дает следующий вывод -

Справочные переменные

Синтаксис объявления ссылочных переменных -

DATA <ref> TYPE REF TO <type> VALUE IS INITIAL.
  • В дополнении REF TO объявляется ссылочная переменная ref.

  • В спецификации после REF TO указывается статический тип ссылочной переменной.

  • Статический тип ограничивает набор объектов, на которые может ссылаться <ref>.

  • Динамический тип ссылочной переменной - это тип данных или класс, к которому она в настоящее время относится.

  • Статический тип всегда более общий или такой же, как динамический тип.

  • Добавление TYPE используется для создания связанного ссылочного типа и в качестве начального значения, и после добавления VALUE можно указать только IS INITIAL.

пример

CLASS C1 DEFINITION. 
PUBLIC SECTION. 
DATA Bl TYPE I VALUE 1. 
ENDCLASS. DATA: Oref TYPE REF TO C1 , 
Dref1 LIKE REF TO Oref, 
Dref2 TYPE REF TO I . 
CREATE OBJECT Oref. 
GET REFERENCE OF Oref INTO Dref1. 
CREATE DATA Dref2. 
Dref2→* = Dref1→*→Bl.
  • В приведенном выше фрагменте кода объявлены ссылка на объект Oref и две ссылочные переменные данных Dref1 и Dref2.

  • Обе ссылочные переменные данных полностью типизированы и могут быть разыменованы с помощью оператора разыменования → * в позициях операндов.

Системные переменные

  • Системные переменные ABAP доступны из всех программ ABAP.

  • Эти поля фактически заполняются средой выполнения.

  • Значения в этих полях указывают на состояние системы в любой момент времени.

  • Вы можете найти полный список системных переменных в таблице SYST в SAP.

  • Доступ к отдельным полям структуры SYST можно получить, используя «SYST-» или «SY-».

пример

REPORT Z_Test123_01. 

WRITE:/'SY-ABCDE', SY-ABCDE,       
      /'SY-DATUM', SY-DATUM, 
      /'SY-DBSYS', SY-DBSYS, 
      /'SY-HOST ', SY-HOST, 
      /'SY-LANGU', SY-LANGU,
      /'SY-MANDT', SY-MANDT,
      /'SY-OPSYS', SY-OPSYS,
      /'SY-SAPRL', SY-SAPRL,
      /'SY-SYSID', SY-SYSID,
      /'SY-TCODE', SY-TCODE,
      /'SY-UNAME', SY-UNAME,
      /'SY-UZEIT', SY-UZEIT.

Приведенный выше код дает следующий вывод -

SY-ABCDE ABCDEFGHIJKLMNOPQRSTUVWXYZ  
SY-DATUM 12.09.2015 
SY-DBSYS ORACLE                   
SY-HOST sapserver 
SY-LANGU EN 
SY-MANDT 800 
SY-OPSYS Windows NT 
SY-SAPRL 700 
SY-SYSID DMO 
SY-TCODE SE38 
SY-UNAME SAPUSER 
SY-UZEIT 14:25:48

Литералы - это безымянные объекты данных, которые вы создаете в исходном коде программы. Они полностью определяются своей ценностью. Вы не можете изменить значение литерала. Константы - это именованные объекты данных, созданные статически с помощью декларативных операторов. Константа объявляется путем присвоения ей значения, которое хранится в области памяти программы. Значение, присвоенное константе, не может быть изменено во время выполнения программы. Эти фиксированные значения также можно рассматривать как литералы. Есть два типа литералов - числовые и символьные.

Числовые литералы

Числовые литералы - это последовательности цифр, которые могут иметь знак префикса. В числовых литералах нет десятичных разделителей и нет записи с мантиссой и экспонентой.

Ниже приведены несколько примеров числовых литералов -

183. 
-97. 
+326.

Символьные литералы

Символьные литералы - это последовательности буквенно-цифровых символов в исходном коде программы ABAP, заключенные в одинарные кавычки. Символьные литералы, заключенные в кавычки, имеют предопределенный тип ABAP C и описываются как литералы текстового поля. Литералы, заключенные в «обратные кавычки», имеют тип ABAP STRING и описываются как строковые литералы. Длина поля определяется количеством символов.

Note - В литералах текстовых полей завершающие пробелы игнорируются, но в строковых литералах они учитываются.

Ниже приведены несколько примеров символьных литералов.

Литералы текстового поля

REPORT YR_SEP_12. 
Write 'Tutorials Point'. 
Write / 'ABAP Tutorial'.

Литералы строкового поля

REPORT YR_SEP_12. 
Write `Tutorials Point `. 
Write / `ABAP Tutorial `.

Результат одинаков в обоих вышеупомянутых случаях -

Tutorials Point  
ABAP Tutorial

Note- Когда мы пытаемся изменить значение константы, может возникнуть синтаксическая ошибка или ошибка времени выполнения. Константы, которые вы объявляете в части объявления класса или интерфейса, принадлежат статическим атрибутам этого класса или интерфейса.

Заявление CONSTANTS

Мы можем объявить названные объекты данных с помощью оператора CONSTANTS.

Ниже приводится синтаксис -

CONSTANTS <f> TYPE <type> VALUE <val>.

Оператор CONSTANTS аналогичен оператору DATA.

<f> указывает имя константы. TYPE <type> представляет константу с именем <f>, которая наследует те же технические атрибуты, что и существующий тип данных <type>. VALUE <val> присваивает начальное значение объявленному имени константы <f>.

Note- Мы должны использовать предложение VALUE в заявлении CONSTANTS. Предложение VALUE используется для присвоения константе начального значения во время ее объявления.

У нас есть 3 типа констант, такие как элементарные, комплексные и ссылочные константы. Следующий оператор показывает, как определять константы с помощью оператора CONSTANTS:

REPORT YR_SEP_12. 
CONSTANTS PQR TYPE P DECIMALS 4 VALUE '1.2356'. 
Write: / 'The value of PQR is:', PQR.

Выход -

The value of PQR is: 1.2356

Здесь он относится к элементарному типу данных и известен как элементарная константа.

Ниже приведен пример сложных констант -

BEGIN OF EMPLOYEE,  
Name(25) TYPE C VALUE 'Management Team',  
Organization(40) TYPE C VALUE 'Tutorials Point Ltd',  
Place(10) TYPE C VALUE 'India',  
END OF EMPLOYEE.

В приведенном выше фрагменте кода EMPLOYEE - сложная константа, состоящая из полей Name, Organization и Place.

Следующий оператор объявляет постоянную ссылку -

CONSTANTS null_pointer TYPE REF TO object VALUE IS INITIAL.

Мы можем использовать постоянную ссылку в сравнениях или можем передать ее процедурам.

ABAP предоставляет богатый набор операторов для управления переменными. Все операторы ABAP делятся на четыре категории:

  • Арифметические операторы
  • Операторы сравнения
  • Побитовые операторы
  • Операторы символьной строки

Арифметические операторы

Арифметические операторы используются в математических выражениях так же, как они используются в алгебре. В следующем списке описаны арифметические операторы. Предположим, что целочисленная переменная A содержит 20, а переменная B содержит 40.

S.No. Арифметический оператор и описание
1

+ (Addition)

Добавляет значения по обе стороны от оператора. Пример: A + B даст 60.

2

− (Subtraction)

Вычитает правый операнд из левого операнда. Пример: A - B даст -20.

3

* (Multiplication)

Умножает значения по обе стороны от оператора. Пример: A * B даст 800.

4

/ (Division)

Делит левый операнд на правый операнд. Пример: B / A даст 2.

5

MOD (Modulus)

Делит левый операнд на правый и возвращает остаток. Пример: B MOD A даст 0.

пример

REPORT YS_SEP_08. 
DATA: A TYPE I VALUE 150, 
B TYPE I VALUE 50, 
Result TYPE I. 
Result =  A / B. 
WRITE / Result.

Приведенный выше код дает следующий вывод -

3

Операторы сравнения

Давайте обсудим различные типы операторов сравнения для разных операндов.

S.No. Оператор сравнения и описание
1

= (equality test). Alternate form is EQ.

Проверяет, равны ли значения двух операндов или нет, если да, то условие становится истинным. Пример (A = B) неверен.

2

<> (Inequality test). Alternate form is NE.

Проверяет, равны ли значения двух операндов. Если значения не равны, условие становится истинным. Пример (A <> B) верен.

3

> (Greater than test). Alternate form is GT.

Проверяет, больше ли значение левого операнда, чем значение правого операнда. Если да, то условие выполняется. Пример (A> B) неверен.

4

< (Less than test). Alternate form is LT.

Проверяет, меньше ли значение левого операнда, чем значение правого операнда. Если да, то условие выполняется. Пример (A <B) верен.

5

>= (Greater than or equals) Alternate form is GE.

Проверяет, больше ли значение левого операнда или равно значению правого операнда. Если да, то условие выполняется. Пример (A> = B) неверен.

6

<= (Less than or equals test). Alternate form is LE.

Проверяет, меньше ли значение левого операнда или равно значению правого операнда. Если да, то условие выполняется. Пример (A <= B) верен.

7

a1 BETWEEN a2 AND a3 (Interval test)

Проверяет, находится ли a1 между a2 и a3 (включительно). Если да, то условие выполняется. Пример (A МЕЖДУ B И C) верно.

8

IS INITIAL

Условие становится истинным, если содержимое переменной не изменилось и ей было автоматически присвоено начальное значение. Пример (A IS INITIAL) неверен

9

IS NOT INITIAL

Условие становится истинным, если содержимое переменной изменилось. Пример (A НЕ НАЧАЛЬНЫЙ) верно.

Note- Если тип данных или длина переменных не совпадают, выполняется автоматическое преобразование. Автоматическая корректировка типа выполняется для одного или обоих значений при сравнении двух значений с разными типами данных. Тип преобразования определяется типом данных и порядком предпочтения типа данных.

Ниже приводится порядок предпочтения -

  • Если одно поле имеет тип I, то другое преобразуется в тип I.

  • Если одно поле имеет тип P, то другое преобразуется в тип P.

  • Если одно поле имеет тип D, то другое преобразуется в тип D. Но типы C и N не преобразуются и сравниваются напрямую. То же самое и с типом T.

  • Если одно поле имеет тип N, а другое - тип C или X, оба поля преобразуются в тип P.

  • Если одно поле имеет тип C, а другое - тип X, тип X преобразуется в тип C.

Пример 1

REPORT YS_SEP_08. 

DATA: A TYPE I VALUE 115,
      B TYPE I VALUE 119.
      IF A LT B.
      WRITE: / 'A is less than B'.
      ENDIF

Приведенный выше код дает следующий вывод -

A is less than B

Пример 2

REPORT YS_SEP_08. 

DATA: A TYPE I.
      IF A IS INITIAL.
      WRITE: / 'A is assigned'.
      ENDIF.

Приведенный выше код дает следующий вывод -

A is assigned.

Побитовые операторы

ABAP также предоставляет серию побитовых логических операторов, которые можно использовать для построения логических алгебраических выражений. Поразрядные операторы можно объединять в сложные выражения, используя круглые скобки и т. Д.

S.No. Побитовый оператор и описание
1

BIT-NOT

Унарный оператор, переворачивающий все биты шестнадцатеричного числа на противоположное значение. Например, применение этого оператора к шестнадцатеричному числу, имеющему значение битового уровня 10101010 (например, «AA»), даст 01010101.

2

BIT-AND

Этот бинарный оператор сравнивает каждое поле побитно, используя логический оператор AND.

3

BIT-XOR

Двоичный оператор, который сравнивает каждое поле побитно, используя логический оператор XOR (исключающее ИЛИ).

4

BIT-OR

Двоичный оператор, который сравнивает каждое поле побитно, используя логический оператор ИЛИ.

Например, ниже представлена ​​таблица истинности, в которой показаны значения, сгенерированные при применении логических операторов AND, OR или XOR к двум битовым значениям, содержащимся в поле A и поле B.

Поле А Поле B И ИЛИ ЖЕ XOR
0 0 0 0 0
0 1 0 1 1
1 0 0 1 1
1 1 1 1 0

Операторы символьной строки

Ниже приведен список операторов символьной строки -

S.No. Оператор символьной строки и описание
1

CO (Contains Only)

Проверяет, состоит ли A исключительно из символов B.

2

CN (Not Contains ONLY)

Проверяет, содержит ли A символы, которых нет в B.

3

CA (Contains ANY)

Проверяет, содержит ли A хотя бы один символ B.

4

NA (NOT Contains Any)

Проверяет, не содержит ли A никаких символов B.

5

CS (Contains a String)

Проверяет, содержит ли A строку символов B.

6

NS (NOT Contains a String)

Проверяет, не содержит ли A символьную строку B.

7

CP (Contains a Pattern)

Он проверяет, содержит ли A шаблон в B.

8

NP (NOT Contains a Pattern)

Он проверяет, не содержит ли A шаблон в B.

пример

REPORT YS_SEP_08. 
DATA: P(10) TYPE C VALUE 'APPLE',
      Q(10) TYPE C VALUE 'CHAIR'.
      IF P CA Q.
	
      WRITE: / 'P contains at least one character of Q'.
      ENDIF.

Приведенный выше код дает следующий вывод -

P contains at least one character of Q.

Может возникнуть ситуация, когда вам нужно выполнить блок кода несколько раз. Как правило, операторы выполняются последовательно: сначала выполняется первый оператор функции, затем второй и т. Д.

Языки программирования предоставляют различные структуры управления, которые позволяют использовать более сложные пути выполнения. Аloop statement позволяет нам выполнять оператор или группу операторов несколько раз, и ниже приводится общая форма оператора цикла в большинстве языков программирования.

Язык программирования ABAP предоставляет следующие типы циклов для обработки требований цикла.

S.No. Тип и описание петли
1 WHILE цикл

Повторяет утверждение или группу утверждений, когда данное условие истинно. Он проверяет условие перед выполнением тела цикла.

2 Сделать цикл

Оператор DO полезен для повторения определенной задачи определенное количество раз.

3 Вложенный цикл

Вы можете использовать один или несколько циклов внутри любого другого цикла WHILE или DO.

Заявления контроля цикла

Операторы управления циклом изменяют выполнение обычной последовательности. ABAP включает управляющие операторы, которые позволяют преждевременно завершать циклы. Он поддерживает следующие управляющие операторы.

S.No. Положение и описание управления
1 ПРОДОЛЖИТЬ

Заставляет цикл пропускать оставшуюся часть своего тела и запускает следующий проход цикла.

2 ЧЕК

Если условие ложно, то оставшиеся после CHECK операторы просто игнорируются, и система начинает следующий проход цикла.

3 ВЫХОД

Полностью завершает цикл и передает выполнение инструкции, следующей сразу за циклом.

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

Ниже приводится общая форма типичной структуры принятия решений, встречающейся в большинстве языков программирования.

Язык программирования ABAP предоставляет следующие типы операторов принятия решений.

S.No. Заявление и описание
1 Заявление IF

Оператор IF состоит из логического выражения, за которым следует один или несколько операторов.

2 ЕСЛИ ... Иное заявление

За оператором IF может следовать необязательный оператор ELSE, который выполняется, когда выражение ложно.

3 Вложенный оператор IF

Вы можете использовать один оператор IF или ELSEIF внутри другого оператора IF или ELSEIF.

4 Заявление о контроле CASE

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

Strings, которые широко используются в программировании ABAP, представляют собой последовательность символов.

Мы используем переменные типа данных C для хранения буквенно-цифровых символов, от 1 до 65 535 символов. По умолчанию они выровнены по левому краю.

Создание строк

Следующее объявление и инициализация создают строку, состоящую из слова «Hello». Размер строки в точности равен количеству символов в слове «Hello».

Data my_Char(5) VALUE 'Hello'.

Следующая программа представляет собой пример создания строк.

REPORT YT_SEP_15. 
DATA my_Char(5) VALUE 'Hello'. 
Write my_Char.

Приведенный выше код дает следующий вывод -

Hello

Длина строки

Чтобы найти длину символьных строк, мы можем использовать STRLEN statement. Функция STRLEN () возвращает количество символов, содержащихся в строке.

пример

REPORT YT_SEP_15. 
DATA: title_1(10) VALUE 'Tutorials',
      length_1 TYPE I. 
	
length_1 = STRLEN( title_1 ). 
Write: / 'The Length of the Title is:', length_1.

Приведенный выше код дает следующий вывод -

The Length of the Title is: 9

ABAP поддерживает широкий спектр операторов, управляющих строками.

S.No. Заявление и цель
1

CONCATENATE

Две струны соединяются, образуя третью струну.

2

CONDENSE

Этот оператор удаляет пробелы.

3

STRLEN

Используется для определения длины поля.

4

REPLACE

Используется для замены символов.

5

SEARCH

Для поиска в символьных строках.

6

SHIFT

Используется для перемещения содержимого строки влево или вправо.

7

SPLIT

Используется для разделения содержимого поля на два или более полей.

В следующем примере используются некоторые из вышеупомянутых утверждений -

пример

REPORT YT_SEP_15. 
DATA: title_1(10) VALUE 'Tutorials', 
      title_2(10) VALUE 'Point',
      spaced_title(30) VALUE 'Tutorials  Point  Limited',
      sep,
      dest1(30),
      dest2(30).
	
CONCATENATE title_1 title_2 INTO dest1. 
Write: / 'Concatenation:', dest1. 

CONCATENATE title_1 title_2 INTO dest2 SEPARATED BY sep. 
Write: / 'Concatenation with Space:', dest2. 

CONDENSE spaced_title.
Write: / 'Condense with Gaps:', spaced_title. 

CONDENSE spaced_title NO-GAPS. 
Write: / 'Condense with No Gaps:', spaced_title.

Приведенный выше код дает следующий вывод -

Concatenation: TutorialsPoint 
Concatenation with Space: Tutorials Point 
Condense with Gaps: Tutorials Point Limited 
Condense with No Gaps: TutorialsPointLimited

Note -

  • В случае конкатенации «сеп» вставляет пробел между полями.

  • Оператор CONDENSE удаляет пробелы между полями, но оставляет только 1 символ.

  • «NO-GAPS» - это необязательное дополнение к оператору CONDENSE, которое удаляет все пробелы.

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

ABAP предоставляет два встроенных типа для работы с датой и временем:

  • Тип данных D
  • Тип данных T

Ниже приведен основной формат -

DATA: date TYPE D, 
      time TYPE T.  
	
DATA: year TYPE I, 
month TYPE I,  
day TYPE I, 
hour TYPE I,  
minute TYPE I, 
second TYPE I.

Оба эти типа являются символьными типами фиксированной длины, которые имеют форму ГГГГММДД и ЧЧММСС соответственно.

Отметки времени

Помимо этих встроенных типов, два других типа TIMESTAMP и TIMESTAMPLиспользуются во многих стандартных таблицах приложений для хранения метки времени в формате UTC. В следующей таблице показаны основные типы даты и времени, доступные в ABAP.

S.No. Тип данных и описание
1

D

Встроенный тип даты с фиксированной длиной в формате ГГГГММДД. Например, значение 20100913 представляет дату 13 сентября 2010 г.

2

T

Встроенный тип времени фиксированной длины в форме ЧЧММСС. Например, значение 102305 представляет время 10:23:05 AM.

3

TIMESTAMP (Тип P - длина 8 без десятичных знаков)

Этот тип используется для представления коротких временных меток в форме ГГГГММДДччммсс. Например, значение 20100913102305 представляет дату 13 сентября 2010 г. в 10:23:05.

4

TIMESTAMPL (Тип P - длина 11 знаков после запятой 7)

TIMESTAMPL представляет длинные временные метки в форме ГГГГММДДччммсс, мммууун. Здесь дополнительные цифры «мммууун» обозначают доли секунды.

Текущая дата и время

Следующие ниже фрагменты кода извлекают текущую системную дату и время.

REPORT YR_SEP_15. 
DATA: date_1 TYPE D. 

date_1 = SY-DATUM. 
Write: / 'Present Date is:', date_1 DD/MM/YYYY. 

date_1 = date_1 + 06. 
Write: / 'Date after 6 Days is:', date_1 DD/MM/YYYY.

Приведенный выше код дает следующий вывод -

Present Date is: 21.09.2015 
Date after 6 Days is: 27.09.2015

Переменной date_1 присваивается значение текущей системной даты SY-DATUM. Затем мы увеличиваем значение даты на 6. С точки зрения вычисления даты в ABAP это означает, что мы увеличиваем компонент дня объекта даты на 6 дней. Среда выполнения ABAP достаточно умна, чтобы переносить значение даты всякий раз, когда она достигает конца месяца.

Расчет времени работает аналогично расчету даты. Следующий код увеличивает текущее системное время на 75 секунд, используя простую арифметику времени.

REPORT YR_SEP_15. 
DATA: time_1 TYPE T. 
      time_1 = SY-UZEIT. 

Write /(60) time_1 USING EDIT MASK 
'Now the Time is: __:__:__'. 
time_1 = time_1 + 75. 

Write /(60) time_1 USING EDIT MASK 
'A Minute and a Quarter from Now, it is: __:__:__'.

Приведенный выше код дает следующий вывод -

Now the Time is 11:45:05 
A Minute and a Quarter from Now, it is: 11:46:20

Работа с отметками времени

Вы можете получить текущее системное время и сохранить его в переменной отметки времени, используя GET TIME STAMPкак показано в следующем коде. Оператор GET TIME STAMP сохраняет метку времени в длинном или сокращенном формате в соответствии с типом используемого объекта данных метки времени. Значение отметки времени кодируется с использованием стандарта UTC.

REPORT YR_SEP_12. 
DATA: stamp_1 TYPE TIMESTAMP,
 
stamp_2 TYPE TIMESTAMPL. 
GET TIME STAMP FIELD stamp_1. 
Write: / 'The short time stamp is:', stamp_1 

TIME ZONE SY-ZONLO. 
GET TIME STAMP FIELD stamp_2. 
Write: / 'The long time stamp is:', stamp_2 
TIME ZONE SY-ZONLO.

Приведенный выше код дает следующий вывод -

The short time stamp is: 18.09.2015 11:19:40 
The long time stamp is: 18.09.2015 11:19:40,9370000

В приведенном выше примере мы отображаем метку времени, используя добавление TIME ZONE к оператору WRITE. Это дополнение форматирует вывод временной метки в соответствии с правилами для указанного часового пояса. Системное поле SY-ZONLO используется для отображения местного часового пояса, настроенного в предпочтениях пользователя.

ABAP предлагает различные типы параметров форматирования для форматирования вывода программ. Например, вы можете создать список, который включает в себя различные элементы, имеющие разные цвета или стили форматирования.

Оператор WRITE - это оператор форматирования, используемый для отображения данных на экране. Для оператора WRITE есть разные варианты форматирования. Синтаксис оператора WRITE:

WRITE <format> <f> <options>.

В этом синтаксисе <format> представляет спецификацию выходного формата, которая может быть прямой косой чертой (/), которая указывает отображение вывода, начиная с новой строки. Помимо косой черты, спецификация формата включает номер столбца и длину столбца. Например, оператор WRITE / 04 (6) показывает, что новая строка начинается со столбца 4, а длина столбца равна 6, тогда как оператор WRITE 20 показывает текущую строку со столбцом 20. Параметр <f> представляет переменную данных или пронумерованный текст.

В следующей таблице описаны различные пункты, используемые для форматирования -

S.No. Пункт и описание
1

LEFT-JUSTIFIED

Указывает, что вывод выровнен по левому краю.

2

CENTERED

Обозначает, что вывод центрирован.

3

RIGHT-JUSTIFIED

Указывает, что вывод выравнивается по правому краю.

4

UNDER <g>

Вывод начинается непосредственно под полем <g>.

5

NO-GAP

Указывает, что пустое поле после поля <f> отклоняется.

6

USING EDIT MASK <m>

Обозначает спецификацию шаблона формата <m>. Использование маски без редактирования: указывает, что шаблон формата, указанный в словаре ABAP, деактивирован.

7

NO-ZERO

Если поле содержит только нули, они заменяются пробелами.

Ниже приведены параметры форматирования полей числового типа.

S.No. Пункт и описание
1

NO-SIGN

Указывает, что на экране не отображается начальный знак.

2

EXPONENT <e>

Указывает, что в типе F (поля с плавающей запятой) показатель степени определяется в <e>.

3

ROUND <r>

Поля типа P (упакованные числовые типы данных) сначала умножаются на 10 ** (- r), а затем округляются до целого числа.

4

CURRENCY <c>

Обозначает, что форматирование выполняется в соответствии со значением валюты <c>, которое хранится в таблице базы данных TCURX.

5

UNIT <u>

Указывает, что количество десятичных знаков фиксируется в соответствии с единицей <u>, как указано в таблице базы данных T006 для типа P.

6

DECIMALS <d>

Указывает, что количество цифр <d> должно отображаться после десятичной точки.

Например, в следующей таблице показаны различные параметры форматирования для полей даты -

Вариант форматирования пример
ДД / ММ / ГГ 13.01.15
ММ / ДД / ГГ 13.01.15
ДД / ММ / ГГГГ 13.01.2015
ММ / ДД / ГГГГ 13.01.2015
ДДММГГ 130115
ММДДГГ 011315
ГГММДД 150113

Здесь DD означает дату в виде двух цифр, MM означает месяц в виде двух цифр, YY означает год в виде двух цифр, а YYYY означает год в четырех цифрах.

Давайте посмотрим на пример кода ABAP, который реализует некоторые из указанных выше параметров форматирования:

REPORT ZTest123_01.
 
DATA: n(9) TYPE C VALUE 'Tutorials', 
m(5) TYPE C VALUE 'Point'. 

WRITE: n, m. 
WRITE: / n, 
/ m UNDER n. 

WRITE: / n NO-GAP, m. 
DATA time TYPE T VALUE '112538'. 

WRITE: / time, 
/(8) time Using EDIT MASK '__:__:__'.

Приведенный выше код дает следующий вывод -

Tutorials Point 
Tutorials  
Point 
TutorialsPoint 
112538 
11:25:38

An exceptionэто проблема, возникающая во время выполнения программы. Когда возникает исключение, нормальный поток программы нарушается, и приложение программы аварийно завершает свою работу, что не рекомендуется, поэтому эти исключения должны быть обработаны.

Исключения позволяют передавать управление от одной части программы к другой. Обработка исключений ABAP построена на трех ключевых словах - RAISE, TRY, CATCH и CLEANUP. Предполагая, что блок вызовет исключение, метод перехватывает исключение, используя комбинацию ключевых слов TRY и CATCH. Блок TRY-CATCH помещается вокруг кода, который может генерировать исключение. Ниже приводится синтаксис использования TRY - CATCH -

TRY.      
Try Block <Code that raises an exception> 
  
CATCH  
Catch Block <exception handler M>  
. . . 
. . . 
. . . 
CATCH  
Catch Block <exception handler R>
   
CLEANUP. 
   Cleanup block <to restore consistent state>
 
ENDTRY.

RAISE- Исключения возникают, чтобы указать, что возникла некоторая исключительная ситуация. Обычно обработчик исключений пытается исправить ошибку или найти альтернативное решение.

TRY- Блок TRY содержит код приложения, исключения которого должны быть обработаны. Этот блок операторов обрабатывается последовательно. Он может содержать дополнительные управляющие структуры и вызовы процедур или других программ ABAP. За ним следует один или несколько блоков catch.

CATCH- Программа перехватывает исключение с помощью обработчика исключений в том месте программы, где вы хотите обработать проблему. Ключевое слово CATCH указывает на перехват исключения.

CLEANUP- Операторы блока CLEANUP выполняются всякий раз, когда возникает исключение в блоке TRY, который не перехватывается обработчиком той же конструкции TRY - ENDTRY. В предложении CLEANUP система может восстановить объект до согласованного состояния или освободить внешние ресурсы. То есть очистка может выполняться для контекста блока TRY.

Вызов исключений

Исключения могут возникать в любом месте метода, функционального модуля, подпрограммы и т. Д. Есть два способа вызвать исключение:

  • Исключения, вызванные системой времени выполнения ABAP.

    Например, Y = 1 / 0. Это приведет к ошибке времени выполнения типа CX_SY_ZERODIVIDE.

  • Исключения, поднятые программистом.

    Одновременное создание и создание объекта исключения. Вызов исключения с помощью объекта исключения, который уже существует в первом сценарии. Синтаксис: RAISE EXCEPTION exep.

Выявление исключений

Обработчики используются для перехвата исключений.

Давайте посмотрим на фрагмент кода -

DATA: result TYPE P LENGTH 8 DECIMALS 2, 
exref TYPE REF TO CX_ROOT, 
msgtxt TYPE STRING. 
PARAMETERS: Num1 TYPE I, Num2 TYPE I. 
TRY. 
result = Num1 / Num2. 
CATCH CX_SY_ZERODIVIDE INTO exref. 
msgtxt = exref→GET_TEXT( ). 

CATCH CX_SY_CONVERSION_NO_NUMBER INTO exref. 
msgtxt = exref→GET_TEXT( ).

В приведенном выше фрагменте кода мы пытаемся разделить Num1 на Num2, чтобы получить результат в переменной типа float.

Могут быть сгенерированы два типа исключений.

  • Ошибка преобразования числа.

  • Разделить на нулевое исключение. Обработчики перехватывают исключение CX_SY_CONVERSION_NO_NUMBER, а также исключение CX_SY_ZERODIVIDE. Здесь метод GET_TEXT () класса исключения используется для получения описания исключения.

Атрибуты исключений

Вот пять атрибутов и методов исключений -

S.No. Атрибут и описание
1

Textid

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

2

Previous

Этот атрибут может хранить исходное исключение, которое позволяет вам построить цепочку исключений.

3

get_text

Это возвращает текстовое представление в виде строки в соответствии с системным языком исключения.

4

get_longtext

Это возвращает длинный вариант текстового представления исключения в виде строки.

5

get_source_position

Предоставляет имя программы и номер строки, достигнутой в месте возникновения исключения.

пример

REPORT ZExceptionsDemo. 
PARAMETERS Num_1 TYPE I. 

DATA res_1 TYPE P DECIMALS 2. 
DATA orf_1 TYPE REF TO CX_ROOT. 
DATA txt_1 TYPE STRING. 

start-of-selection. 
Write: / 'Square Root and Division with:', Num_1. 
write: /. 

TRY. 
IF ABS( Num_1 ) > 150. 
RAISE EXCEPTION TYPE CX_DEMO_ABS_TOO_LARGE. 
ENDIF.
  
TRY. 
res_1 = SQRT( Num_1 ). 
Write: / 'Result of square root:', res_1. 
res_1 = 1 / Num_1. 

Write: / 'Result of division:', res_1. 
CATCH CX_SY_ZERODIVIDE INTO orf_1. 
txt_1 = orf_1→GET_TEXT( ). 
CLEANUP. 
CLEAR res_1. 
ENDTRY. 

CATCH CX_SY_ARITHMETIC_ERROR INTO orf_1. 
txt_1 = orf_1→GET_TEXT( ).

CATCH CX_ROOT INTO orf_1. 
txt_1 = orf_1→GET_TEXT( ). 
ENDTRY. 
IF NOT txt_1 IS INITIAL. 
Write / txt_1. 
ENDIF. 
Write: / 'Final Result is:', res_1.

В этом примере, если число больше 150, возникает исключение CX_DEMO_ABS_TOO_LARGE. Приведенный выше код дает следующий результат для числа 160.

Square Root and Division with: 160 
The absolute value of number is too high 
Final Result is:  0.00

Как вы знаете, SQL можно разделить на две части:

  • DML (язык манипулирования данными)
  • DDL (язык определения данных)

Часть DML состоит из команд запроса и обновления, таких как SELECT, INSERT, UPDATE, DELETE и т. Д., А программы ABAP обрабатывают часть DML SQL. Часть DDL состоит из таких команд, как CREATE TABLE, CREATE INDEX, DROP TABLE, ALTER TABLE и т.д., а ABAP Dictionary обрабатывает часть DDL SQL.

Словарь ABAP можно рассматривать как метаданные (то есть данные о данных), которые находятся в базе данных SAP вместе с метаданными, поддерживаемыми базой данных. Словарь используется для создания и управления определениями данных, а также для создания таблиц, элементов данных, доменов, представлений и типов.

Основные типы в словаре ABAP

Основные типы в словаре ABAP следующие:

  • Data elements описывать элементарный тип, определяя тип данных, длину и, возможно, десятичные разряды.

  • Structures с компонентами, которые могут иметь любой тип.

  • Table types описать структуру внутренней таблицы.

На различные объекты в среде словаря можно ссылаться в программах ABAP. Словарь известен как глобальная область. Объекты в словаре являются глобальными для всех программ ABAP, и данные в программах ABAP могут быть объявлены посредством ссылки на эти глобальные объекты словаря.

Словарь поддерживает определение определяемых пользователем типов, и эти типы используются в программах ABAP. Они также определяют структуру объектов базы данных, таких как таблицы, представления и индексы. Эти объекты автоматически создаются в базовой базе данных в их определениях Словаря при активации объектов. Словарь также предоставляет инструменты редактирования, такие как «Справка по поиску», и инструмент блокировки, например «Блокировать объекты».

Задачи словаря

Словарь ABAP достигает следующего:

  • Обеспечивает целостность данных.
  • Управляет определениями данных без избыточности.
  • Тесно интегрируется с остальной средой разработки ABAP.

пример

Любой сложный пользовательский тип может быть построен из 3 основных типов в Словаре. Данные клиента хранятся в структуре «Клиент» с компонентами Имя, Адрес и Телефон, как показано на следующем рисунке. Имя также представляет собой структуру с компонентами: Имя и Фамилия. Оба эти компонента являются элементарными, поскольку их тип определяется элементом данных.

Тип компонента Address определяется структурой, компоненты которой также являются структурами, а компонент Telephone определяется типом таблицы, потому что у клиента может быть более одного телефонного номера. Типы используются в программах ABAP, а также для определения типов параметров интерфейса функциональных модулей.

Три основных объекта для определения данных в ABAP Dictionary - это домены, элементы данных и таблицы. Домен используется для технического определения поля таблицы, такого как тип и длина поля, а элемент данных используется для семантического определения (краткое описание). Элемент данных описывает значение домена в определенном бизнес-контексте. Он содержит в основном справку по полю и метки полей на экране.

Домен назначается элементу данных, который, в свою очередь, назначается полям таблицы или полям структуры. Например, домен MATNR (номер материала CHAR) присваивается элементам данных, таким как MATNR_N, MATNN и MATNR_D, и они назначаются многим полям таблицы и полям структуры.

Создание доменов

Перед тем, как создать новый домен, проверьте, имеют ли какие-либо существующие домены те же технические характеристики, которые требуются в поле вашей таблицы. Если это так, мы должны использовать этот существующий домен. Обсудим процедуру создания домена.

Step 1 - Перейдите к транзакции SE11.

Step 2- Установите переключатель «Домен» на начальном экране словаря ABAP и введите имя домена, как показано на следующем снимке экрана. Нажмите кнопку СОЗДАТЬ. Вы можете создавать домены в пространствах имен клиентов, а имя объекта всегда начинается с «Z» или «Y».

Step 3- Введите описание в короткое текстовое поле на экране обслуживания домена. В данном случае это «Домен клиента».Note - Вы не можете ввести какой-либо другой атрибут, пока не введете этот атрибут.

Step 4- Введите тип данных, количество символов и десятичные разряды в блоке «Формат» на вкладке «Определение». Нажмите кнопку «Длина вывода», и она предложит и отобразит длину вывода. Если вы перезапишете предложенную длину вывода, вы можете увидеть предупреждение при активации домена. Вы можете заполнить Convers. Поля «Обычный», «Знак» и «Нижний регистр», если необходимо. Но это всегда необязательные атрибуты.

Step 5- Выберите вкладку «Диапазон значений». Если домен ограничен только фиксированными значениями, введите фиксированные значения или интервалы. Определите таблицу значений, если система должна предложить эту таблицу в качестве контрольной таблицы при определении внешнего ключа для полей, относящихся к этому домену. Но все это необязательные атрибуты.

Step 6- Сохраните изменения. Появится всплывающее окно «Создать запись в каталоге объектов» с запросом пакета. Вы можете ввести название пакета, в котором вы работаете. Если у вас нет пакета, вы можете создать его в навигаторе объектов или сохранить свой домен с помощью кнопки «Локальный объект».

Step 7- Активируйте свой домен. Щелкните значок «Активировать» (значок спички) или нажмите CTRL + F3, чтобы активировать домен. Появится всплывающее окно со списком 2 неактивных в настоящее время объекта, как показано на следующем снимке:

Step 8- На этом этапе должна быть активирована верхняя запись с надписью «DOMA» с именем ZSEP_18. Когда он выделен, нажмите кнопку с зеленой галочкой. Это окно исчезнет, ​​и в строке состояния отобразится сообщение «Объект активирован».

Если при активации домена возникли сообщения об ошибках или предупреждения, журнал активации отображается автоматически. В журнале активации отображается информация о процессе активации. Вы также можете вызвать журнал активации с помощью Утилиты (M) → Журнал активации.

Элементы данных описывают отдельные поля в словаре данных ABAP. Это наименьшие неделимые единицы сложных типов, которые используются для определения типа поля таблицы, компонента структуры или типа строки таблицы. Информация о значении поля таблицы, а также информация о редактировании соответствующего поля экрана может быть назначена элементу данных. Эта информация автоматически доступна для всех полей экрана, которые относятся к элементу данных. Элементы данных описывают либо элементарные типы, либо ссылочные типы.

Создание элементов данных

Перед созданием нового элемента данных вам необходимо проверить, имеют ли какие-либо существующие элементы данных те же семантические спецификации, которые требуются в вашем поле таблицы. Если да, вы можете использовать этот существующий элемент данных. Вы можете назначить элементу данных предопределенный тип, домен или ссылочный тип.

Ниже приводится процедура создания элемента данных -

Step 1 - Перейдите к транзакции SE11.

Step 2 - Установите переключатель «Тип данных» на начальном экране словаря ABAP и введите имя элемента данных, как показано ниже.

Step 3- Щелкните кнопку СОЗДАТЬ. Вы можете создавать элементы данных в пространствах имен клиентов, и имя объекта всегда начинается с «Z» или «Y».

Step 4 - Установите флажок Элемент данных во всплывающем окне СОЗДАТЬ ТИП, которое появляется с тремя переключателями.

Step 5- Щелкните значок зеленой галочки. Вы будете перенаправлены на экран обслуживания элемента данных.

Step 6- Введите описание в короткое текстовое поле экрана обслуживания элемента данных. В данном случае это «Элемент данных клиента».Note - Вы не можете ввести какой-либо другой атрибут, пока не введете этот атрибут.

Step 7- Присвойте элементу данных тип. Вы можете создать элементарный элемент данных, проверив элементарный тип, или элемент ссылочных данных, установив флажок Тип ссылки. Вы можете назначить элемент данных домену или предопределенному типу в элементарном типе и с именем ссылочного типа или ссылкой на предопределенный тип в ссылочном типе.

Step 8- Введите поля для краткого текста, среднего текста, подробного текста и заголовка на вкладке «Метка поля». Вы можете нажать Enter, и длина будет автоматически сгенерирована для этих этикеток.

Step 9- Сохраните изменения. Появится всплывающее окно «Создать запись в каталоге объектов» с запросом пакета. Вы можете ввести название пакета, в котором вы работаете. Если у вас нет пакета, вы можете создать его в навигаторе объектов или сохранить свой элемент данных с помощью кнопки «Локальный объект».

Step 10- Активируйте свой элемент данных. Щелкните значок «Активировать» (значок спички) или нажмите CTRL + F3, чтобы активировать элемент данных. Появится всплывающее окно со списком 2 неактивных в настоящее время объекта, как показано на следующем снимке экрана.

Step 11- На этом этапе должна быть активирована верхняя запись с меткой «DTEL» с именем Z_CUST. Когда он выделен, нажмите кнопку с зеленой галочкой. Это окно исчезнет, ​​и в строке состояния отобразится сообщение «Объект активирован».

Если при активации элемента данных возникли сообщения об ошибках или предупреждения, журнал активации отображается автоматически. В журнале активации отображается информация о процессе активации. Вы также можете вызвать журнал активации с помощью Утилиты (M) → Журнал активации.

Таблицы можно определять независимо от базы данных в ABAP Dictionary. Когда таблица активируется в ABAP Dictionary, аналогичная копия ее полей создается и в базе данных. Таблицы, определенные в ABAP Dictionary, автоматически переводятся в формат, совместимый с базой данных, поскольку определение таблицы зависит от базы данных, используемой системой SAP.

Таблица может содержать одно или несколько полей, каждое из которых определяется своим типом данных и длиной. Большой объем данных, хранящихся в таблице, распределяется между несколькими полями, определенными в таблице.

Типы полей таблицы

Таблица состоит из множества полей, и каждое поле содержит множество элементов. В следующей таблице перечислены различные элементы полей таблицы -

S.No. Элементы и описание
1

Field name

Это имя, присвоенное полю, которое может содержать максимум 16 символов. Имя поля может состоять из цифр, букв и знаков подчеркивания. Оно должно начинаться с буквы.

2

Key flag

Определяет, принадлежит ли поле ключевому полю.

3

Field type

Назначает тип данных полю.

4

Field length

Количество символов, которое можно ввести в поле.

5

Decimal places

Определяет допустимое количество цифр после десятичной точки. Этот элемент используется только для числовых типов данных.

6

Short text

Описывает значение соответствующего поля.

Создание таблиц в словаре ABAP

Step 1- Перейдите к транзакции SE11, выберите переключатель «Таблица базы данных» и введите имя для создаваемой таблицы. В нашем случае мы ввели имя ZCUSTOMERS1. Нажмите кнопку "Создать". Появится экран «Словарь: ведение таблицы». Здесь по умолчанию выбрана вкладка «Доставка и обслуживание».

Step 2 - Введите пояснительный короткий текст в поле Краткое описание.

Step 3- Щелкните значок «Справка по поиску» рядом с полем «Класс доставки». Выберите вариант «A [Таблица приложения (основные данные и данные транзакции)]».

Step 4- Выберите параметр «Отображение / обслуживание разрешено» в раскрывающемся меню «Обозреватель данных / обслуживание в виде таблицы». Появится экран Словарь: Таблица обслуживания.

Step 5- Выберите вкладку Поля. Появится экран, содержащий параметры, относящиеся к вкладке «Поля».

Step 6- Введите названия полей таблицы в столбец Поле. Имя поля может содержать буквы, цифры и символы подчеркивания, но оно всегда должно начинаться с буквы и не должно быть длиннее 16 символов.

Поля, которые должны быть созданы, также должны иметь элементы данных, потому что они принимают такие атрибуты, как тип данных, длина, десятичные разряды и краткий текст, из определенного элемента данных.

Step 7- Выберите столбец Ключ, если вы хотите, чтобы поле было частью ключа таблицы. Давайте создадим такие поля, как КЛИЕНТ, КЛИЕНТ, ИМЯ, НАЗВАНИЕ и ДОБ.

Step 8- Первое поле является важным и определяет клиента, с которым связаны записи. Введите «Клиент» в качестве поля и «МАНДТ» в качестве элемента данных. Система автоматически заполняет тип данных, длину, десятичные дроби и краткое описание. Поле «Клиент» становится ключевым, если установить флажок «Ключ».

Step 9- Следующее поле - «Клиент». Установите флажок, чтобы сделать его ключевым полем, и введите новый элемент данных «ZCUSTNUM». Нажмите кнопку "Сохранить".

Step 10- Поскольку элемент данных «ZCUSTNUM» еще не существует, его необходимо создать. Дважды щелкните новый элемент данных, и откроется окно «Создать элемент данных». Ответьте на это «Да», и откроется окно «Сохранить элемент данных».

Step 11- Введите «Номер клиента» в поле «Краткое описание». Элементарный тип данных под названием «Домен» должен быть определен для нового элемента данных. Поэтому введите «ZCUSTD1», дважды щелкните его и согласитесь сохранить внесенные изменения. Выберите «Да», чтобы создать домен, и введите в поле «Краткое описание» описание домена.

Вкладка «Определение» открывается автоматически. Первое поле - «Тип данных».

Step 12- Щелкните внутри поля и выберите тип «NUMC» из раскрывающегося меню. Введите цифру 8 в поле «No. символов »(максимум 8 символов) и введите 0 в поле« Десятичные разряды ». Необходимо выбрать длину вывода 8 и затем нажать Enter. Описание поля "NUMC" должно появиться снова, подтверждая, что это допустимая запись.

Step 13 - Нажмите кнопку «Сохранить» и активируйте объект.

Step 14- Нажмите F3, чтобы вернуться к экрану «Ведение / изменение элемента данных». Создайте четыре метки поля, как показано на следующем снимке. После этого сохраните и активируйте элемент.

Step 15- Нажмите кнопку «Назад», чтобы вернуться к экрану обслуживания стола. В столбце «Клиент» указаны правильный тип данных, длина, десятичные дроби и краткое описание. Это указывает на успешное создание элемента данных, а также используемого домена.

Точно так же нам нужно создать три дополнительных поля, таких как NAME, TITLE и DOB.

Step 16- Выберите «Технические настройки» на панели инструментов. Выберите APPL0 в поле «Класс данных» и первую категорию размера 0 для поля «Категория размера». В случае параметров буферизации необходимо выбрать «Буферизация не разрешена».

Step 17- Щелкните Сохранить. Вернитесь к столу и активируйте его. Появится следующий экран.

Таблица «ZCUSTOMERS1» активирована.

Structure это объект данных, который состоит из компонентов любого типа данных, хранящихся один за другим в памяти.

Структуры полезны для рисования экранных полей и для управления данными, имеющими согласованный формат, определяемый дискретным числом полей.

Структура может иметь только одну запись во время выполнения, но таблица может иметь много записей.

Создание структуры

Step 1 - Перейти к транзакции SE11.

Step 2- Щелкните на опции «Тип данных» на экране. Введите имя «ZSTR_CUSTOMER1» и нажмите кнопку «Создать».

Step 3- Выберите опцию «Структура» на следующем экране и нажмите Enter. Вы можете увидеть мастер «Ведение / изменение структуры».

Step 4 - Введите краткое описание, как показано на следующем снимке.

Step 5 - Введите компонент (имя поля) и тип компонента (элемент данных).

Note: Здесь имена компонентов начинаются с Z согласно рекомендации SAP. Давайте использовать элементы данных, которые мы уже создали в таблице базы данных.

Step 6 - Вам необходимо сохранить, проверить и активировать после предоставления всех компонентов и типов компонентов.

Появится следующий экран -

Step 7- Поскольку этот «ZSTR_CUSTOMER1» выделен, нажмите зеленую кнопку с галочкой. Это окно исчезнет, ​​и в строке состояния отобразится сообщение «Активно».

Структура теперь активирована, как показано на следующем снимке -

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

Данные, относящиеся к объекту приложения, распределяются между несколькими таблицами с помощью представлений базы данных. Они используют условие внутреннего соединения для соединения данных разных таблиц. Представление обслуживания используется для отображения и изменения данных, хранящихся в объекте приложения. С каждым ракурсом обслуживания связан статус обслуживания.

Мы используем проекционный вид для маскировки нежелательных полей и отображения только соответствующих полей в таблице. Виды проекции должны быть определены над одной прозрачной таблицей. Вид проекции содержит ровно одну таблицу. Мы не можем определить условия выбора для проекционных видов.

Создание представления

Step 1- Установите переключатель «Просмотр» на начальном экране словаря ABAP. Введите имя создаваемого представления и нажмите кнопку «Создать». Мы ввели имя представления как ZVIEW_TEST.

Step 2- При выборе типа просмотра выберите переключатель «Просмотр проекции» и нажмите кнопку «Копировать». Появится экран «Словарь: изменить вид».

Step 3 - Введите краткое описание в поле Краткое описание и имя таблицы, которая будет использоваться в поле Базовая таблица, как показано на следующем снимке.

Step 4 - Нажмите кнопку «Поля таблицы», чтобы включить поля таблицы ZCUSTOMERS1 в проекционный вид.

Step 5- Появится экран выбора поля из таблицы ZCUSTOMERS1. Выберите поля, которые вы хотите включить в проекционный вид, как показано на следующем снимке.

Step 6 - После нажатия кнопки «Копировать» все выбранные поля для проекционного вида отображаются на экране «Словарь: изменить вид».

Step 7- Выберите вкладку «Состояние обслуживания», чтобы определить метод доступа. Выберите радиокнопку только для чтения и опцию «Отображение / обслуживание разрешено с ограничениями» в раскрывающемся меню «Обозреватель данных / Обслуживание табличного представления».

Step 8- Сохранить и активировать. На экране «Словарь: изменение вида» выберите «Утилиты (M)»> «Содержание», чтобы отобразить экран выбора для ZVIEW_TEST.

Step 9- Щелкните значок «Выполнить». Результат проекционного вида будет таким, как показано на следующем снимке экрана.

Таблица ZCUSTOMERS1 состоит из 5 полей. Здесь отображаются 3 поля (Клиент, Номер клиента и Имя) с 4 записями. Номера клиентов от 100001 до 100004 с соответствующими именами.

Справка по поиску, еще один объект репозитория ABAP Dictionary, используется для отображения всех возможных значений поля в виде списка. Этот список также известен какhit list. Вы можете выбрать значения, которые должны быть введены в поля из этого списка совпадений, вместо того, чтобы вводить значение вручную, что утомительно и подвержено ошибкам.

Создание справки по поиску

Step 1- Перейти к транзакции SE11. Установите переключатель в положение "Справка по поиску". Введите имя создаваемой справки по поиску. Введем имя ZSRCH1. Щелкните по кнопке Create.

Step 2- Система предложит создать тип справки по поиску. Выберите справку элементарного поиска, которая используется по умолчанию. Появится экран для создания элементарной справки по поиску, как показано на следующем снимке экрана.

Step 3- В методе выбора нам нужно указать, является ли наш источник данных таблицей или представлением. В нашем случае это стол. Таблица - ZCUSTOMERS1. Он выбирается из списка выбора.

Step 4- После того, как метод выбора введен, следующее поле - Тип диалога. Это контролирует внешний вид ограничительного диалогового окна. Есть раскрывающийся список с тремя вариантами. Выберем вариант «Показывать значения немедленно».

Step 5- Далее идет область параметров. Для каждого параметра или поля справки поиска эти поля столбца должны быть введены в соответствии с требованиями.

  • Search help parameter- Это поле из источника данных. Поля из таблицы перечислены в списке выбора. Поля, участвующие в справке по поиску, будут введены по одному полю в каждой строке. Включим два поля CUSTOMER и NAME. Как эти два поля участвуют, указано в остальных столбцах.

  • Import- Это поле является флажком, указывающим, является ли параметр справки поиска параметром импорта. Экспорт или импорт осуществляется со ссылкой на справку по поиску.

  • Export- Это поле является флажком, указывающим, является ли параметр справки поиска параметром экспорта. Экспорт - это перенос значений полей из списка выбора в поля экрана.

  • LPos- Его значение определяет физическое положение параметра или поля справки по поиску в списке выбора. Если вы введете значение 1, поле появится на первой позиции в списке выбора и так далее.

  • SPos- Он контролирует физическое положение параметра или поля справки по поиску в ограничительном диалоговом окне. Если вы введете значение 1, поле появится в первой позиции в ограничительном диалоговом окне и так далее.

  • Data element- Каждому параметру или полю справки поиска по умолчанию назначается элемент данных, который был назначен ему в источнике данных (таблица или представление). Это имя элемента данных отображается в режиме отображения.

Step 6- Выполните проверку согласованности и активируйте справку по поиску. Нажмите F8, чтобы выполнить. Появится экран «Справка по тестированию поиска ZSRCH1», как показано на следующем снимке экрана.

Step 7- Давайте введем число 100004 в поле экрана «Готово для inp» КЛИЕНТА. Нажмите Ввод.

Отображается номер клиента 100004 и имя «Стивен».

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

Механизм блокировки

Ниже приведены две основные функции, выполняемые с помощью механизма блокировки:

  • Программа может общаться с другими программами о записях данных, которые она просто читает или изменяет.

  • Программа может предотвратить чтение данных, которые только что были изменены другой программой.

А lock requestсначала создается программой. Затем этот запрос поступает на сервер постановки в очередь, и блокировка создается в таблице блокировок. Сервер Enqueue устанавливает блокировку, и программа наконец готова к доступу к данным.

Создание объектов блокировки

Step 1- Перейти к транзакции SE11. Откроется следующий экран.

Step 2- Установите переключатель "Заблокировать объект". Введите имя объекта блокировки, начиная с E, и нажмите кнопку «Создать». Здесь мы используем EZLOCK12.

Step 3 - Введите краткое описание и перейдите на вкладку Таблицы.

Step 4 - Введите имя таблицы в поле «Имя» и выберите режим блокировки «Блокировка записи».

Step 5 - Щелкните вкладку параметров блокировки, появится следующий экран.

Step 6- Сохранить и активировать. Автоматически будут сгенерированы 2 функциональных модуля. Чтобы проверить функциональные модули, мы можем использовать Перейти к → Блокировать модули.

Step 7 - Щелкните «Блокировать модули», откроется следующий экран.

Объект блокировки успешно создан.

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

Это хорошая практика, чтобы ваши программы были как можно более самодостаточными и удобными для чтения. Просто попробуйте разделить большие и сложные задачи на более мелкие и простые, поместив каждую задачу в отдельный модуль, на котором разработчик может сосредоточиться, не отвлекаясь.

В среде SAP ABAP модуляризация включает организацию программ в модульные блоки, также известные как logical blocks. Это снижает избыточность и повышает удобочитаемость программы даже в процессе ее создания и впоследствии во время цикла обслуживания. Модуляризация также позволяет повторно использовать один и тот же код. ABAP потребовал от разработчиков модульности, т. Е. Относительно большей организации программ, чем в языках на основе OOPS, которые имеют относительно больше встроенных модульных функций. После завершения, отладки и так далее небольшого модульного раздела кода его не нужно будет возвращать, и разработчики могут перейти к другим вопросам и сосредоточиться на других вопросах.

Программы ABAP состоят из блоков обработки, известных как модульные блоки обработки. Они -

  • Блоки обработки, вызываемые извне программы и из среды выполнения ABAP (т. Е. Блоки событий и диалоговые модули).

  • Блоки обработки, вызываемые из программ ABAP.

Помимо модульности с блоками обработки, модули исходного кода используются для модуляции исходного кода с помощью макросов и включения программ.

Модуляризация на уровне исходного кода -

  • Локальные макросы
  • Программы Global Include

Модуляризация через блоки обработки, вызываемые из программ ABAP -

  • Subroutines
  • Функциональные модули

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

Подпрограмма - это многократно используемый фрагмент кода. Это модуль модуляризации в программе, в котором функция инкапсулируется в виде исходного кода. Вы выводите часть программы на страницу подпрограммы, чтобы получить лучший обзор основной программы, и многократно использовать соответствующую последовательность операторов, как показано на следующей диаграмме.

У нас есть программа X с 3 разными source code blocks. Каждый блок имеет одинаковые операторы ABAP. По сути, это одни и те же блоки кода. Чтобы упростить сопровождение этого кода, мы можем инкапсулировать код в подпрограмму. Мы можем вызывать эту подпрограмму в наших программах сколько угодно раз. Подпрограмму можно определить с помощью операторов Form и EndForm.

Ниже приводится общий синтаксис определения подпрограммы.

FORM <subroutine_name>.
  
<statements> 
  
ENDFORM.

Мы можем вызвать подпрограмму с помощью оператора PERFORM. Управление переходит к первому исполняемому оператору в подпрограмме <subroutine_name>. Когда встречается ENDFORM, управление возвращается к оператору, следующему за оператором PERFORM.

пример

Step 1- Перейти к транзакции SE80. Откройте существующую программу и щелкните программу правой кнопкой мыши. В данном случае это «ZSUBTEST».

Step 2- Выберите «Создать», а затем выберите «Подпрограмма». Введите имя подпрограммы в поле и нажмите кнопку «Продолжить». Имя подпрограммы - «Sub_Display», как показано на следующем снимке экрана.

Step 3- Напишите код в блоке операторов FORM и ENDFORM. Подпрограмма успешно создана.

Нам нужно включить оператор PERFORM для вызова подпрограммы. Давайте посмотрим на код -

REPORT ZSUBTEST. 
PERFORM Sub_Display.

* Form Sub_Display 
* -->  p1 text 
* <--  p2 text 
 
FORM Sub_Display. 
Write: 'This is Subroutine'. 
Write: / 'Subroutine created successfully'. 
ENDFORM.                    " Sub_Display

Step 4- Сохранить, активировать и запустить программу. Приведенный выше код дает следующий вывод -

Subroutine Test:
   
This is Subroutine
  
Subroutine created successfully

Следовательно, использование подпрограмм делает вашу программу более функционально-ориентированной. Он разделяет задачу программы на подфункции, так что каждая подпрограмма отвечает за одну подфункцию. Ваша программа становится проще в обслуживании, поскольку изменения функций часто приходится вносить только в подпрограмму.

Если мы хотим повторно использовать один и тот же набор операторов в программе более одного раза, нам необходимо включить их в макрос. Например, макрос может быть полезен для длительных вычислений или для написания сложных операторов WRITE. Мы можем использовать макрос только в программе, в которой он определен. Определение макроса должно произойти до использования макроса в программе.

Макросы созданы на основе заполнителей. Заполнитель работает как указатели в языке C. Вы можете определить макрос в операторе DEFINE ... END-OF-DEFINITION.

Ниже приведен основной синтаксис определения макроса.

DEFINE <macro_name>. <statements> 
END-OF-DEFINITION. 
   ...... 
  
   <macro_name> [<param1> <param2>....].

Перед вызовом макроса необходимо определить его. <param1>…. заменяет заполнители & 1 ... в операторах ABAP, содержащихся в определении макроса.

Максимальное количество заполнителей в определении макроса - девять. То есть, когда программа выполняется, система SAP заменяет макрос соответствующими операторами, а заполнители & 1, & 2,…. & 9 заменяются параметрами param1, param2, .... param9. Мы можем вызывать макрос в другом макросе, но не в том же макросе.

пример

Переходим к транзакции SE38. Создайте новую программу ZMACRO_TEST вместе с описанием в коротком текстовом поле, а также с соответствующими атрибутами, такими как Тип и Статус, как показано на следующем снимке экрана -

Ниже приведен код -

REPORT ZMACRO_TEST. 
DEFINE mac_test. 
WRITE: 'This is Macro &1'. 
END-OF-DEFINITION. 

PARAMETERS: s1 type C as checkbox. 
PARAMETERS: s2 type C as checkbox. 
PARAMETERS: s3 type C as checkbox default 'X'. 

START-OF-SELECTION. 
IF s1 = 'X'. 
   mac_test 1. ENDIF. 
IF s2 = 'X'. 
   mac_test 2. 
ENDIF.
 
IF s3 = 'X'. 
   mac_test 3. 
ENDIF.

У нас есть 3 флажка. При запуске программы поставим галочку в поле S2.

Приведенный выше код дает следующий вывод -

A Macro Program 
 
This is Macro 2

Если все флажки установлены, код дает следующий вывод:

A Macro Program 
 
This is Macro 1 This is Macro 2 This is Macro 3

Функциональные модули составляют основную часть системы SAP, потому что в течение многих лет SAP модулировал код с использованием функциональных модулей, что позволяет повторно использовать код самими разработчиками, а также их клиентами.

Функциональные модули - это подпрограммы, которые содержат набор многократно используемых операторов с параметрами импорта и экспорта. В отличие от программ Include, функциональные модули могут выполняться независимо. Система SAP содержит несколько предопределенных функциональных модулей, которые можно вызывать из любой программы ABAP. Функциональная группа действует как своего рода контейнер для ряда функциональных модулей, которые логически должны быть вместе. Например, функциональные модули для системы расчета заработной платы HR будут объединены в функциональную группу.

Чтобы понять, как создавать функциональные модули, необходимо изучить конструктор функций. Вы можете найти конструктор функций с кодом транзакции SE37. Просто введите часть имени функционального модуля с подстановочным знаком, чтобы продемонстрировать способ поиска функциональных модулей. Введите * amount * и нажмите клавишу F4.

Результаты поиска будут отображены в новом окне. Функциональные модули отображаются линиями на синем фоне, а их функциональные группы - розовыми линиями. Вы можете дополнительно изучить функциональную группу ISOC, используя экран Object Navigator (Transaction SE80). Вы можете увидеть список функциональных модулей, а также другие объекты, содержащиеся в функциональной группе. Рассмотрим функциональный модуль SPELL_AMOUNT. Этот функциональный модуль преобразует числовые цифры в слова.

Создание новой программы

Step 1 - Перейдите к транзакции SE38 и создайте новую программу с именем Z_SPELLAMOUNT.

Step 2- Введите код, чтобы можно было настроить параметр, в который можно было бы ввести значение и передать его в функциональный модуль. Текстовый элемент text-001 здесь читается как «Введите значение».

Step 3- Чтобы написать код для этого, используйте CTRL + F6. После этого появляется окно, в котором «ФУНКЦИЯ ВЫЗОВА» является первой опцией в списке. Введите "spell_amount" в текстовое поле и нажмите кнопку "Продолжить".

Step 4- Какой-то код генерируется автоматически. Но нам нужно улучшить оператор IF, чтобы он включал код для ЗАПИСИ сообщения на экран, в котором говорится: «Функциональный модуль вернул значение: sy-subrc», и добавление оператора ELSE, чтобы выводить правильный результат, когда функция модуль выполнен успешно. Здесь необходимо настроить новую переменную для хранения значения, возвращаемого из функционального модуля. Назовем это как «результат».

Ниже приведен код -

REPORT Z_SPELLAMOUNT. 
data result like SPELL. 

selection-screen begin of line. 
selection-screen comment 1(15) text-001. 

parameter num_1 Type I. 
selection-screen end of line. 
CALL FUNCTION 'SPELL_AMOUNT' 
EXPORTING 
AMOUNT = num_1 
IMPORTING 
IN_WORDS = result. 

IF SY-SUBRC <> 0. 
   Write: 'Value returned is:', SY-SUBRC. 
else. 
   Write: 'Amount in words is:', result-word. 
ENDIF.

Step 5- Переменная, которую возвращает функциональный модуль, называется IN_WORDS. Установите соответствующую переменную в программе под названием «результат». Определите IN_WORDS, используя оператор LIKE для ссылки на структуру с именем SPELL.

Step 6- Сохранить, активировать и запустить программу. Введите значение, как показано на следующем снимке экрана, и нажмите F8.

Приведенный выше код дает следующий вывод -

Spelling the Amount 
Amount in words is: 
FIVE THOUSAND SIX HUNDRED EIGHTY

Включаемые программы - это объекты глобального репозитория, используемые для модульного построения исходного кода. Они позволяют использовать один и тот же исходный код в разных программах. Включенные программы также позволяют упорядоченно управлять сложными программами. Чтобы использовать включаемую программу в другой программе, мы используем следующий синтаксис -

INCLUDE <program_name>.

Оператор INCLUDE имеет тот же эффект, что и копирование исходного кода включаемой программы <program_name> в другую программу. Поскольку программа include не может работать независимо, она должна быть встроена в другие программы. Вы также можете вкладывать включаемые программы.

Ниже приведены несколько ограничений при написании кода для программ Include.

  • Включаемые программы не могут вызывать сами себя.
  • Программы включения должны содержать полные инструкции.

Ниже приведены шаги по созданию и использованию программы Include.

Step 1- Создайте программу (Z_TOBEINCLUDED), которая будет включена в ABAP Editor. Код для включения в редактор ABAP -

PROGRAM Z_TOBEINCLUDED.  
Write: / 'This program is started by:', SY-UNAME,
       / 'The Date is:', SY-DATUM,
       / 'Time is', SY-UZEIT.

Step 2 - Установите для Типа программы значение ВКЛЮЧИТЬ программу, как показано на следующем снимке экрана.

Step 3 - Нажмите кнопку «Сохранить» и сохраните программу в пакете с именем ZINCL_PCKG.

Step 4- Создайте другую программу, в которой должна использоваться программа Z_TOBEINCLUDED. Здесь мы создали другую программу с именем Z_INCLUDINGTEST и присвоили ей тип как Executable program.

Step 5 - Кодирование программы Z_INCLUDINGTEST включает программу Z_TOBEINCLUDED с помощью оператора INCLUDE, как показано в следующем коде.

REPORT Z_INCLUDINGTEST.  
INCLUDE Z_TOBEINCLUDED.

Step 6 - Сохранить, активировать и запустить программу.

Приведенный выше код дает следующий вывод -

This program is started by: SAPUSER 
The Date is: 06.10.2015 
Time is 13:25:11

Открытый SQL указывает подмножество операторов ABAP, которые обеспечивают прямой доступ к данным в центральной базе данных текущего AS ABAP. Операторы Open SQL сопоставляют функциональные возможности языка манипулирования данными SQL в ABAP, которые поддерживаются всеми системами баз данных.

Операторы Open SQL преобразуются в SQL для конкретной базы данных в интерфейсе Open SQL интерфейса базы данных. Затем они передаются в систему базы данных и выполняются. Операторы Open SQL могут использоваться для доступа к таблицам базы данных, объявленным в словаре ABAP. Доступ к центральной базе данных AS ABAP осуществляется по умолчанию, а также доступ к другим базам данных возможен через подключения к вторичным базам данных.

Каждый раз, когда какой-либо из этих операторов используется в программе ABAP, важно проверить, было ли выполненное действие успешным. Если кто-то пытается вставить запись в таблицу базы данных, и она вставлена ​​неправильно, очень важно знать, чтобы в программе можно было предпринять соответствующие действия. Это можно сделать с помощью уже использованного системного поля, то есть SY-SUBRC. Когда оператор выполняется успешно, поле SY-SUBRC будет содержать значение 0, поэтому его можно проверить, и можно продолжить выполнение программы, если оно появится.

Оператор DATA используется для объявления рабочей области. Назовем его wa_customers1. Вместо объявления одного типа данных для этого можно объявить несколько полей, составляющих таблицу. Самый простой способ сделать это - использовать оператор LIKE.

ВСТАВИТЬ заявление

Рабочая область wa_customers1 здесь объявлена ​​КАК таблица ZCUSTOMERS1, принимая ту же структуру, не становясь самой таблицей. В этой рабочей области может храниться только одна запись. После объявления оператор INSERT можно использовать для вставки рабочей области и содержащейся в ней записи в таблицу. Код здесь будет читаться как «ВСТАВИТЬ ZCUSTOMERS1 FROM wa_customers1».

Рабочая область должна быть заполнена некоторыми данными. Используйте имена полей из таблицы ZCUSTOMERS1. Это можно сделать с помощью прямой навигации, двойного щелчка по имени таблицы в коде или открытия нового сеанса и использования транзакции SE11. Затем поля таблицы можно скопировать и вставить в редактор ABAP.

Ниже приведен фрагмент кода -

DATA wa_customers1 LIKE ZCUSTOMERS1. 
wa_customers1-customer = '100006'. 
wa_customers1-name = 'DAVE'. 
wa_customers1-title = 'MR'. 
wa_customers1-dob = '19931017'. 
INSERT ZCUSTOMERS1 FROM wa_customers1.

Затем оператор CHECK можно использовать следующим образом. Это означает, что если запись вставлена ​​правильно, система сообщит об этом. Если нет, то будет отображаться код SY-SUBRC, который не равен нулю. Ниже приведен фрагмент кода -

IF SY-SUBRC = 0. 
   WRITE 'Record Inserted Successfully'.  
ELSE. 
   WRITE: 'The return code is ', SY-SUBRC. 
ENDIF.

Проверьте программу, сохраните, активируйте код, а затем протестируйте его. В окне вывода должно отображаться сообщение «Запись успешно вставлена».

ЯСНОЕ заявление

Оператор CLEAR позволяет очистить поле или переменную для вставки на их место новых данных, позволяя использовать их повторно. Оператор CLEAR обычно используется в программах и позволяет многократно использовать существующие поля.

В предыдущем фрагменте кода структура рабочей области была заполнена данными для создания новой записи, которая будет вставлена ​​в таблицу ZCUSTOMERS1, а затем выполняется проверка достоверности. Если мы хотим вставить новую запись, необходимо использовать оператор CLEAR, чтобы затем ее можно было снова заполнить новыми данными.

Заявление UPDATE

Если вы хотите обновить одну или несколько существующих записей в таблице одновременно, используйте оператор UPDATE. Подобно оператору INSERT, объявляется рабочая область, заполняемая новыми данными, которые затем помещаются в запись по мере выполнения программы. Здесь будет обновлена ​​запись, ранее созданная с помощью оператора INSERT. Просто отредактируйте текст, хранящийся в полях NAME и TITLE. Затем в новой строке используется та же структура, что и для оператора INSERT, и на этот раз с использованием оператора UPDATE, как показано в следующем фрагменте кода:

DATA wa_customers1 LIKE ZCUSTOMERS1. 
wa_customers1-customer = '100006'. 
wa_customers1-name = 'RICHARD'. 
wa_customers1-title = 'MR'. 
wa_customers1-dob = '19931017'. 
UPDATE ZCUSTOMERS1 FROM wa_customers1.

По мере выполнения инструкции UPDATE вы можете просмотреть обозреватель данных в словаре ABAP, чтобы убедиться, что запись была успешно обновлена.

Заявление MODIFY

Оператор MODIFY можно рассматривать как комбинацию операторов INSERT и UPDATE. Его можно использовать для вставки новой записи или изменения существующей записи. Он следует синтаксису, аналогичному двум предыдущим операторам, при изменении записи данных, введенных в рабочую область.

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

Ниже приведен фрагмент кода для создания новой записи -

CLEAR wa_customers1.
 
DATA wa_customers1 LIKE ZCUSTOMERS1. 
wa_customers1-customer = '100007'. 
wa_customers1-name = 'RALPH'. 
wa_customers1-title = 'MR'. 
wa_customers1-dob = '19910921'. 
MODIFY ZCUSTOMERS1 FROM wa_customers1.

В этом примере используется оператор CLEAR, чтобы новая запись могла быть помещена в рабочую область, а затем добавлен клиент (номер) 100007. Поскольку это новое уникальное значение ключевого поля, будет вставлена ​​новая запись и будет выполнена еще одна проверка.

Когда это будет выполнено и данные будут просмотрены в браузере данных, будет создана новая запись для номера клиента 100007 (RALPH).

Приведенный выше код дает следующий вывод (содержимое таблицы) -

Термин «собственный SQL» относится ко всем операторам, которые могут быть статически переданы в интерфейс собственного SQL интерфейса базы данных. Собственные операторы SQL не входят в языковую область ABAP и не соответствуют синтаксису ABAP. ABAP просто содержит операторы для изоляции разделов программы, в которых могут быть перечислены операторы собственного SQL.

В собственном SQL могут использоваться в основном операторы SQL, специфичные для базы данных. Они без изменений передаются из собственного интерфейса SQL в систему базы данных и выполняются. Можно использовать всю языковую область SQL соответствующей базы данных, и адресованные таблицы базы данных не нужно объявлять в словаре ABAP. Существует также небольшой набор специфичных для SAP операторов Native SQL, которые особым образом обрабатываются встроенным интерфейсом SQL.

Чтобы использовать собственный оператор SQL, вы должны предшествовать ему оператором EXEC SQL и заканчиваться оператором ENDEXEC.

Ниже приводится синтаксис -

EXEC SQL PERFORMING <form>.  
   <Native SQL statement> 
ENDEXEC.

Эти операторы определяют область в программе ABAP, где могут быть перечислены один или несколько операторов Native SQL. Введенные операторы передаются в интерфейс Native SQL, а затем обрабатываются следующим образом:

  • Все операторы SQL, допустимые для программного интерфейса адресуемой системы баз данных, могут быть перечислены между EXEC и ENDEXEC, в частности операторы DDL (язык определения данных).

  • Эти операторы SQL передаются из интерфейса Native SQL в систему базы данных практически без изменений. Правила синтаксиса определяются системой базы данных, особенно правила чувствительности к регистру для объектов базы данных.

  • Если синтаксис допускает разделитель между отдельными операторами, вы можете включить множество операторов Native SQL между EXEC и ENDEXEC.

  • Специфичные для SAP элементы нативного языка SQL могут быть указаны между EXEC и ENDEXEC. Эти операторы не передаются напрямую из интерфейса Native SQL в базу данных, но они соответствующим образом преобразуются.

пример

SPFLI - это стандартная таблица SAP, которая используется для хранения информации о расписании рейсов. Это доступно в системах SAP R / 3 в зависимости от версии и уровня выпуска. Эту информацию можно просмотреть, введя имя таблицы SPFLI в соответствующую транзакцию SAP, например SE11 или SE80. Вы также можете просмотреть данные, содержащиеся в этой таблице базы данных, используя эти две транзакции.

REPORT ZDEMONATIVE_SQL. 
DATA: BEGIN OF wa,  
      connid  TYPE SPFLI-connid,
      cityfrom TYPE SPFLI-cityfrom,
      cityto  TYPE SPFLI-cityto,  
      END OF wa. 
	
DATA c1 TYPE SPFLI-carrid VALUE 'LH'. 
EXEC SQL PERFORMING loop_output.
   SELECT connid, cityfrom, cityto  
   INTO :wa  
   FROM SPFLI  
   WHERE carrid = :c1 
ENDEXEC. 

FORM loop_output.  
   WRITE: / wa-connid, wa-cityfrom, wa-cityto. 
ENDFORM.

Приведенный выше код дает следующий вывод -

0400  FRANKFURT  NEW YORK 
2402  FRANKFURT  BERLIN 
0402  FRANKFURT  NEW YORK

Внутренняя таблица на самом деле является временной таблицей, которая содержит записи программы ABAP, которую она выполняет. Внутренняя таблица существует только во время выполнения программы SAP. Они используются для обработки больших объемов данных с помощью языка ABAP. Нам нужно объявить внутреннюю таблицу в программе ABAP, когда вам нужно получить данные из таблиц базы данных.

Данные во внутренней таблице хранятся в строках и столбцах. Каждая строка называетсяline и каждый столбец называется field. Во внутренней таблице все записи имеют одинаковую структуру и ключ. Доступ к отдельным записям внутренней таблицы осуществляется с помощью индекса или ключа. Поскольку внутренняя таблица существует до выполнения связанной программы, записи внутренней таблицы отбрасываются, когда выполнение программы завершается. Таким образом, внутренние таблицы могут использоваться как области временного хранения или временные буферы, где данные могут быть изменены по мере необходимости. Эти таблицы занимают память только во время выполнения, а не во время их объявления.

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

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

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

Внутренние таблицы используются для многих целей -

  • Они могут использоваться для хранения результатов вычислений, которые могут быть использованы позже в программе.

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

  • Они очень универсальны. Они могут быть определены с использованием любого количества других определенных структур.

пример

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

Оператор DATA используется для объявления внутренней таблицы. Программе нужно указать, где таблица начинается и где заканчивается. Поэтому используйте оператор BEGIN OF, а затем объявите имя таблицы. После этого используется добавление OCCURS, за которым следует число, здесь 0. OCCURS сообщает SAP, что создается внутренняя таблица, а 0 означает, что изначально она не будет содержать никаких записей. Затем он будет расширяться по мере заполнения данными.

Ниже приводится синтаксис -

DATA: BEGIN OF <internal_tab> Occurs 0,

Создадим поля на новой строке. Например, создайте «имя», которое объявлено как LIKE ZCUSTOMERS1-name. Создайте еще одно поле с именем 'dob', НАПРАВЛЕНИЕ ZCUSTOMERS1-dob. Первоначально полезно присвоить именам полей во внутренних таблицах те же имена, что и другим полям, которые были созданы где-то еще. Наконец, объявите конец внутренней таблицы с помощью «END OF <internal_tab>». как показано в следующем коде -

DATA: BEGIN OF itab01 Occurs 0,
   name LIKE ZCUSTOMERS1-name,
   dob LIKE ZCUSTOMERS1-dob, 
END OF itab01.

Здесь itab01 обычно используется при создании временных таблиц в SAP. Предложение OCCURS используется для определения тела внутренней таблицы путем объявления полей таблицы. Когда используется предложение OCCURS, вы можете указать числовую константу 'n' для определения дополнительной памяти по умолчанию, если это необходимо. По умолчанию размер памяти, используемый предложением OCCUR 0, составляет 8 КБ. Теперь структура внутренней таблицы создана, и можно написать код для заполнения ее записями.

Внутренняя таблица может быть создана с использованием строки заголовка или без нее. Для создания внутренней таблицы со строкой заголовка используйте либо предложение BEGIN OF перед предложением OCCURS, либо предложение WITH HEADER LINE после предложения OCCURS в определении внутренней таблицы. Чтобы создать внутреннюю таблицу без строки заголовка, используйте предложение OCCURS без предложения BEGIN OF.

Вы также можете создать внутреннюю таблицу как локальный тип данных (тип данных, используемый только в контексте текущей программы) с помощью оператора TYPES. Этот оператор использует предложение TYPE или LIKE для ссылки на существующую таблицу.

Синтаксис для создания внутренней таблицы как локального типа данных -

TYPES <internal_tab> TYPE|LIKE <internal_tab_type> OF 
   <line_type_itab> WITH <key> INITIAL SIZE <size_number>.

Здесь <internal_tab_type> указывает тип таблицы для внутренней таблицы <internal_tab>, а <line_type_itab> указывает тип для строки внутренней таблицы. В операторе TYPES вы можете использовать предложение TYPE, чтобы указать тип строки внутренней таблицы в качестве типа данных, и предложение LIKE, чтобы указать тип строки как объект данных. Указание ключа для внутренней таблицы не является обязательным, и если пользователь не указывает ключ, система SAP определяет тип таблицы с произвольным ключом.

INITIAL SIZE <size_number> создает объект внутренней таблицы, выделяя ему начальный объем памяти. В предыдущем синтаксисе предложение INITIAL SIZE резервирует пространство памяти для строк таблицы size_number. Каждый раз, когда объявляется объект внутренней таблицы, размер таблицы не принадлежит типу данных таблицы.

Note - При первом заполнении внутренней таблицы потребляется гораздо меньше памяти.

пример

Step 1- Откройте редактор ABAP, выполнив код транзакции SE38. Появится начальный экран редактора ABAP.

Step 2 - На начальном экране введите имя программы, установите переключатель «Исходный код» и нажмите кнопку «Создать», чтобы создать новую программу.

Step 3- В диалоговом окне «ABAP: атрибуты программы» введите краткое описание программы в поле «Название», выберите параметр «Исполняемая программа» в раскрывающемся меню «Тип» в поле группы «Атрибуты». Нажмите кнопку "Сохранить".

Step 4 - Напишите следующий код в редакторе ABAP.

REPORT ZINTERNAL_DEMO. 
TYPES: BEGIN OF CustomerLine, 
Cust_ID TYPE C, 
Cust_Name(20) TYPE C, 
END OF CustomerLine. 
 
TYPES mytable TYPE SORTED TABLE OF CustomerLine  
WITH UNIQUE KEY Cust_ID. 
WRITE:/'The mytable is an Internal Table'.

Step 5 - Сохраните, активируйте и запустите программу как обычно.

В этом примере mytable - это внутренняя таблица, а уникальный ключ определяется в поле Cust_ID.

Приведенный выше код дает следующий вывод -

The mytable is an Internal Table.

Во внутренних таблицах заполнение включает такие функции, как выбор, вставка и добавление. В этой главе основное внимание уделяется операторам INSERT и APPEND.

ВСТАВИТЬ заявление

Оператор INSERT используется для вставки одной строки или группы строк во внутреннюю таблицу.

Ниже приведен синтаксис для добавления одной строки во внутреннюю таблицу:

INSERT <work_area_itab> INTO <internal_tab> INDEX <index_num>.

В этом синтаксисе оператор INSERT вставляет новую строку во внутреннюю таблицу internal_tab. Новую строку можно вставить, используя выражение INTO work_area_itab перед параметром internal_tab. Когда используется выражение INTO work_area_itab, новая строка берется из рабочей области work_area_itab и вставляется в таблицу internal_tab. Однако, когда выражение work_area_itab INTO не используется для вставки строки, строка берется из строки заголовка таблицы internal_tab.

Когда новая строка вставляется во внутреннюю таблицу с помощью предложения INDEX, порядковый номер строк после вставленной строки увеличивается на 1. Если внутренняя таблица содержит <index_num> - 1 строк, новая строка добавляется в конец таблицы. Когда система SAP успешно добавляет строку во внутреннюю таблицу, переменная SY-SUBRC устанавливается в 0.

пример

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

REPORT  ZCUSLIST1. 
DATA: BEGIN OF itable1 OCCURS 4,
      F1 LIKE SY-INDEX,
      END OF itable1.
	
   DO 4 TIMES.
      itable1-F1 = sy-index.
      APPEND itable1.
   ENDDO.
	
itable1-F1 = -96.  
INSERT itable1 INDEX 2.  

LOOP AT itable1.
   Write / itable1-F1.  
ENDLOOP.  

LOOP AT itable1 Where F1 ≥ 3.
   itable1-F1 = -78.
   INSERT itable1.
ENDLOOP.

Skip.
LOOP AT itable1.
   Write / itable1-F1.
ENDLOOP.

Приведенный выше код дает следующий результат -

1 
96- 
		2 
		3 
 4  
		1 
96- 
		2 
78- 
 3 
78- 
 4

В приведенном выше примере цикл DO добавляет к нему 4 строки, содержащие числа от 1 до 4. Компоненту строки заголовка itable1-F1 присвоено значение -96. Оператор Insert вставляет строку заголовка как новую строку в тело перед строкой 3. Существующая строка 3 становится строкой 4 после вставки. Оператор LOOP AT извлекает из внутренней таблицы те строки, у которых значение F1 больше или равно 3. Перед каждой строкой оператор Insert вставляет новую строку из строки ее заголовка. Перед вставкой компонент F1 был изменен на -78.

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

При вставке новой строки внутри itable1 внутри цикла на itable1 это не влияет на внутреннюю таблицу мгновенно. Фактически он вступает в силу при следующем проходе цикла. При вставке строки после текущей, таблица повторно индексируется в ENDLOOP. Sy-tabix увеличивается, и следующий цикл обрабатывает строку, на которую указывает sy-tabix. Например, если вы находитесь во втором проходе цикла и вставляете запись перед строкой 3. При выполнении конечного цикла новая строка становится строкой 3, а старая строка 3 становится строкой 4 и так далее. Sy-tabix увеличивается на 1, и следующий проход цикла обрабатывает вновь вставленную запись.

ПРИЛОЖЕНИЕ Заявление

Оператор APPEND используется для добавления одной строки или строки в существующую внутреннюю таблицу. Этот оператор копирует одну строку из рабочей области и вставляет ее после последней существующей строки во внутренней таблице. Рабочая область может быть либо строкой заголовка, либо любой другой строкой поля с такой же структурой, как строка внутренней таблицы. Ниже приводится синтаксис оператора APPEND, который используется для добавления одной строки во внутреннюю таблицу.

APPEND <record_for_itab> TO <internal_tab>.

В этом синтаксисе выражение <record_for_itab> может быть представлено рабочей областью <work_area_itab>, которая может быть преобразована в тип линии, или предложением INITIAL LINE. Если пользователь использует рабочую область <work_area_itab>, система SAP добавляет новую строку во внутреннюю таблицу <internal_tab> и заполняет ее содержимым рабочей области. Предложение INITIAL LINE добавляет пустую строку, содержащую начальное значение для каждого поля структуры таблицы. После каждого оператора APPEND переменная SY-TABIX содержит порядковый номер добавленной строки.

Добавление строк к стандартным и отсортированным таблицам с неуникальным ключом работает независимо от того, существуют ли уже в таблице строки с таким же ключом. Другими словами, могут возникнуть повторяющиеся записи. Однако ошибка времени выполнения возникает, если пользователь пытается добавить повторяющуюся запись в отсортированную таблицу с уникальным ключом или если пользователь нарушает порядок сортировки отсортированной таблицы, добавляя к ней строки.

пример

REPORT  ZCUSLIST1. 
DATA: BEGIN OF linv Occurs 0,
      Name(20) TYPE C,
      ID_Number TYPE I,
END OF linv. 

DATA table1 LIKE TABLE OF linv. 
linv-Name = 'Melissa'. 
linv-ID_Number = 105467. 
APPEND linv TO table1. 
LOOP AT table1 INTO linv. 

Write: / linv-name, linv-ID_Number. 
ENDLOOP.

Приведенный выше код дает следующий вывод -

Melissa		105467

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

Чтобы скопировать записи, мы можем использовать оператор SELECT для выбора всех записей из таблицы, а затем использовать оператор MOVE, который переместит записи из исходной таблицы в новую внутреннюю таблицу в поля, где соответствуют имена.

Ниже приведен синтаксис оператора MOVE -

MOVE <table_field> TO <internal_tab_field>.

пример

REPORT  ZCUSLIST1. 
TABLES: ZCUSTOMERS1. 
DATA: BEGIN OF itab01 Occurs 0,
      name LIKE ZCUSTOMERS1-name,
      dob LIKE ZCUSTOMERS1-dob, 
END OF itab01. 

Select * FROM ZCUSTOMERS1. 
MOVE ZCUSTOMERS1-name TO itab01-name. 
MOVE ZCUSTOMERS1-dob TO itab01-dob. 
ENDSELECT.
 
Write: / itab01-name, itab01-dob.

Приведенный выше код дает следующий вывод -

MARGARET  		02.11.1994

Цикл выбора заполняет каждое поле по одному, используя оператор MOVE для перемещения данных из поля одной таблицы в другое. В приведенном выше примере операторы MOVE использовались для перемещения содержимого таблицы ZCUSTOMERS1 в соответствующие поля внутренней таблицы. Вы можете выполнить это действие с помощью всего одной строчки кода. Вы можете использовать оператор MOVECORRESPONDING.

Ниже приведен синтаксис оператора MOVE-CORRESPONDING:

MOVE-CORRESPONDING <table_name> TO <internal_tab>.

Он сообщает системе, что нужно переместить данные из полей ZCUSTOMERS1 в соответствующие поля в itab01.

пример

REPORT  ZCUSTOMERLIST. 
TABLES: ZCUSTOMERS1. 
DATA: Begin of itab01 occurs 0,
      customer LIKE ZCUSTOMERS1-customer,
      name LIKE ZCUSTOMERS1-name,
      title LIKE ZCUSTOMERS1-title,
      dob LIKE ZCUSTOMERS1-dob, 
END OF itab01. 

SELECT * from ZCUSTOMERS1. 
MOVE-Corresponding ZCUSTOMERS1 TO itab01. 
APPEND itab01. 
ENDSELECT. 
LOOP AT itab01. 
Write: / itab01-name, itab01-dob. 
ENDLOOP.

Приведенный выше код дает следующий вывод -

MARK           21.05.1981 
JAMES          14.08.1977 
AURIELE        19.06.1990 
STEPHEN        22.07.1985 
MARGARET       02.11.1994

Это стало возможным благодаря тому, что оба имеют совпадающие имена полей. При использовании этого оператора вы должны убедиться, что оба поля имеют совпадающие типы данных и длину. Это было сделано здесь ранее с помощью оператора LIKE.

Мы можем читать строки таблицы, используя следующий синтаксис оператора READ TABLE:

READ TABLE <internal_table> FROM <work_area_itab>.

В этом синтаксисе выражение <work_area_itab> представляет рабочую область, совместимую с типом строки таблицы <internal_table>. Мы можем указать ключ поиска, но не ключ таблицы, в операторе READ, используя предложение WITH KEY, как показано в следующем синтаксисе:

READ TABLE <internal_table> WITH KEY = <internal_tab_field>.

Здесь вся строка внутренней таблицы используется как search key. Содержимое всей строки таблицы сравнивается с содержимым поля <internal_tab_field>. Если значения поля <internal_tab_field> несовместимы с типом строки таблицы, эти значения преобразуются в соответствии с типом строки таблицы. Ключ поиска позволяет находить записи во внутренних таблицах, которые не имеют структурированного типа строки, то есть где строка представляет собой отдельное поле или тип внутренней таблицы.

Следующий синтаксис оператора READ используется для указания символа рабочей области или поля с помощью предложения COMPARING:

READ TABLE <internal_table> <key> INTO <work_area_itab>
   [COMPARING <F1> <F2>...<Fn>].

Когда используется предложение COMPARING, указанные поля таблицы <F1>, <F2> .... <Fn> типа структурированной строки сравниваются с соответствующими полями рабочей области перед переносом. Если указано предложение ALL FIELDS, система SAP сравнивает все компоненты. Когда система SAP находит запись на основе ключа, значение переменной SY-SUBRC устанавливается на 0. Кроме того, значение переменной SY-SUBRC устанавливается на 2 или 4, если содержимое сравниваемой поля не совпадают или если система SAP не может найти запись. Однако система SAP копирует запись в целевую рабочую область всякий раз, когда она находит запись, независимо от результата сравнения.

пример

REPORT  ZREAD_DEMO. 
*/Creating an internal table 
DATA: BEGIN OF Record1, 
ColP TYPE I, 
ColQ TYPE I, 
END OF Record1. 

DATA mytable LIKE HASHED TABLE OF Record1 WITH UNIQUE KEY ColP. 
DO 6 Times.
Record1-ColP = SY-INDEX. 
Record1-ColQ = SY-INDEX + 5. 
INSERT Record1 INTO TABLE mytable. 
ENDDO. 

Record1-ColP = 4. 
Record1-ColQ = 12. 
READ TABLE mytable FROM Record1 INTO Record1 COMPARING ColQ. 

WRITE: 'SY-SUBRC =', SY-SUBRC. 
SKIP. 
WRITE: / Record1-ColP, Record1-ColQ.

Приведенный выше код дает следующий вывод -

SY-SUBRC =    2 

4         9

В приведенном выше примере mytable - это внутренняя таблица типа хешированной таблицы с Record1 в качестве рабочей области и ColP в качестве уникального ключа. Изначально mytable заполняется шестью строками, где поле ColP содержит значения переменной SY-INDEX, а поле ColQ содержит значения (SY-INDEX + 5).

Рабочая область Record1 заполняется значениями 4 и 12 для полей ColP и ColQ соответственно. Оператор READ считывает строку таблицы после сравнения значения ключевого поля ColP со значением в рабочей области Record1 с помощью предложения COMPARING, а затем копирует содержимое строки чтения в рабочую область. Значение переменной SY-SUBRC отображается как 2, потому что, когда значение в поле ColP равно 4, значение в ColQ равно не 12, а 9.

Оператор DELETE используется для удаления одной или нескольких записей из внутренней таблицы. Записи внутренней таблицы удаляются либо путем указания ключа таблицы или условия, либо путем поиска повторяющихся записей. Если внутренняя таблица имеет неуникальный ключ и содержит повторяющиеся записи, первая запись из таблицы удаляется.

Ниже приводится синтаксис использования оператора DELETE для удаления записи или строки из внутренней таблицы.

DELETE TABLE <internal_table> FROM <work_area_itab>.

В приведенном выше синтаксисе выражение <work_area_itab> является рабочей областью, и оно должно быть совместимо с типом внутренней таблицы <internal_table>. Операция удаления выполняется на основе ключа по умолчанию, который может быть взят из компонентов рабочей области.

Вы также можете явно указать ключ таблицы в операторе DELETE TABLE, используя следующий синтаксис:

DELETE TABLE <internal_table> WITH TABLE KEY <K1> = <F1>………… <Kn> = <Fn>.

В этом синтаксисе <F1>, <F2> .... <Fn> - это поля внутренней таблицы, а <K1>, <K2> .... <Kn> - ключевые поля таблицы. Оператор DELETE используется для удаления записей или строк таблицы <internal_table> на основе выражений <K1> = <F1>, <K2> = <F2> ... <Kn> = <Fn>.

Note - Если типы данных полей <F1>, <F2> .... <Fn> несовместимы с ключевыми полями <K1>, <K2> ... <Kn>, тогда система SAP автоматически преобразует их в совместимый формат.

пример

REPORT  ZDELETE_DEMO. 
DATA: BEGIN OF Line1, 
ColP TYPE I, 
ColQ TYPE I, 
END OF Line1. 
DATA mytable LIKE HASHED TABLE OF Line1  
WITH UNIQUE KEY ColP. 
DO 8 TIMES. 

Line1-ColP = SY-INDEX. 
Line1-ColQ = SY-INDEX + 4. 
INSERT Line1 INTO TABLE mytable. 
ENDDO. 

Line1-ColP = 1. 
DELETE TABLE mytable: FROM Line1, 
WITH TABLE KEY ColP = 3.
LOOP AT mytable INTO Line1. 

WRITE: / Line1-ColP, Line1-ColQ. 
ENDLOOP.

Приведенный выше код дает следующий вывод -

2         6 
4         8 
5         9 
6         10 
7         11 
8         12

В этом примере mytable имеет два поля: ColP и ColQ. Первоначально таблица mytable состоит из восьми строк, где ColP содержит значения 1, 2, 3, 4, 5, 6, 7 и 8. ColQ содержит значения 5, 6, 7, 8, 9, 10, 11 и 12, потому что значения ColP каждый раз увеличиваются на 4.

Оператор DELETE используется для удаления строк из mytable, где значение ключевого поля ColP равно 1 или 3. После удаления поле ColP mytable содержит значения 2, 4, 5, 6, 7 и 8, как показано на выходе. Поле ColQ содержит значения 6, 8, 9, 10, 11 и 12.

Ориентация на объекты упрощает разработку программного обеспечения, облегчая понимание, поддержку и повторное использование. Object Oriented Programming(ООП) представляет собой другой образ мышления при написании программного обеспечения. Прелесть ООП заключается в его простоте. Выразительность ООП облегчает своевременную поставку качественных программных компонентов.

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

Давайте сравним процедурное и объектно-ориентированное программирование -

Особенности Процедурно-ориентированный подход Объектно-ориентированный подход
Акцент Акцент делается на задачах. Акцент делается на то, что выполняет эти задачи.
Модуляризация Программы можно разделить на более мелкие программы, известные как функции. Программы организованы в классы и объекты, а функции встроены в методы класса.
Безопасность данных Большинство функций совместно используют глобальные данные. Данные могут быть скрыты и недоступны для внешних источников.
Расширяемость На изменение и расширение существующей функциональности уходит больше времени. Новые данные и функции могут быть добавлены без особых усилий по мере необходимости.

Изначально ABAP разрабатывался как процедурный язык (в точности похож на более ранний процедурный язык программирования, например COBOL). Но теперь ABAP адаптировал принципы объектно-ориентированной парадигмы с введением объектов ABAP. Объектно-ориентированные концепции ABAP, такие как класс, объект, наследование и полиморфизм, по сути такие же, как и в других современных объектно-ориентированных языках, таких как Java или C ++.

По мере того, как объектная ориентация начинает формироваться, каждому классу назначаются определенные роли. Такое разделение труда помогает упростить общую модель программирования, позволяя каждому классу специализироваться на решении определенной части проблемы. Такие классы имеют высокую степень сплоченности, и операции каждого класса интуитивно связаны между собой.

Ключевые особенности объектной ориентации:

  • Эффективная структура программирования.
  • Сущности реального мира можно очень хорошо моделировать.
  • Упор на безопасность данных и доступ.
  • Минимизирует избыточность кода.
  • Абстракция и инкапсуляция данных.

Объект - это особый вид переменной, которая имеет различные характеристики и поведение. Характеристики или атрибуты объекта используются для описания состояния объекта, а поведение или методы представляют действия, выполняемые объектом.

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

Объект имеет следующие три основные характеристики:

  • Имеет состояние.
  • Обладает уникальной индивидуальностью.
  • Может или не может отображать поведение.

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

Каждый объект имеет уникальный идентификатор, который можно использовать, чтобы отличить его от других объектов. Два объекта могут демонстрировать одно и то же поведение, и они могут иметь или не иметь одинаковое состояние, но у них никогда не бывает одинаковой идентичности. Два человека могут иметь одинаковое имя, возраст и пол, но не идентичны. Точно так же идентичность объекта никогда не изменится на протяжении всей его жизни.

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

Создание объекта

Создание объекта обычно включает в себя следующие шаги -

  • Создание ссылочной переменной со ссылкой на класс. Синтаксис для которого -

DATA: <object_name> TYPE REF TO <class_name>.
  • Создание объекта из ссылочной переменной. Синтаксис для которого -

CREATE Object: <object_name>.

пример

REPORT ZDEMO_OBJECT. 
CLASS Class1 Definition. 
Public Section. 
DATA: text1(45) VALUE 'ABAP Objects.'. 
METHODS: Display1. 
ENDCLASS. 

CLASS Class1 Implementation. 
METHOD Display1. 
Write:/ 'This is the Display method.'. 
ENDMETHOD. 
ENDCLASS. 

START-OF-SELECTION. 
DATA: Class1 TYPE REF TO Class1. 
CREATE Object: Class1. 
Write:/ Class1->text1. 
CALL METHOD: Class1->Display1.

Приведенный выше код дает следующий вывод -

ABAP Objects. 
This is the Display method.

Класс используется для определения формы объекта и объединяет представление данных и методы для управления этими данными в один аккуратный пакет. Данные и функции внутри класса называютсяmembers of the class.

Определение и реализация класса

Когда вы определяете класс, вы определяете схему для типа данных. Это фактически не определяет какие-либо данные, но определяет, что означает имя класса, из чего будет состоять объект класса и какие операции могут выполняться с таким объектом. То есть он определяет абстрактные характеристики объекта, такие как атрибуты, поля и свойства.

Следующий синтаксис показывает, как определить класс -

CLASS <class_name> DEFINITION. 
.......... 
.......... 
ENDCLASS.

Определение класса начинается с ключевого слова CLASS, за которым следует имя класса, DEFINITION и тело класса. Определение класса может содержать различные компоненты класса, такие как атрибуты, методы и события. Когда мы объявляем метод в объявлении класса, реализация метода должна быть включена в реализацию класса. Следующий синтаксис показывает, как реализовать класс -

CLASS <class_name> IMPLEMENTATION. 
........... 
.......... 
ENDCLASS.

Note- Реализация класса содержит реализацию всех его методов. В объектах ABAP структура класса содержит такие компоненты, как атрибуты, методы, события, типы и константы.

Атрибуты

Атрибуты - это поля данных класса, которые могут иметь любой тип данных, например C, I, F и N. Они объявлены в объявлении класса. Эти атрибуты можно разделить на 2 категории: экземпляры и статические атрибуты. Aninstance attributeопределяет состояние объекта, зависящее от экземпляра. Состояния разные для разных объектов. Атрибут экземпляра объявляется с помощью оператора DATA.

Static attributesопределить общее состояние класса, которое является общим для всех экземпляров класса. То есть, если вы измените статический атрибут в одном объекте класса, это изменение также будет видно для всех других объектов класса. Статический атрибут объявляется с помощью оператора CLASS-DATA.

Методы

Метод - это функция или процедура, которая представляет поведение объекта в классе. Методы класса могут обращаться к любому атрибуту класса. Определение метода также может содержать параметры, так что вы можете передавать значения этим параметрам при вызове методов. Определение метода объявляется в объявлении класса и реализуется в части реализации класса. Операторы METHOD и ENDMETHOD используются для определения части реализации метода. Следующий синтаксис показывает, как реализовать метод -

METHOD <m_name>. 
.......... 
.......... 
ENDMETHOD.

В этом синтаксисе <m_name> представляет имя метода. Note - Вы можете вызвать метод с помощью оператора CALL METHOD.

Доступ к атрибутам и методам

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

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

  • Атрибуты и методы, объявленные в разделе Public в классе, могут быть доступны этому классу и любому другому классу, подклассу программы.

  • Когда атрибуты и методы объявлены в разделе Protected в классе, доступ к ним может получить только этот класс и подклассы (производные классы).

  • Когда атрибуты и методы объявлены в закрытом разделе класса, доступ к ним может получить только этот класс, а не любой другой класс.

пример

Report ZAccess1. 
CLASS class1 Definition.
   PUBLIC Section.
      Data: text1 Type char25 Value 'Public Data'.
      Methods meth1.
		
   PROTECTED Section.
      Data: text2 Type char25 Value 'Protected Data'.
		
   PRIVATE Section.     
      Data: text3 Type char25 Value 'Private Data'. 
ENDCLASS.
 
CLASS class1 Implementation.   
   Method meth1.     
      Write: / 'Public Method:',   
             / text1,
             / text2,
             / text3.
      Skip.
   EndMethod.
ENDCLASS. 

Start-Of-Selection.   
   Data: Objectx Type Ref To class1.
   Create Object: Objectx.
   CALL Method: Objectx→meth1.
   Write: / Objectx→text1.

Приведенный выше код дает следующий вывод -

Public Method: 
Public Data 
Protected Data 
Private Data
  
Public Data

Статические атрибуты

Статический атрибут объявляется с помощью оператора CLASS-DATA. Все объекты или экземпляры могут использовать статический атрибут класса. Доступ к статическим атрибутам осуществляется напрямую с помощью имени класса, например class_name⇒name_1 = 'Some Text'.

пример

Ниже приведена программа, в которой мы хотим напечатать текст с номером строки от 4 до 8 раз. Мы определяем класс class1 и в публичном разделе объявляем CLASS-DATA (статический атрибут) и метод. После реализации класса и метода мы получаем прямой доступ к статическому атрибуту в событии Start-Of-Selection. Затем мы просто создаем экземпляр класса и вызываем метод.

Report ZStatic1. 
CLASS class1 Definition.   
   PUBLIC Section.
      CLASS-DATA: name1 Type char45,
                  data1 Type I.
   Methods: meth1. 
ENDCLASS. 

CLASS class1 Implementation.   
   Method meth1.
      Do 4 Times.
         data1 = 1 + data1.
         Write: / data1, name1.
      EndDo.
      Skip.
   EndMethod. 
ENDCLASS. 

Start-Of-Selection. 
   class1⇒name1 = 'ABAP Object Oriented Programming'.
   class1⇒data1 = 0.
   Data: Object1 Type Ref To class1,
         Object2 Type Ref To class1.
			
   Create Object: Object1, Object2.
   CALL Method: Object1→meth1, 
                Object2→meth1.

Приведенный выше код дает следующий вывод -

Конструкторы

Конструкторы - это специальные методы, которые вызываются автоматически либо при создании объекта, либо при доступе к компонентам класса. Конструктор запускается всякий раз, когда создается объект, но нам нужно вызвать метод для запуска общего метода. В следующем примере мы объявили два общедоступных метода - метод1 и конструктор. У обоих этих методов разные операции. При создании объекта класса метод конструктора запускает его работу.

пример

Report ZConstructor1. 
CLASS class1 Definition.
   PUBLIC Section.
      Methods: method1, constructor.
ENDCLASS. 

CLASS class1 Implementation.
   Method method1.
      Write: / 'This is Method1'.
   EndMethod.
	
   Method constructor.
      Write: / 'Constructor Triggered'.
   EndMethod. 
ENDCLASS. 

Start-Of-Selection.
   Data Object1 Type Ref To class1.
   Create Object Object1.

Приведенный выше код дает следующий вывод -

Constructor Triggered

Оператор ME в методах

Когда вы объявляете переменную любого типа в общедоступном разделе класса, вы можете использовать ее в любой другой реализации. Переменная может быть объявлена ​​с начальным значением в публичной секции. Мы можем снова объявить переменную внутри метода с другим значением. Когда мы записываем переменную внутри метода, система выводит измененное значение. Чтобы отразить предыдущее значение переменной, мы должны использовать оператор «ME».

В этой программе мы объявили общедоступную переменную text1 и инициировали ее значением. Мы снова объявили ту же переменную, но создали экземпляр с другим значением. Внутри метода мы записываем эту переменную с помощью оператора «ME», чтобы получить ранее инициированное значение. Мы получаем измененное значение, объявляя напрямую.

пример

Report ZMEOperator1. 
CLASS class1 Definition.
   PUBLIC Section. 
	
Data text1 Type char25 Value 'This is CLASS Attribute'.
   Methods method1. 
ENDCLASS. 

CLASS class1 Implementation.
   Method method1. 
	
Data text1 Type char25 Value 'This is METHOD Attribute'.
   Write: / ME→text1,
          / text1.
   ENDMethod.
ENDCLASS. 

Start-Of-Selection.
   Data objectx Type Ref To class1.
   Create Object objectx.
   CALL Method objectx→method1.

Приведенный выше код дает следующий вывод -

This is CLASS Attribute 
This is METHOD Attribute

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

При создании класса вместо написания полностью новых элементов данных и методов программист может указать, что новый класс должен наследовать члены существующего класса. Этот существующий класс называетсяbase class или же super class, а новый класс называется derived class или же sub class.

  • Объект одного класса может приобретать свойства другого класса.

  • Производный класс наследует данные и методы суперкласса. Однако они могут перезаписывать методы, а также добавлять новые методы.

  • Главное преимущество наследования - возможность повторного использования.

Отношение наследования указывается с помощью дополнения «INHERITING FROM» к оператору определения класса.

Ниже приводится синтаксис -

CLASS <subclass> DEFINITION INHERITING FROM <superclass>.

пример

Report ZINHERITAN_1. 
CLASS Parent Definition. 
PUBLIC Section. 
Data: w_public(25) Value 'This is public data'. 
Methods: ParentM. 
ENDCLASS. 

CLASS Child Definition Inheriting From Parent. 
PUBLIC Section. 
Methods: ChildM. 
ENDCLASS. 

CLASS Parent Implementation. 
Method ParentM. 
Write /: w_public. 
EndMethod. ENDCLASS. 

CLASS Child Implementation. 
Method ChildM. 
Skip. 
Write /: 'Method in child class', w_public.
EndMethod. 
ENDCLASS. 

Start-of-selection. 
Data: Parent Type Ref To Parent, 
Child Type Ref To Child. 
Create Object: Parent, Child. 
Call Method: Parent→ParentM, 
child→ChildM.

Приведенный выше код дает следующий вывод -

This is public data 
Method in child class 
This is public data

Контроль доступа и наследование

Производный класс может получить доступ ко всем не закрытым членам своего базового класса. Таким образом, члены суперкласса, которые не должны быть доступны для функций-членов подклассов, должны быть объявлены частными в суперклассе. Мы можем суммировать различные типы доступа в зависимости от того, кто может получить к ним доступ, следующим образом:

Доступ Общественные Защищено Частный
То же самое да да да
Производный класс да да Нет
Вне класса да Нет Нет

При наследовании класса от суперкласса он может быть унаследован через публичное, защищенное или частное наследование. Тип наследования определяется спецификатором доступа, как описано выше. Мы почти не используем защищенное или частное наследование, но обычно используется публичное наследование. Следующие правила применяются при использовании разных типов наследования.

  • Public Inheritance- При наследовании класса от общедоступного суперкласса открытые члены суперкласса становятся общедоступными членами подкласса, а защищенные члены суперкласса становятся защищенными членами подкласса. Частные члены суперкласса никогда не доступны напрямую из подкласса, но могут быть доступны через вызовы публичных и защищенных членов суперкласса.

  • Protected Inheritance - При наследовании от защищенного суперкласса открытые и защищенные члены суперкласса становятся защищенными членами подкласса.

  • Private Inheritance - При наследовании от частного суперкласса открытые и защищенные члены суперкласса становятся закрытыми членами подкласса.

Переопределение методов в подклассе

Методы суперкласса могут быть повторно реализованы в подклассе. Несколько правил переопределения методов -

  • Оператор переопределения для унаследованного метода должен находиться в том же разделе, что и определение исходного метода.

  • Если вы переопределяете метод, вам не нужно снова вводить его интерфейс в подклассе, а только имя метода.

  • В переопределенном методе вы можете получить доступ к компонентам прямого суперкласса, используя супер-ссылку.

  • Псевдо-ссылка super может использоваться только в переопределенных методах.

пример

Report Zinheri_Redefine. 
CLASS super_class Definition. 
Public Section. 
Methods: Addition1 importing g_a TYPE I
                             g_b TYPE I
		   exporting g_c TYPE I.
ENDCLASS. 

CLASS super_class Implementation. 
Method Addition1. 
g_c = g_a + g_b. 
EndMethod. 
ENDCLASS. 

CLASS sub_class Definition Inheriting From super_class. 
Public Section. 
METHODS: Addition1 Redefinition. 
ENDCLASS. 

CLASS sub_class Implementation. 
Method Addition1. 
g_c = g_a + g_b + 10. 
EndMethod. 
ENDCLASS. 

Start-Of-Selection. 
Parameters: P_a Type I, P_b TYPE I. 
Data: H_Addition1 TYPE I. 
Data: H_Sub TYPE I. 
Data: Ref1 TYPE Ref TO sub_class. 
Create Object Ref1. 
Call Method Ref1→Addition1 exporting g_a = P_a 
                                     g_b = P_b
		           Importing g_c = H_Addition1. 
Write:/ H_Addition1.

После выполнения F8, если мы введем значения 9 и 10, приведенный выше код выдаст следующий результат:

Redefinition Demo 
29

Термин «полиморфизм» буквально означает «множество форм». С объектно-ориентированной точки зрения полиморфизм работает в сочетании с наследованием, чтобы сделать возможным взаимозаменяемое использование различных типов в дереве наследования. То есть полиморфизм возникает, когда существует иерархия классов, и они связаны наследованием. Полиморфизм ABAP означает, что вызов метода вызовет выполнение другого метода в зависимости от типа объекта, который вызывает метод.

Следующая программа содержит абстрактный класс class_prgm, 2 подкласса (class_procedural и class_OO) и класс тестового драйвера class_type_approach. В этой реализации метод класса start позволяет нам отображать тип программирования и его подход. Если вы внимательно посмотрите на сигнатуру метода start, вы заметите, что он получает параметр импорта типа class_prgm. Однако в событии Start-Of-Selection этот метод был вызван во время выполнения с объектами типа class_procedural и class_OO.

пример

Report ZPolymorphism1. 
CLASS class_prgm Definition Abstract. 
PUBLIC Section. 
Methods: prgm_type Abstract, 
approach1 Abstract. 
ENDCLASS. 

CLASS class_procedural Definition 
Inheriting From class_prgm. 
PUBLIC Section. 
Methods: prgm_type Redefinition, 
approach1 Redefinition. 
ENDCLASS. 

CLASS class_procedural Implementation. 
Method prgm_type. 
Write: 'Procedural programming'. 

EndMethod. Method approach1. 
Write: 'top-down approach'. 

EndMethod. ENDCLASS. 
CLASS class_OO Definition 
Inheriting From class_prgm. 
PUBLIC Section. 
Methods: prgm_type Redefinition, 
approach1 Redefinition. 
ENDCLASS. 

CLASS class_OO Implementation. 
Method prgm_type. 
Write: 'Object oriented programming'. 
EndMethod. 

Method approach1. 
Write: 'bottom-up approach'.
EndMethod. 
ENDCLASS. 

CLASS class_type_approach Definition. 
PUBLIC Section. 
CLASS-METHODS: 
start Importing class1_prgm 
Type Ref To class_prgm. 
ENDCLASS. 

CLASS class_type_approach IMPLEMENTATION. 
Method start. 
CALL Method class1_prgm→prgm_type. 
Write: 'follows'. 

CALL Method class1_prgm→approach1. 
EndMethod. 
ENDCLASS. 

Start-Of-Selection. 
Data: class_1 Type Ref To class_procedural, 
class_2 Type Ref To class_OO. 

Create Object class_1. 
Create Object class_2. 
CALL Method class_type_approach⇒start 
Exporting 

class1_prgm = class_1. 
New-Line. 
CALL Method class_type_approach⇒start 
Exporting 
class1_prgm = class_2.

Приведенный выше код дает следующий вывод -

Procedural programming follows top-down approach  
Object oriented programming follows bottom-up approach

Среда выполнения ABAP выполняет неявное сужающее приведение во время назначения параметра импорта class1_prgm. Эта функция помогает реализовать метод «start» в целом. Информация о динамическом типе, связанная с переменной ссылки на объект, позволяет среде выполнения ABAP динамически связывать вызов метода с реализацией, определенной в объекте, на который указывает переменная ссылки на объект. Например, параметр импорта class1_prgm для метода start в классе class_type_approach относится к абстрактному типу, который никогда не может быть создан сам по себе.

Каждый раз, когда метод вызывается с конкретной реализацией подкласса, такой как class_procedural или class_OO, динамический тип ссылочного параметра class1_prgm привязывается к одному из этих конкретных типов. Следовательно, вызовы методов prgm_type и подход1 относятся к реализациям, предоставленным в подклассах class_procedural или class_OO, а не к неопределенным абстрактным реализациям, предоставленным в классе class_prgm.

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

ABAP поддерживает свойства инкапсуляции и сокрытия данных посредством создания определяемых пользователем типов, называемых классами. Как обсуждалось ранее, класс может содержать закрытые, защищенные и открытые члены. По умолчанию все элементы, определенные в классе, являются частными.

Инкапсуляция по интерфейсу

Инкапсуляция фактически означает, что один атрибут и метод могут быть изменены в разных классах. Следовательно, данные и метод могут иметь разную форму и логику, которые могут быть скрыты для отдельного класса.

Рассмотрим инкапсуляцию по интерфейсу. Интерфейс используется, когда нам нужно создать один метод с разной функциональностью в разных классах. Здесь название метода менять не нужно. Один и тот же метод придется реализовать в разных реализациях классов.

пример

Следующая программа содержит интерфейс inter_1. Мы объявили атрибут и метод method1. Мы также определили два класса, такие как Class1 и Class2. Поэтому мы должны реализовать метод method1 в обеих реализациях класса. Мы реализовали метод method1 по-разному в разных классах. В начале выбора мы создаем два объекта Object1 и Object2 для двух классов. Затем мы вызываем метод разными объектами, чтобы получить функцию, объявленную в отдельных классах.

Report ZEncap1. 
Interface inter_1.
   Data text1 Type char35.
   Methods method1.
EndInterface.

CLASS Class1 Definition.
   PUBLIC Section.
      Interfaces inter_1.
ENDCLASS. 

CLASS Class2 Definition.
   PUBLIC Section.
      Interfaces inter_1. 
ENDCLASS.

CLASS Class1 Implementation.
   Method inter_1~method1.
      inter_1~text1 = 'Class 1 Interface method'.
      Write / inter_1~text1.
   EndMethod. 
ENDCLASS.
 
CLASS Class2 Implementation.
   Method inter_1~method1.
      inter_1~text1 = 'Class 2 Interface method'.
      Write / inter_1~text1.
   EndMethod. 
ENDCLASS.
 
Start-Of-Selection.
   Data: Object1 Type Ref To Class1,
      Object2 Type Ref To Class2.
		
   Create Object: Object1, Object2.
   CALL Method: Object1→inter_1~method1,
                Object2→inter_1~method1.

Приведенный выше код дает следующий вывод -

Class 1 Interface method 
Class 2 Interface method

Инкапсулированные классы не имеют много зависимостей от внешнего мира. Более того, их взаимодействие с внешними клиентами контролируется через стабилизированный общедоступный интерфейс. То есть инкапсулированный класс и его клиенты слабо связаны. По большей части классы с четко определенными интерфейсами можно подключить к другому контексту. При правильном проектировании инкапсулированные классы становятся повторно используемыми программными активами.

Разработка стратегии

Большинство из нас на горьком опыте научились делать членов класса закрытыми по умолчанию, если нам действительно не нужно их раскрывать. Это просто хорошая инкапсуляция. Эта мудрость чаще всего применяется к элементам данных, а также в равной степени ко всем элементам.

Подобно классам в ABAP, интерфейсы действуют как типы данных для объектов. Компоненты интерфейсов такие же, как и компоненты классов. В отличие от объявления классов, объявление интерфейса не включает разделы видимости. Это связано с тем, что компоненты, определенные в объявлении интерфейса, всегда интегрируются в раздел общедоступной видимости классов.

Интерфейсы используются, когда два похожих класса имеют метод с одинаковым именем, но функциональные возможности отличаются друг от друга. Интерфейсы могут казаться похожими на классы, но функции, определенные в интерфейсе, реализованы в классе для расширения области действия этого класса. Интерфейсы вместе с функцией наследования обеспечивают основу для полиморфизма. Это связано с тем, что метод, определенный в интерфейсе, может вести себя по-разному в разных классах.

Ниже приведен общий формат для создания интерфейса -

INTERFACE <intf_name>. 
DATA..... 
CLASS-DATA..... 
METHODS..... 
CLASS-METHODS..... 
ENDINTERFACE.

В этом синтаксисе <intf_name> представляет имя интерфейса. Операторы DATA и CLASSDATA могут использоваться для определения экземпляра и статических атрибутов интерфейса соответственно. Операторы METHODS и CLASS-METHODS могут использоваться для определения экземпляра и статических методов интерфейса соответственно. Поскольку определение интерфейса не включает класс реализации, нет необходимости добавлять предложение DEFINITION в объявление интерфейса.

Note- Все методы интерфейса абстрактны. Они полностью объявлены, включая их интерфейс параметров, но не реализованы в интерфейсе. Все классы, которые хотят использовать интерфейс, должны реализовывать все методы интерфейса. В противном случае класс становится абстрактным.

Мы используем следующий синтаксис в части реализации класса -

INTERFACE <intf_name>.

В этом синтаксисе <intf_name> представляет имя интерфейса. Обратите внимание, что этот синтаксис должен использоваться в публичном разделе класса.

Следующий синтаксис используется для реализации методов интерфейса внутри реализации класса:

METHOD <intf_name~method_m>. 
<statements>. 
ENDMETHOD.

В этом синтаксисе <intf_name ~ method_m> представляет полностью объявленное имя метода интерфейса <intf_name>.

пример

Report ZINTERFACE1. 
INTERFACE my_interface1. 
Methods msg. 
ENDINTERFACE. 

CLASS num_counter Definition. 
PUBLIC Section. 
INTERFACES my_interface1. 
Methods add_number. 
PRIVATE Section. 
Data num Type I. 
ENDCLASS. 

CLASS num_counter Implementation. 
Method my_interface1~msg. 
Write: / 'The number is', num. 
EndMethod. 

Method add_number. 
ADD 7 TO num. 
EndMethod. 
ENDCLASS. 

CLASS drive1 Definition. 
PUBLIC Section. 
INTERFACES my_interface1. 
Methods speed1.
PRIVATE Section.
Data wheel1 Type I. 
ENDCLASS. 

CLASS drive1 Implementation.
Method my_interface1~msg.
Write: / 'Total number of wheels is', wheel1. 
EndMethod. 

Method speed1. 
Add 4 To wheel1. 
EndMethod. 
ENDCLASS. 

Start-Of-Selection. 
Data object1 Type Ref To num_counter. 
Create Object object1. 

CALL Method object1→add_number.
CALL Method object1→my_interface1~msg.

Data object2 Type Ref To drive1. 
Create Object object2.
 
CALL Method object2→speed1. 
CALL Method object2→my_interface1~msg.

Приведенный выше код дает следующий вывод -

The number is 7 
Total number of wheels is 4

В приведенном выше примере my_interface1 - это имя интерфейса, содержащего метод msg. Затем определяются и реализуются два класса, num_counter и drive1. Оба эти класса реализуют метод msg, а также специальные методы, которые определяют поведение их соответствующих экземпляров, например методы add_number и speed1.

Note - Методы add_number и speed1 относятся к соответствующим классам.

An event- это набор результатов, которые определены в классе для запуска обработчиков событий в других классах. Когда событие запускается, мы можем вызвать любое количество методов обработчика событий. Связь между триггером и его методом-обработчиком фактически определяется динамически во время выполнения.

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

Событие класса может запускать метод обработчика событий того же класса с помощью оператора RAISE EVENT. Для события метод обработчика событий может быть определен в том же или другом классе с помощью предложения FOR EVENT, как показано в следующем синтаксисе:

FOR EVENT <event_name> OF <class_name>.

Подобно методам класса, событие может иметь интерфейс параметров, но имеет только выходные параметры. Выходные параметры передаются методу обработчика событий оператором RAISE EVENT, который принимает их в качестве входных параметров. Событие динамически связывается со своим методом обработчика в программе с помощью оператора SET HANDLER.

Когда событие запускается, соответствующие методы обработчика событий должны выполняться во всех классах обработки.

пример

REPORT ZEVENT1. 
CLASS CL_main DEFINITION. 
PUBLIC SECTION. 
DATA: num1 TYPE I. 
METHODS: PRO IMPORTING num2 TYPE I. 
EVENTS: CUTOFF. 
ENDCLASS. 

CLASS CL_eventhandler DEFINITION. 
PUBLIC SECTION. 
METHODS: handling_CUTOFF FOR EVENT CUTOFF OF CL_main. 
ENDCLASS. 

START-OF-SELECTION. 
DATA: main1 TYPE REF TO CL_main. 
DATA: eventhandler1 TYPE REF TO CL_eventhandler. 

CREATE OBJECT main1. 
CREATE OBJECT eventhandler1. 

SET HANDLER eventhandler1→handling_CUTOFF FOR main1. 
main1→PRO( 4 ).
CLASS CL_main IMPLEMENTATION.
METHOD PRO.
num1 = num2.
IF num2 ≥ 2. 
RAISE EVENT CUTOFF.
ENDIF. 
ENDMETHOD.
ENDCLASS.

CLASS CL_eventhandler IMPLEMENTATION.
METHOD handling_CUTOFF.
WRITE: 'Handling the CutOff'. 
WRITE: / 'Event has been processed'. 
ENDMETHOD. ENDCLASS.

Приведенный выше код дает следующий вывод -

Handling the CutOff 
Event has been processed

А reportпредставляет собой представление данных в организованной структуре. Многие системы управления базами данных включают в себя средство записи отчетов, которое позволяет создавать и создавать отчеты. Приложения SAP поддерживают создание отчетов.

Классический отчет создается с использованием выходных данных в операторе WRITE внутри цикла. Они не содержат подотчетов. SAP также предоставляет некоторые стандартные отчеты, такие как RSCLTCOP, который используется для копирования таблиц между клиентами, и RSPARAM, который используется для отображения параметров экземпляра.

Эти отчеты состоят только из одного экрана в качестве вывода. Мы можем использовать различные события, такие как INITIALIZATON и TOP-OF-PAGE, для создания классического отчета, и каждое событие имеет свою важность при создании классического отчета. Каждое из этих событий связано с определенным действием пользователя и запускается только тогда, когда пользователь выполняет это действие.

Ниже приводится таблица с описанием событий и описанием.

S.No. Описание события
1

INITIALIZATON

Срабатывает перед отображением экрана выбора.

2

AT SELECTION-SCREEN

Срабатывает после обработки ввода пользователя на экране выбора. Это событие проверяет ввод данных пользователем до выполнения программы. После обработки ввода пользователя экран выбора остается в активном режиме.

3

START-OF-SELECTION

Срабатывает только после завершения обработки экрана выбора; то есть, когда пользователь щелкает значок «Выполнить» на экране выбора.

4

END-OF-SELECTION

Запускается после выполнения последнего оператора в событии START-OF-SELECTON.

5

TOP-OF-PAGE

Запускается первым оператором WRITE для отображения данных на новой странице.

6

END-OF-PAGE

Запускается для отображения текста в конце страницы в отчете. Обратите внимание, что это событие является последним событием при создании отчета и должно быть объединено с предложением LINE-COUNT оператора REPORT.

пример

Создадим классический отчет. Мы отобразим информацию, хранящуюся в стандартной базе данных MARA (содержит общие данные материала), используя последовательность операторов в редакторе ABAP.

REPORT ZREPORT2 
LINE-SIZE 75 
LINE-COUNT 30(3) 
NO STANDARD PAGE HEADING. 
Tables: MARA. 
TYPES: Begin of itab, 

MATNR TYPE MARA-MATNR, 
MBRSH TYPE MARA-MBRSH, 
MEINS TYPE MARA-MEINS, 
MTART TYPE MARA-MTART, 

End of itab. 

DATA: wa_ma TYPE itab,
      it_ma TYPE STANDARD TABLE OF itab.
		
SELECT-OPTIONS: MATS FOR MARA-MATNR OBLIGATORY. 
INITIALIZATION. 
MATS-LOW = '1'. 
MATS-HIGH = '500'. 

APPEND MATS. 
AT SELECTION-SCREEN. .
IF MATS-LOW = ' '. 
MESSAGE I000(ZKMESSAGE). 
ELSEIF MATS-HIGH = ' '. 
MESSAGE I001(ZKMESSAGE). 
ENDIF. 

TOP-OF-PAGE. 
WRITE:/ 'CLASSICAL REPORT CONTAINING GENERAL MATERIAL DATA  
FROM THE TABLE MARA' COLOR 7. 
ULINE. 
WRITE:/ 'MATERIAL' COLOR 1, 

24 'INDUSTRY' COLOR 2, 
38 'UNITS' COLOR 3, 
53 'MATERIAL TYPE' COLOR 4. 
ULINE. 
END-OF-PAGE. 

START-OF-SELECTION. 
SELECT MATNR MBRSH MEINS MTART FROM MARA  
INTO TABLE it_ma WHERE MATNR IN MATS. 
LOOP AT it_ma into wa_ma. 
WRITE:/  wa_ma-MATNR, 

25 wa_ma-MBRSH, 
40 wa_ma-MEINS, 
55 wa_ma-MTART. 
ENDLOOP. 
END-OF-SELECTION. 

ULINE. 
WRITE:/ 'CLASSICAL REPORT HAS BEEN CREATED' COLOR 7.
ULINE. 
SKIP.

Приведенный выше код производит следующий вывод, содержащий общие данные о материалах из стандартной таблицы MARA:

Диалоговое программирование занимается разработкой нескольких объектов. Все эти объекты иерархически связаны с основной программой и выполняются последовательно. При разработке диалоговых программ используются инструменты рабочей среды ABAP. Это те же инструменты, которые используются при разработке стандартных приложений SAP.

Вот основные компоненты диалоговых программ -

  • Screens
  • Модульные пулы
  • Subroutines
  • Menus
  • Transactions

Набор инструментов

Диалоговые программы должны разрабатываться обозревателем объектов (транзакция: SE80), чтобы все объекты связывались с основной программой без необходимости явно указывать каждый объект. Продвинутые методы навигации улучшают процесс перехода от одного объекта к другому.

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

Создание новой диалоговой программы

Step 1 - В транзакции SE80 выберите «Программа» из раскрывающегося списка и введите Z-имя для вашей пользовательской программы SAP как «ZSCREENEX».

Step 2 - Нажмите Enter, выберите «С TOP INCL» и нажмите кнопку «Да».

Step 3 - Введите имя для вашего верхнего включения как «ZSCRTOP» и щелкните зеленую галочку.

Step 4 - На экране атрибутов просто введите заголовок и нажмите кнопку сохранения.

Добавление экрана в диалоговую программу

Step 1 - Чтобы добавить экран в программу, щелкните правой кнопкой мыши имя программы и выберите параметры Создать → Экран.

Step 2 - Введите номер экрана как «0211» и щелкните зеленую галочку.

Step 3 - На следующем экране введите короткий заголовок, выберите обычный тип экрана и нажмите кнопку сохранения на верхней панели инструментов приложения.

Макет экрана и добавление текста Hello World

Step 1 - Нажмите кнопку макета на панели инструментов приложения, и появится окно Screen Painter.

Step 2 - Добавьте текстовое поле и введите текст, например «Hello World».

Step 3 - Сохранить и активировать экран.

Создание транзакции

Step 1 - Чтобы создать код транзакции для вашей программы, просто щелкните правой кнопкой мыши имя программы, выберите опцию «Создать» → «Транзакция» и введите код транзакции как «ZTRANEX».

Step 2 - Введите текст транзакции, программу и экран, которые вы только что создали (ZSCREENEX & 0211), и установите флажок «SAPGUI для Windows» в разделе «Поддержка графического интерфейса».

Выполнение программы

Сохраните и активируйте все. Вы можете выполнить программу. По мере выполнения программы введенный вами текст отображается на экране, как показано на следующем снимке экрана.

Инструмент SAP Smart Forms можно использовать для печати и отправки документов. Этот инструмент полезен при разработке форм, файлов PDF, сообщений электронной почты и документов для Интернета. Инструмент предоставляет интерфейс для создания и поддержки макета и логики формы. SAP также предоставляет выбор форм для бизнес-процессов, таких как те, которые используются в управлении взаимоотношениями с клиентами (CRM), сбыте (SD), финансовом учете (FI) и людских ресурсах (HR).

Инструмент позволяет изменять формы с помощью простых графических инструментов вместо использования каких-либо инструментов программирования. Это означает, что пользователь без знаний программирования может легко настроить эти формы с данными для бизнес-процесса.

В смарт-форме данные извлекаются из статических и динамических таблиц. Заголовок и промежуточный итог таблицы задаются инициированными событиями, а затем данные сортируются до окончательного вывода. Смарт-форма позволяет включать графику, которая может отображаться как часть формы или как фон. Вы также можете подавить фоновую графику, если это необходимо, при распечатке формы.

Ниже приведены некоторые примеры стандартных смарт-форм, доступных в системе SAP:

  • SF_EXAMPLE_01 представляет счет-фактуру с таблицей выходных данных для бронирования рейса для клиента.

  • SF_EXAMPLE_02 представляет счет-фактуру, аналогичный SF_EXAMPLE_01, но с промежуточными итогами.

  • SF_EXAMPLE_03 определяет счет, аналогичный SF_EXAMPLE_02, но в котором несколько клиентов могут быть выбраны в прикладной программе.

Создание формы

Давайте создадим форму с помощью инструмента SAP Smart Forms. Вы также узнаете, как добавить узел в смарт-форму и протестировать форму в этом руководстве. Здесь мы начинаем с создания копии формы SF_EXAMPLE_01. Форма SF_EXAMPLE_01 - это стандартная смарт-форма, доступная в системе SAP.

Step 1- Smart Form Builder - это основной интерфейс, используемый для создания смарт-формы. Он доступен на первом экране SAP Smart Forms. Нам нужно ввести код транзакции «SMARTFORMS» в поле «Команда», чтобы открыть начальный экран SAP Smart Forms. На этом экране введите имя формы SF_EXAMPLE_01 в поле Форма.

Step 2 - Выберите Smart Forms → Copy или щелкните значок «Копировать», чтобы открыть диалоговое окно «Копировать форму или текст».

Step 3- В поле «Целевой объект» введите имя новой формы. Имя должно начинаться с буквы Y или Z. В этом случае имя формы - «ZSMM1».

Step 4 - Щелкните значок «Продолжить» или нажмите клавишу ENTER в диалоговом окне «Копировать форму или текст», чтобы форма ZSMM1 была создана как копия предопределенной формы SF_EXAMPLE_01.

Step 5- Щелкните значок «Сохранить». Имя формы отображается в поле Форма на первом экране SAP Smart Forms.

Step 6- Нажмите кнопку «Создать» на начальном экране SAP Smart Forms. Форма ZSMM1 появится в конструкторе форм.

Step 7- Первая страница черновика создается с ГЛАВНЫМ окном. Все компоненты новой формы основаны на предопределенной форме SF_EXAMPLE_01. Вы можете просто щелкнуть узел в меню навигации, чтобы просмотреть его содержимое.

Создание текстового узла в форме

Step 1 - Откройте форму в режиме изменения экрана SAP Form Builder и щелкните правой кнопкой мыши параметр «Главное окно» в узле «Первая страница» и выберите «Создать» → «Текст» в контекстном меню.

Step 2- Измените текст в поле «Текст» на «My_Text», а текст в поле «Значение» на «Text_Demo». Введите текст Hello TutorialsPoint ..... в поле редактирования текста в центральной рамке Form Builder, как показано на следующем снимке:

Step 3 - Нажмите кнопку «Сохранить», чтобы сохранить узел.

Step 4- Активируйте и проверьте узел, щелкнув значки «Активировать» и «Проверить» соответственно. Появится начальный экран конструктора функций.

Step 5- Активируйте и протестируйте функциональный модуль, щелкнув значки Активировать и Выполнить. Параметры функционального модуля отображаются на первом экране построителя функций.

Step 6- Запустите функциональный модуль, щелкнув значок «Выполнить». Откроется диалоговое окно «Печать».

Step 7 - Укажите устройство вывода как «LP01» и нажмите кнопку «Предварительный просмотр».

Вышеупомянутые шаги приведут к следующему результату -

Инструмент SAPscript в системе SAP может использоваться для создания и управления бизнес-формами, такими как счета-фактуры и заказы на поставку. Инструмент SAPscript предоставляет множество шаблонов, которые в значительной степени упрощают создание бизнес-формы.

Система SAP поставляется со стандартными формами SAPscript, которые поставляются со стандартным клиентом SAP (обычно как клиент 000). Ниже приведены несколько примеров стандартных форм SAPscript, поставляемых с клиентом 000 -

S.No. Имя и описание формы
1

RVORDER01

Форма подтверждения заказа на продажу

2

RVDELNOTE

Товарная накладная

3

RVINVOICE01

Выставленный счет

4

MEDRUCK

Заказ на покупку

5

F110_PRENUM_CHCK

Перенумерованный чек

Структура формы SAPscript состоит из 2 основных компонентов:

Content - Это может быть текст (бизнес-данные) или графика (логотип компании).

Layout - Это определяется набором окон, в которых отображается содержимое формы.

SAPscript - Инструмент для рисования форм

Инструмент Form Painter предоставляет графический макет формы SAPscript и различные функции для управления формой. В следующем примере мы собираемся создать форму счета-фактуры после копирования ее структуры макета из стандартной формы SAPscript RVINVOICE01 и отобразить ее макет с помощью инструмента Form Painter.

Step 1- Откройте Form Painter. Вы можете запросить экран либо с помощью меню SAP, либо с помощью кода транзакции SE71.

Step 2- В Form Painter на экране запроса введите имя и язык для формы SAPscript в поля Form и Language соответственно. Введите в эти поля соответственно «RVINVOICE01» и «EN».

Step 3 - Установите переключатель «Макет страницы» в группе «Подобъекты».

Step 4- Выберите «Утилиты» → «Копировать из клиента», чтобы создать копию формы RVINVOICE01. Появится экран «Копировать формы между клиентами».

Step 5- На экране «Копировать формы между клиентами» введите исходное имя формы «RVINVOICE01» в поле «Имя формы», номер исходного клиента «000» в поле «Исходный клиент» и имя целевого объекта. форму как ZINV_01 в поле Target Form. Убедитесь, что остальные настройки не изменились.

Step 6- Затем щелкните значок «Выполнить» на экране «Копировать формы между клиентами». Откроется диалоговое окно «Создать запись в каталоге объектов». Щелкните значок Сохранить.

Форма ZINV_01 копируется из формы RVINVOICE01 и отображается на экране «Копирование форм между клиентами», как показано на следующем снимке:

Step 7 - Дважды щелкните значок «Назад» и вернитесь к экрану Form Painter: Request, который содержит имя скопированной формы ZINV_01.

Step 8 - После нажатия кнопки «Показать» появится окно «Форма ZINV_01: макет страницы ПЕРВАЯ» и экран «Форма: изменение макета страницы: ZINV_01», как показано на следующем снимке экрана.

Step 9- В окне «Форма ZINV_01: Макет страницы ПЕРВАЯ» отображается исходный макет формы. Макет формы содержит пять окон: ЗАГОЛОВОК, АДРЕС, ИНФОРМАЦИЯ, ИНФОРМАЦИЯ1 и ГЛАВНОЕ. Описание этих окон доступно в редакторе ПК.

Например, просто выбрав ГЛАВНОЕ окно и щелкнув значок «Текст» на экране «Форма: Изменить макет страницы: ZINV_01», вы можете просмотреть все значения полей, как показано на следующем снимке экрана -

Уходы клиентов можно рассматривать как зацепки к стандартным программам SAP. Нам не нужен ключ доступа для написания кода, и нет необходимости изменять стандартную программу SAP. Эти выходы не имеют никакой функциональности и пусты. Бизнес-логика может быть добавлена ​​для удовлетворения различных требований клиентов. Однако клиентские программы доступны не для всех программ.

Выходы клиентов для стандартных транзакций

Ниже приведены шаги по поиску выходов клиентов в том, что касается стандартных транзакций. Давайте определим программы клиента, доступные в MM01 (создание основных записей материалов).

Step 1 - Перейдите к транзакции MM01 и определите имя программы MM01, перейдя в Строку меню → Система → Статус, как показано на скриншоте выше.

Step 2- Получите название программы из всплывающего экрана. Имя программы - SAPLMGMM.

Step 3 - Перейдите к транзакции SE38, введите имя программы и нажмите Показать.

Step 4 - Перейдите в Перейти к → Свойства и найдите пакет с этим именем программы.

Имя пакета - «MGA».

Step 5- Перейти к коду транзакции SMOD, который обычно используется для идентификации выходов клиентов. Перейдите в Утилиты → Найти (или) вы можете напрямую нажать Ctrl + F на коде транзакции SMOD.

Step 6 - После перехода на экран «Найти выходы» введите полученное ранее имя пакета и нажмите кнопку F8 (Выполнить).

Вышеупомянутые шаги производят следующий вывод со списком выходов, доступных в Master Master Creation.

Программы пользователя используются при извлечении, если стандартные экстракторы SAP не предоставляют ожидаемых данных или требуемых функций, например, при авторизации или проверках времени. Пользовательские программы выхода обычно используются в модулях продаж и распространения (SD). SAP предлагает множество выходов в областях продаж, транспортировки, отгрузки и выставления счетов. Программа выхода пользователя предназначена для внесения некоторых изменений, когда стандартный SAP не может удовлетворить все требования.

Чтобы получить доступ к тем выходам, которые доступны в каждой области продаж, перейдите в IMG по следующему пути: IMG → Сбыт → Модификации системы → Пользовательские программы. Документация для каждого выхода в областях SD подробно объяснена.

Например, если вы хотите найти программы пользователя в Обработке торговых документов (контракт, предложение или заказ на продажу), следуйте указанному выше пути и продолжайте раскрывать узел Пользовательские программы в разделе Продажи → Пользовательские программы. Щелкните значок документации, чтобы просмотреть все программы пользователя, доступные в Обработке торговых документов.

S.No. Пользовательский выход и описание
1

USEREXIT_FIELD_MODIFICATION

Используется для изменения атрибутов экрана.

2

USEREXIT_SAVE_DOCUMENT

Помогает в выполнении операций, когда пользователь нажимает «Сохранить».

3

USEREXIT_SAVE_DOCUMENT_PREPARE

Очень полезно для проверки полей ввода, ввода любого значения в поле или отображения всплывающего окна для пользователей и подтверждения документа.

4

USEREXIT_MOVE_FIELD_TO_VBAK

Используется, когда изменения заголовка пользователя перемещаются в рабочую область заголовка.

5

USEREXIT_MOVE_FIELD_TO_VBAP

Используется, когда изменения элемента пользователя перемещаются в рабочую область элемента SAP.

Пользовательская программа выхода служит той же цели, что и пользовательская программа, но доступна только для модуля SD. Выход реализован как вызов функционального модуля. Программы пользователя - это модификации стандартных программ SAP.

пример

REPORT ZUSEREXIT1. 
TABLES:   
   TSTC, TSTCT,
   TADIR, TRDIR, TFDIR, ENLFDIR,
   MODSAPT, MODACT. 
	
DATA:   
   JTAB LIKE TADIR OCCURS 0 WITH HEADER LINE,
   field1(30),
   v_devclass LIKE TADIR-devclass. 
	
PARAMETERS:
   P_TCODE LIKE TSTC-tcode OBLIGATORY. 
	
SELECT SINGLE *
   FROM TSTC
   WHERE tcode EQ P_TCODE. 
	
IF SY-SUBRC EQ 0.
   SELECT SINGLE *
   FROM TADIR
	
   WHERE pgmid = 'R3TR' AND 
         object = 'PROG' AND
         obj_name = TSTC-pgmna.
		
   MOVE TADIR-devclass TO v_devclass.
	
   IF SY-SUBRC NE 0.
   SELECT SINGLE * 
      FROM TRDIR
      WHERE name = TSTC-pgmna.
		
   IF TRDIR-subc EQ 'F'.
      SELECT SINGLE *
         FROM TFDIR
         WHERE pname = TSTC-pgmna.
			
      SELECT SINGLE *
         FROM ENLFDIR 
         WHERE funcname = TFDIR-funcname.
			
      SELECT SINGLE * 
         FROM TADIR
         WHERE pgmid = 'R3TR' AND
               object = 'FUGR' AND 
               obj_name EQ ENLFDIR-area.
         MOVE TADIR-devclass TO v_devclass.
      ENDIF.
   ENDIF.
	
   SELECT *
      FROM TADIR
      INTO TABLE JTAB
		
      WHERE pgmid = 'R3TR' AND
            object = 'SMOD' AND
            devclass = v_devclass.
			
   SELECT SINGLE *
      FROM TSTCT
      WHERE sprsl EQ SY-LANGU AND
            tcode EQ P_TCODE.
			
   FORMAT COLOR COL_POSITIVE INTENSIFIED OFF.
   WRITE:/(19) 'Transaction Code - ', 
      20(20) P_TCODE,
      45(50) TSTCT-ttext.
   SKIP.
	
   IF NOT JTAB[] IS INITIAL.
      WRITE:/(95) SY-ULINE.
      FORMAT COLOR COL_HEADING INTENSIFIED ON.
		
      WRITE:/1 SY-VLINE, 
            2 'Exit Name',
            21 SY-VLINE , 
            22 'Description',
            95 SY-VLINE.
			
      WRITE:/(95) SY-ULINE.
      LOOP AT JTAB.
         SELECT SINGLE * FROM MODSAPT
         WHERE sprsl = SY-LANGU AND
               name = JTAB-obj_name.
				
         FORMAT COLOR COL_NORMAL INTENSIFIED OFF.
         WRITE:/1 SY-VLINE,
               2 JTAB-obj_name HOTSPOT ON,
               21 SY-VLINE ,
               22 MODSAPT-modtext,
               95 SY-VLINE.
      ENDLOOP.
		
      WRITE:/(95) SY-ULINE.
      DESCRIBE TABLE JTAB.
      SKIP.
      FORMAT COLOR COL_TOTAL INTENSIFIED ON.
      WRITE:/ 'No of Exits:' , SY-TFILL.
		
   ELSE.
      FORMAT COLOR COL_NEGATIVE INTENSIFIED ON.
      WRITE:/(95) 'User Exit doesn’t exist'.
   ENDIF. 
ELSE.

   FORMAT COLOR COL_NEGATIVE INTENSIFIED ON.
   WRITE:/(95) 'Transaction Code Does Not Exist'. 
ENDIF.
 
AT LINE-SELECTION.
   GET CURSOR FIELD field1.
   CHECK field1(4) EQ 'JTAB'.
   SET PARAMETER ID 'MON' FIELD sy-lisel+1(10).
   CALL TRANSACTION 'SMOD' AND SKIP FIRST SCREEN.

Во время обработки введите код транзакции «ME01» и нажмите кнопку F8 (Выполнить). Приведенный выше код дает следующий вывод -

В некоторых случаях в программном приложении необходимо заранее определить специальные функции для расширения функциональных возможностей различных приложений. Существует множество надстроек Microsoft Excel для улучшения функциональности MS Excel. Аналогичным образом SAP упрощает некоторые предопределенные функции, предоставляяBusiness Add-Ins известные как BADI.

BADI - это метод расширения, который помогает программисту SAP, пользователю или специалисту из конкретной отрасли добавить некоторый дополнительный код к существующей программе в системе SAP. Мы можем использовать стандартную или настраиваемую логику для улучшения системы SAP. Сначала необходимо определить BADI, а затем внедрить его для улучшения приложения SAP. При определении BADI создается интерфейс. BADI реализуется этим интерфейсом, который, в свою очередь, реализуется одним или несколькими классами адаптеров.

Техника BADI отличается от других техник улучшения двумя способами:

  • Техника улучшения может быть реализована только один раз.
  • Этот метод улучшения может использоваться многими клиентами одновременно.

Вы также можете создать фильтры BADI, что означает, что BADI определяются на основе отфильтрованных данных, что невозможно с помощью методов расширения. Концепция BADI была переопределена в SAP Release 7.0 со следующими целями:

  • Улучшение стандартных приложений в системе SAP путем добавления двух новых элементов на языке ABAP, а именно «GET BADI» и «CALL BADI».

  • Предлагая более гибкие функции, такие как контексты и фильтры, для улучшения стандартных приложений в системе SAP.

Когда BADI создается, он содержит интерфейс и другие дополнительные компоненты, такие как функциональные коды для улучшений меню и улучшений экрана. Создание BADI позволяет клиентам включать свои собственные улучшения в стандартное приложение SAP. Расширение, интерфейс и созданные классы расположены в соответствующем пространстве имен разработки приложений.

Следовательно, BADI можно рассматривать как метод расширения, который использует объекты ABAP для создания «предопределенных точек» в компонентах SAP. Эти предопределенные точки затем реализуются отдельными отраслевыми решениями, вариантами страны, партнерами и клиентами в соответствии с их конкретными требованиями. SAP фактически представила технику расширения BADI в версии 4.6A, и эта технология была повторно реализована в версии 7.0.

Web Dynpro (WD) для ABAP - это стандартная технология пользовательского интерфейса SAP, разработанная SAP AG. Его можно использовать при разработке веб-приложений в среде SAP ABAP, в которой используются инструменты и концепции разработки SAP. Он предоставляет интерфейсный веб-интерфейс пользователя для прямого подключения к серверным системам SAP R / 3 для доступа к данным и функциям отчетности.

Web Dynpro для ABAP состоит из среды выполнения и графической среды разработки со специальными инструментами разработки, которые интегрированы в ABAP Workbench (транзакция: SE80).

Архитектура Web Dynpro

На следующем рисунке показана общая архитектура Web Dynpro -

Ниже приведены несколько моментов, которые следует учитывать в отношении Web Dynpro.

  • Web Dynpro - это модель программирования SAP NetWeaver для пользовательских интерфейсов.

  • Все приложения Web Dynpro структурированы в соответствии с моделью программирования Model View Controller (MVC).

  • Модель определяет интерфейс к основной системе, и приложение Web Dynpro может иметь доступ к системным данным.

  • Представление отвечает за отображение данных в веб-браузере.

  • Контроллер находится между представлением и моделью. Контроллер форматирует данные модели для отображения в представлении. Он обрабатывает пользовательские записи, сделанные пользователем, и возвращает их в модель.

Преимущества

Web Dynpro предлагает следующие преимущества для разработчиков приложений:

  • Использование графических инструментов значительно снижает трудозатраты на внедрение.

  • Повторное использование и улучшенная ремонтопригодность за счет использования компонентов.

  • Макет и навигацию легко изменить с помощью инструментов Web Dynpro.

  • Поддерживается доступность пользовательского интерфейса.

  • Полная интеграция в среду разработки ABAP.

Компонент и окно Web Dynpro

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

По крайней мере, одно окно Web Dynpro содержится в каждом компоненте Web Dynpro. Окно Web Dynpro включает все представления, которые отображаются в интерфейсном веб-приложении. Окно обрабатывается в оконных редакторах ABAP Workbench.

Note

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

  • Приложение Web Dynpro является независимым объектом в списке объектов ABAP Workbench. Взаимодействие между окном и приложением создается представлением интерфейса данного окна.