ABAP (Advanced Business Application Programming, первоначально Allgemeiner Berichts-Aufbereitungs-Prozessor , по-немецки «общий процессор подготовки отчетов» [2] ) — язык программирования высокого уровня, созданный немецкой компанией-разработчиком программного обеспечения SAP SE . В настоящее время он позиционируется, наряду с Java , как язык программирования сервера приложений SAP NetWeaver , который является частью платформы SAP NetWeaver для создания бизнес-приложений.
Введение
ABAP — один из многих специализированных языков четвертого поколения ( 4GL ), впервые разработанных в 1980-х годах. Первоначально это был язык отчетов для SAP R/2 , платформы, которая позволяла крупным корпорациям создавать мэйнфреймовые бизнес-приложения для управления материалами, а также финансового и управленческого учета.
Раньше ABAP был аббревиатурой от A llgemeiner B erichts- A ufbereitungs- P rozessor , что по-немецки означает «универсальный процессор подготовки отчетов», но позже [когда?] был переименован в английское Advanced Business Application Programming . ABAP был одним из первых языков , включивших концепцию логических баз данных (LDB), которая обеспечивает высокий уровень абстракции от базового уровня(ей) базы данных, поддерживающего каждую платформу, язык и модули.
Язык ABAP изначально использовался разработчиками для разработки платформы SAP R/3 . Он также предназначался для использования клиентами SAP для улучшения приложений SAP — клиенты могут разрабатывать собственные отчеты и интерфейсы с помощью программирования ABAP. Язык был ориентирован на более технических клиентов с опытом программирования.
ABAP остается языком создания программ для клиент-серверной системы R/3 , которую SAP впервые выпустила в 1992 году. По мере развития компьютерного оборудования в 1990-х годах все больше приложений и систем SAP писались на ABAP. К 2001 году все, кроме самых основных функций, были написаны на ABAP. В 1999 году SAP выпустила объектно-ориентированное расширение ABAP под названием ABAP Objects вместе с выпуском R/3 4.6.
Текущая платформа разработки SAP NetWeaver поддерживает как ABAP, так и Java .
ABAP имеет абстракцию между бизнес-приложениями, операционной системой и базой данных. Это гарантирует, что приложения не зависят напрямую от конкретного сервера или платформы базы данных и могут быть легко перенесены с одной платформы на другую.
Все программы ABAP находятся внутри базы данных SAP. Они не хранятся в отдельных внешних файлах, как программы Java или C++. В базе данных весь код ABAP существует в двух формах: исходный код, который можно просматривать и редактировать с помощью инструментов ABAP Workbench; и сгенерированный код, двоичное представление, в некоторой степени сопоставимое с байт-кодом Java . Программы ABAP выполняются под управлением системы выполнения, которая является частью ядра SAP. Система выполнения отвечает за обработку операторов ABAP, управление логикой потока экранов и реагирование на события (например, нажатие пользователем кнопки на экране); в этом отношении ее можно рассматривать как виртуальную машину, сравнимую с виртуальной машиной Java. Ключевым компонентом системы выполнения ABAP является интерфейс базы данных, который превращает независимые от базы данных операторы ABAP («Open SQL») в операторы, понятные базовой СУБД («Native SQL»). Интерфейс базы данных обрабатывает все коммуникации с реляционной базой данных от имени программ ABAP; Он также содержит дополнительные функции, такие как буферизация таблиц и часто используемых данных в локальной памяти сервера приложений.
Системы и ландшафты SAP
Все данные SAP существуют, и все программное обеспечение SAP работает в контексте системы SAP . Система состоит из центральной реляционной базы данных и одного или нескольких серверов приложений («экземпляров»), которые обращаются к данным и программам в этой базе данных. Система SAP содержит по крайней мере один экземпляр, но может содержать и больше, в основном по причинам размера и производительности. В системе с несколькими экземплярами механизмы балансировки нагрузки обеспечивают равномерное распределение нагрузки по доступным серверам приложений.
Установки сервера веб-приложений ( ландшафты ) обычно состоят из трех систем: одна для разработки; одна для тестирования и обеспечения качества; и одна для производства. Ландшафт может содержать больше систем (например, отдельные системы для модульного тестирования и предпроизводственного тестирования) или меньше (например, только разработка и производство, без отдельного QA); тем не менее, три — это наиболее распространенная конфигурация. Программы ABAP создаются и проходят первое тестирование в системе разработки. После этого они распределяются по другим системам в ландшафте. Эти действия происходят под управлением Системы изменений и транспортировки (CTS), которая отвечает за управление параллелизмом (например, предотвращение одновременного изменения одного и того же кода двумя разработчиками), управление версиями и развертывание программ в системах QA и производства.
Сервер веб-приложений состоит из трех слоев: слой базы данных; слой приложения; и слой представления. Эти слои могут работать на одной и той же или на разных физических машинах. Слой базы данных содержит реляционную базу данных и программное обеспечение базы данных. Знания «уровня приложения» содержат экземпляр или экземпляры системы. Все процессы приложений, включая бизнес-транзакции и разработку ABAP, работают на уровне приложения. Уровень представления обрабатывает взаимодействие с пользователями системы. Онлайн-доступ к серверам приложений ABAP может осуществляться через фирменный графический интерфейс, который называется «SAP GUI», или через веб-браузер.
Уровни программного обеспечения
Программное обеспечение ABAP развертывается в программных компонентах. Примерами этого являются:
SP_BASIS — это технический базовый уровень, который требуется в каждой системе ABAP.
SAP_ABA содержит функции, необходимые для всех видов бизнес-приложений, таких как управление деловыми партнерами и адресами.
SAP_UI предоставляет функциональные возможности для создания приложений SAP UI5.
BBPCRM — пример бизнес-приложения, в данном случае CRM-приложения.
SAP ABAP — это язык программирования ERP.
Транзакции
Транзакция в терминологии SAP — это выполнение программы. Обычный способ выполнения кода ABAP в системе SAP — ввод кода транзакции (например, VA01 — это код транзакции для «Создать заказ на продажу»). Обычные коды транзакций (T-коды), используемые разработчиком ABAP, — это SE38, SE09, SE10, SE24, SE11, SE16N, SE80, SE37, ST22 и т. д. [4] [5] Транзакции можно вызывать через системные или пользовательские меню на основе ролей. Их также можно запускать, вводя код транзакции непосредственно в командное поле, которое присутствует на каждом экране SAP. Транзакции также можно вызывать программно с помощью операторов ABAP CALL TRANSACTION и LEAVE TO TRANSACTION. Общее понятие транзакции в терминологии SAP называется логической единицей работы (LUW).
Типы ABAP-программ
Как и в других языках программирования, программа ABAP представляет собой либо исполняемый модуль, либо библиотеку, которая предоставляет повторно используемый код для других программ и не может быть выполнена независимо.
ABAP различает два типа исполняемых программ:
Отчеты
Модульные пулы
Отчеты следуют относительно простой модели программирования, в которой пользователь опционально вводит набор параметров (например, выборку из подНАБОРА данных), а затем программа использует входные параметры для создания отчета в форме интерактивного списка. Термин «отчет» может быть несколько обманчивым, поскольку отчеты также могут быть разработаны для изменения данных; причина, по которой эти программы называются отчетами, заключается в «ориентированной на списки» природе вывода, который они производят.
Модульные пулы определяют более сложные шаблоны взаимодействия с пользователем с использованием набора экранов. Термин «экран» относится к фактическому физическому изображению, которое видит пользователь. Каждый экран также имеет «логику потока», которая относится к коду ABAP, неявно вызываемому экранами, который разделен на разделы «PBO» (Process Before Output) и «PAI» (Process After Input). В документации SAP термин «dynpro» (динамическая программа) относится к комбинации экрана и его логики потока.
Типы неисполняемых программ:
Модули INCLUDE — они включаются во время генерации в вызывающий блок; часто используются для разделения больших программ.
Пулы подпрограмм – содержат подпрограммы ABAP (блоки кода, заключенные в операторы FORM/ENDFORM и вызываемые с помощью PERFORM).
Группы функций — это библиотеки автономных функциональных модулей (заключенных в FUNCTION/ENDFUNCTION и вызываемых с помощью CALL FUNCTION).
Классы объектов — они похожи на классы и интерфейсы Java; первые определяют набор методов и атрибутов, вторые содержат «пустые» определения методов, для которых любой класс, реализующий интерфейс, должен предоставить явный код.
Интерфейсы – то же, что и классы объектов.
Пулы типов — определяют коллекции типов данных и констант.
Программы ABAP состоят из отдельных предложений (операторов). Первое слово в операторе называется ключевым словом ABAP. Каждый оператор заканчивается точкой. Слова всегда должны быть разделены как минимум одним пробелом. Операторы могут иметь отступ по вашему желанию. С ключевыми словами, дополнениями и операндами система выполнения ABAP не различает верхний и нижний регистр.
Операторы могут выходить за пределы одной строки. Вы можете иметь несколько операторов в одной строке (хотя это не рекомендуется). Строки, начинающиеся со звездочки * в первом столбце, распознаются системой выполнения ABAP как строки комментариев и игнорируются. Двойные кавычки (") указывают, что оставшаяся часть строки является комментарием.
Среда разработки
Существует два возможных способа разработки на ABAP. Доступность зависит от версии системы ABAP.
ABAP-верстак
ABAP Workbench является частью системы ABAP и доступен через SAP GUI . Он содержит различные инструменты для редактирования программ. Наиболее важными из них являются (коды транзакций указаны в скобках):
Редактор ABAP для написания и редактирования отчетов, пулов модулей, включений и пулов подпрограмм (SE38)
Словарь ABAP для обработки определений таблиц базы данных и извлечения глобальных типов (SE11)
Menu Painter для проектирования пользовательского интерфейса (строка меню, стандартная панель инструментов, панель инструментов приложений, назначение функциональных клавиш) (SE41)
Screen Painter для проектирования экранов и логики потока (SE51)
Конструктор функций для функциональных модулей (SE37)
Конструктор классов и интерфейсов объектов ABAP (SE24)
Навигатор объектов (транзакция SE80) обеспечивает единый интегрированный интерфейс для этих различных инструментов.
Инструменты разработки ABAP
Инструменты разработки ABAP ( ADT ), официально известные как «ABAP в Eclipse», представляют собой набор плагинов для Eclipse IDE для разработки объектов ABAP. [6]
В этом сценарии разработчик ABAP устанавливает необходимые инструменты на свой компьютер и работает локально, при этом выполняется непрерывная синхронизация с бэкэндом.
ABAP-словарь
Словарь ABAP содержит все метаданные о данных в системе SAP. Он тесно связан с ABAP Workbench в том смысле, что любая ссылка на данные (например, таблица, представление или тип данных) будет получена из словаря. Разработчики используют транзакции словаря ABAP (напрямую или через SE80 Object Navigator внутри ABAP Workbench) для отображения и обслуживания этих метаданных.
При изменении объекта словаря программа, ссылающаяся на измененный объект, автоматически ссылается на новую версию при следующем запуске программы. Поскольку ABAP интерпретируется, нет необходимости перекомпилировать программы, ссылающиеся на измененные объекты словаря.
Ниже приводится краткое описание наиболее важных типов словарных объектов:
Таблицы — это контейнеры данных, которые существуют в базовой реляционной базе данных. В большинстве случаев существует отношение 1 к 1 между определением таблицы в словаре ABAP и определением той же таблицы в базе данных (одно и то же имя, одни и те же столбцы). Эти таблицы известны как «прозрачные». Существует два типа непрозрачных таблиц: «объединенные» таблицы существуют как независимые сущности в словаре ABAP, но они сгруппированы в большие физические таблицы («пулы») на уровне базы данных. Объединенные таблицы часто представляют собой небольшие таблицы, содержащие, например, данные конфигурации. «Кластеризованные» таблицы физически группируются в «кластеры» на основе их первичных ключей; например, предположим, что кластеризованная таблица H содержит данные «заголовка» о счетах-фактурах продаж, тогда как другая кластеризованная таблица D содержит позиции счетов-фактур. Каждая строка H затем будет физически сгруппирована со связанными строками из D внутри «таблицы кластера» в базе данных. Этот тип кластеризации, предназначенный для повышения производительности, также существует как встроенная функциональность в некоторых, хотя и не во всех, системах реляционных баз данных.
Индексы обеспечивают ускоренный доступ к данным таблицы для часто используемых условий выбора. Каждая таблица SAP имеет «первичный индекс», который создается неявно вместе с таблицей и используется для обеспечения уникальности первичного ключа. Могут быть определены дополнительные индексы (уникальные или неуникальные); они называются «вторичными индексами».
Представления имеют то же назначение, что и в базовой базе данных: они определяют подмножества столбцов (и/или строк) из одной или — с использованием условия соединения — нескольких таблиц. Поскольку представления являются виртуальными таблицами (они ссылаются на данные в других таблицах), они не занимают существенного количества места.
Структуры — это сложные типы данных, состоящие из нескольких полей (сравнимые со структурами в C/C++).
Элементы данных предоставляют семантическое содержание для поля таблицы или структуры. Например, десятки таблиц и структур могут содержать поле, дающее цену (готового продукта, сырья, ресурса, ...). Все эти поля могут иметь один и тот же элемент данных «ЦЕНА».
Домены определяют структурные характеристики элемента данных. Например, элемент данных PRICE может иметь назначенный домен, который определяет цену как числовое поле с двумя десятичными знаками. Домены также могут нести семантическое содержание, предоставляя список возможных значений. Например, домен "BOOLEAN" может определять поле типа "char" длиной 1 и без учета регистра, но также будет ограничивать возможные значения до "T" (истина) или "F" (ложь).
Помощь в поиске (преемники теперь уже устаревших "matchcodes") предоставляет расширенные стратегии поиска, когда пользователь хочет увидеть возможные значения для поля данных. Среда выполнения ABAP предоставляет неявную помощь (перечисляя все значения для поля, например, все существующие номера клиентов), но помощь в поиске может использоваться для уточнения этой функциональности, например, предоставляя поиск клиентов по географическому положению, кредитному рейтингу и т. д.
Объекты блокировки реализуют блокировку на уровне приложения при изменении данных.
Синтаксис ABAP
Это краткое описание синтаксиса ABAP начинается с вездесущего «Hello» .
Привет, мир
ОТЧЕТ ПО ТЕСТУ . НАПИШИТЕ «Привет, мир!» .
Этот пример содержит два оператора: REPORTи WRITE. Программа выводит список на экран. В этом случае список состоит из одной строки "Hello, World!". Оператор REPORTуказывает, что эта программа является отчетом. Эта программа может быть пулом модулей после замены REPORTоператора на PROGRAM.
Связанные утверждения
Последовательные операторы с одинаковой первой (самой левой) частью могут быть объединены в "цепочечный" оператор с помощью оператора цепи :. Общая часть операторов записывается слева от двоеточия, отличающиеся части записываются справа от двоеточия и разделяются запятыми. Оператор двоеточия присоединяется непосредственно к предыдущему токену, без пробела (то же самое относится к запятым в списке токенов, как можно увидеть в примерах ниже).
Цепочка часто используется в WRITEоператорах. WRITEпринимает только один аргумент, поэтому, если, например, вы хотите отобразить три поля из структуры с именем FLIGHTINFO, вам придется написать код:
НАПИШИТЕ ИНФОРМАЦИЮ О РЕЙСЕ - ГОРОДОТКУДА . НАПИШИТЕ ИНФОРМАЦИЮ О РЕЙСЕ - ГОРОДДО . НАПИШИТЕ ИНФОРМАЦИЮ О РЕЙСЕ - АЭРОПОРТДО .
Объединение утверждений приводит к более читаемой и интуитивно понятной форме:
В цепочке операторов первая часть (перед двоеточием) не ограничивается только именем оператора. Вся общая часть последовательных операторов может быть размещена перед двоеточием. Пример:
ЗАМЕНИТЕ « A » НА « B » В FIRSTNAME . ЗАМЕНИТЕ «A » НА « B » В CITYNAME .
можно переписать в цепочечном виде следующим образом:
ЗАМЕНИТЕ «A» НА «B» В : ФАМИЛИЯ , ИМЯ , ГОРОД .
Комментарии
В ABAP есть два способа определения текста как комментария :
Звездочка (*) в крайнем левом столбце строки делает всю строку комментарием .
Двойные кавычки (") в любом месте строки делают остальную часть этой строки комментарием.
Пример:
******************************************** ** Программа: БРОНИРОВАНИЕ ** ** Автор: Джо Байт, 07-июля-2007 ** ***************************************ОТЧЕТ О БРОНИРОВАНИИ .* Считывание бронирований рейсов из базы данных SELECT * FROM FLIGHTINFO WHERE CLASS = 'Y' "Y = эконом OR CLASS = 'C' . "C = бизнес (...)
Пространства
Код в ABAP чувствителен к пробелам.
х = а + b ( с ).
присваивает переменной x подстроку переменной a, начиная с b, с длиной, определяемой переменной c.
х = а + b ( с ).
присваивает переменной x сумму переменной a и результата вызова метода b с параметром c.
ABAP-заявления
В отличие от таких языков, как C/C++ или Java, которые определяют ограниченный набор операторов, специфичных для языка, и предоставляют большую часть функциональности через библиотеки, ABAP содержит обширное количество встроенных операторов. Эти операторы традиционно использовали структуры предложений и избегали символов, что делало программы ABAP относительно многословными. Однако в более поздних версиях языка ABAP возможен более лаконичный стиль. [7]
Пример синтаксиса, основанного на операторах (синтаксис которого берет свое начало в COBOL), в сравнении с синтаксисом, основанным на выражениях (как в C/Java):
ABAP предоставляет набор встроенных типов данных. Кроме того, каждая структура, таблица, представление или элемент данных, определенные в словаре ABAP, могут быть использованы для типизации переменной. Также в качестве типов могут использоваться классы объектов и интерфейсы.
Встроенные типы данных:
Тип
Описание
я
Целое число
П
Упакованная десятичная дробь
Ф
С плавающей точкой
Н
Символьный числовой
С
Характер
Д
Дата
Т
Время
Х
Шестнадцатеричный (сырой байт)
НИТЬ
Строка переменной длины
XСТРОКА
Массив необработанных байтов переменной длины
Переменные даты или константы (тип D) содержат количество дней с 1 января 1 г. н. э. Переменные времени или константы (тип T) содержат количество секунд с полуночи. Особенностью обоих типов является то, что к ним можно обращаться как к целым числам, так и к символьным строкам (с внутренним форматом "YYYYMMDD" для дат и "hhmmss" для времени), которые можно использовать для обработки даты и времени. Например, фрагмент кода ниже вычисляет последний день предыдущего месяца (примечание: SY-DATUM — это системная переменная, содержащая текущую дату):
ДАННЫЕ LAST_EOM TYPE D . "последняя дата конца месяца* Начните с сегодняшней даты LAST_EOM = SY - DATUM . * Установите символы 6 и 7 (относительно 0) строки YYYYMMDD на "01", * получив первый день текущего месяца LAST_EOM + 6 ( 2 ) = '01' . * Вычтите один день LAST_EOM = LAST_EOM - 1 .WRITE : «Последний день предыдущего месяца был» , LAST_EOM .
Все переменные ABAP должны быть явно объявлены для использования. Они могут быть объявлены либо с помощью отдельных операторов и явной типизации, либо, начиная с ABAP 7.40, встроенными с выведенной типизацией .
Явно типизированное объявление
Обычно все объявления размещаются в верхней части модуля кода (программы, подпрограммы, функции) перед первым исполняемым оператором; это размещение является соглашением, а не обязательным синтаксическим правилом. Объявление состоит из имени, типа, длины (где применимо), дополнительных модификаторов (например, количества подразумеваемых десятичных знаков для упакованного десятичного поля) и, опционально, начального значения:
* Примитивные типы: ДАННЫЕ : ТИП СЧЕТЧИКА I , ТИП ДЕЙСТВИТЕЛЬНОСТИ I, ЗНАЧЕНИЕ 60 , НАЛОГОВАЯ СТАВКА ( 3 ) , ТИП P, ДЕСЯТИЧНЫЕ ЗНАКИ 1 , ФАМИЛИЯ ( 20 ) , ТИП C , ТИП ОПИСАНИЯ СТРОКА .* Типы словарей: ДАННЫЕ : ТИП ПРОИСХОЖДЕНИЯ СТРАНА .* Внутренняя таблица: ДАННЫЕ : ТАБЛИЦА ТИПА T_FLIGHTS FLIGHTINFO , ТАБЛИЦА ХЭШИРОВАННОГО ТИПА T_LOOKUP FLT_LOOKUP .* Объекты: ДАННЫЕ : ТИП БРОНИРОВАНИЯ ССЫЛКА НА CL_FLT_BOOKING .
Обратите внимание на использование двоеточия для объединения последовательных операторов DATA.
Встроенное объявление
Начиная с версии ABAP 7.40, [8] переменные можно объявлять встроенными с помощью следующего синтаксиса:
ДАННЫЕ ( имя_переменной ) = 'ЗНАЧЕНИЕ' .
Для этого типа объявления должна быть возможность вывести тип статически, например, по сигнатуре метода или структуре таблицы базы данных.
Такой синтаксис также возможен в операторах OpenSQL:
ВЫБЕРИТЕ * ИЗ ekko в @DATA ( lt_ekko ) ГДЕ ebeln EQ @lv_ebeln .
ABAP-объекты
Язык ABAP поддерживает объектно-ориентированное программирование с помощью функции, известной как «Объекты ABAP». [9] Это помогает упростить приложения и сделать их более контролируемыми.
ABAP Objects полностью совместим с существующим языком, поэтому можно использовать существующие операторы и модули модуляризации в программах, использующих ABAP Objects, а также можно использовать ABAP Objects в существующих ABAP-программах. Проверка синтаксиса сильнее в программах ABAP Objects, и некоторые синтаксические формы (обычно старые) определенных операторов не допускаются.
Объекты образуют капсулу, которая объединяет характер с соответствующим поведением. Объекты должны позволять программистам сопоставлять реальную проблему и ее предлагаемое программное решение на основе один к одному. Типичными объектами в бизнес-среде являются, например, «Клиент», «Заказ» или «Счет-фактура». Начиная с версии 3.1, репозиторий бизнес-объектов (BOR) SAP Web Application Server ABAP содержит примеры таких объектов. Модель объектов BOR будет интегрирована в объекты ABAP в следующей версии путем переноса типов объектов BOR в библиотеку классов ABAP. Всестороннее введение в объектную ориентацию в целом выйдет далеко за рамки этого введения в объекты ABAP. В этой документации представлен выбор терминов, которые повсеместно используются в объектной ориентации, а также встречаются в объектах ABAP. В последующих разделах более подробно обсуждается, как эти термины используются в объектах ABAP. В конце этого раздела содержится список дополнительной литературы с выбором заголовков об объектной ориентации.
Объекты являются экземплярами классов. Они содержат данные и предоставляют услуги. Данные формируют атрибуты объекта. Услуги известны как методы (также известные как операции или функции). Обычно методы работают с закрытыми данными (атрибутами или состоянием объекта), которые видны только методам объекта. Таким образом, атрибуты объекта не могут быть изменены пользователем напрямую, а только методами объекта. Это гарантирует внутреннюю согласованность объекта.
Классы описывают объекты. С технической точки зрения объекты являются экземплярами класса во время выполнения. Теоретически может быть создано любое количество объектов на основе одного класса. Каждый экземпляр (объект) класса имеет уникальную идентификацию и собственный набор значений для своих атрибутов.
Ссылки на объекты — это уникальные адреса, которые могут использоваться для идентификации и указания объектов в программе. Ссылки на объекты позволяют получить доступ к атрибутам и методам объекта.
В объектно-ориентированном программировании объекты обычно обладают следующими свойствами:
Инкапсуляция – объекты ограничивают видимость своих ресурсов (атрибутов и методов) для других пользователей. Каждый объект имеет интерфейс, который определяет, как другие объекты могут взаимодействовать с ним. Реализация объекта инкапсулирована, то есть невидима вне самого объекта.
Наследование – существующий класс может быть использован для получения нового класса. Производные классы наследуют данные и методы суперкласса. Однако они могут перезаписывать существующие методы, а также добавлять новые.
Полиморфизм – Идентичные (с одинаковым именем) методы ведут себя по-разному в разных классах. В ABAP Objects полиморфизм реализуется путем переопределения методов во время наследования и использования конструкций, называемых интерфейсами.
Просмотры CDS
ABAP Core Data Services (ABAP CDS) являются реализацией общей концепции CDS для AS ABAP. ABAP CDS позволяет определять семантические модели данных в центральной базе данных сервера приложений. В AS ABAP эти модели могут быть определены независимо от системы баз данных. Сущности этих моделей предоставляют расширенные функции доступа по сравнению с существующими таблицами и представлениями базы данных, определенными в словаре ABAP, что позволяет оптимизировать приложения на основе Open SQL. Это особенно очевидно, когда AS ABAP использует базу данных SAP HANA, поскольку ее характеристики в памяти могут быть реализованы оптимальным образом.
Модели данных определяются с использованием языка определения данных (DDL) и языка управления данными (DCL), представленных в ABAP CDS в синтаксисе ABAP CDS. Объекты, определенные с использованием этих языков, интегрированы в ABAP Dictionary и управляются здесь же.
Исходный код CDS может быть запрограммирован только в ABAP Development Tools (ADT) на основе Eclipse. Data Definition Language (DDL) и Data Control Language (DCL) используют разные редакторы. [10]
Функции
SAP NW ABAP
SQL-соединения
Операции с наборами SQL
ВЫБЕРИТЕ положения
7.40 СП05
ВНУТРЕННЕЕ СОЕДИНЕНИЕ
ЛЕВОЕ ВНЕШНЕЕ СОЕДИНЕНИЕ
ПРАВОЕ ВНЕШНЕЕ СОЕДИНЕНИЕ
СОЮЗ
СОЮЗ ВСЕХ
ГДЕ
ГРУППИРОВАТЬ ПО
ИМЕЮЩИЙ
КАК
7.40 СП08
7.50
7.51
ПЕРЕКРЕСТНОЕ СОЕДИНЕНИЕ
SAP NW ABAP
Литералы
Арифметические операторы
Условные выражения
7.40 СП05
В списке SELECT, например, литерал как FieldName
Как значение RHS
+
–
∗
Булевы операторы
НЕ, И, ИЛИ
Операторы сравнения
МЕЖДУ, =, <>, <, >, <=, >=, КАК
IS [NOT] NULL (Только в условии WHERE)
7.40 СП08
/ (Деление на основе плавающего числа)
7.50
7.51
Функция как значение правой части
SAP NW ABAP
Агрегатные функции
Числовые функции
Строковые функции
7.40 СП05
СРЕДНИЙ( [РАЗЛИЧНЫЙ] )
МАКС
МИН
СУММА( [РАЗЛИЧНЫЙ] )
COUNT( [РАЗЛИЧНЫЙ] )
СЧИТАТЬ(*)
ПОТОЛОК
МОД
ПОДСТРОКА
ЛПАД
7.40 СП08
АБС
DIV (целочисленное деление)
ДЕЛЕНИЕ (десятичное деление)
ПОЛ
КРУГЛЫЙ
КОНКАТ
ЗАМЕНЯТЬ
7.50
CONCAT_WITH_SPACE
ИНСТР
ЛЕВЫЙ
ДЛИНА
ЛТРИМ
ВЕРНО
РПАД
РТРИМ
7.51
AVG( [AS] ) для указания типа возвращаемого значения
FLTP_TO_DEC
ВЕРХНИЙ
НИЖЕ
SAP NW ABAP
Функции байтовой строки
Функции даты и времени
Другие функции
7.40 СП05
CAST во встроенные типы DDIC, например abap.fltp
7.40 СП08
ОБЪЕДИНЯТЬ
ВАЛЮТА_КОНВЕРСИЯ
UNIT_CONVERSION
ДЕСЯТИЧНЫЙ_СДВИГ
7.50
БИНТОХЕКС
ГЕКСТОБИН
DATS_DAYS_BETWEEN
DATS_ADD_DAYS
DATS_ADD_MONTHS
ДАТА_ДЕЙСТВИТЕЛЬНА
TIMS_IS_VALID
TSTMP_IS_VALID
TSTMP_CURRENT_UTCTIMESTAMP
TSTMP_SECONDS_BETWEEN
TSTMP_ADD_SECONDS
БРОСАТЬ
к элементам данных, например CHAR80
могут быть вложенными
7.51
ABAP_SYSTEM_TIMEZONE
ABAP_USER_TIMEZONE
TSTMP_TO_DATS
TSTMP_TO_TIMS
TSTMP_TO_DST
DATS_TIMS_TO_TSTMP
БРОСАТЬ
ТИП СОХРАНЕНИЯ
SSTRING к другим типам
CLNT, LANG, TIMS, UNIT для элементов данных типа CHAR и SSTRING
CHAR, SSTRING, NUMC в ACCP и наоборот
Агрегатная функция как операнд
SAP NW ABAP
Условные (CASE) выражения
Расширяемость
(Неуправляемые) Ассоциации
7.40 СП05
«Простой» CASE (ведет себя как оператор switch)
Вложенные операторы CASE
$EXTENSION.* (поддержка расширений таблиц базы данных)
Выражения пути в
ВЫБРАТЬ список
Предложение FROM
Предложение WHERE
Предложение HAVING
Фильтровать условия в выражениях пути, напримерProducts._Texts[lagu='EN']asenglish_name
7.40 СП08
«Поиск» CASE (ведет себя как if ... else if)
РАСШИРИТЬ ВИД
7.50
Выражения CASE можно использовать в качестве операндов в функциях CAST.
РАСШИРИТЬ ПРЕДСТАВЛЕНИЕ с входными параметрами, выражениями пути, преобразованиями, функциями даты и времени
7.51
Функция как значение правой части
РАСШИРИТЬ ПРЕДСТАВЛЕНИЕ с агрегатными функциями, предложениями GROUP BY и UNION
Определения ассоциаций в представлениях с UNION
Фильтры по умолчанию для ассоциаций (С ФИЛЬТРОМ ПО УМОЛЧАНИЮ)
В фильтрах пути можно указать мощность «ко многим» (*:)
SAP NW ABAP
Переменные сеанса
Входные параметры
Другой
7.40 СП05
КЛЮЧЕВЫЕ элементы
7.40 СП08
входные параметры в большинстве БД
7.50
$session.user (sy-uname)
$session.client (sy-mandt)
$session.system_language (си-язык)
Входные параметры на AnyDB
Табличная функция (только SAP HANA)
7.51
$session.system_date (sy-дата)
Расширения метаданных
[11]
Внутренние таблицы в ABAP
Внутренние таблицы являются важной особенностью языка ABAP. Внутренняя таблица определяется аналогично вектору структур в C++ или вектору объектов в Java. Главное отличие этих языков в том, что ABAP предоставляет набор операторов для легкого доступа и манипулирования содержимым внутренних таблиц. Обратите внимание, что ABAP не поддерживает массивы; единственный способ определить многоэлементный объект данных — использовать внутреннюю таблицу. [ необходима цитата ]
Внутренние таблицы — это способ хранения переменных наборов данных фиксированной структуры в рабочей памяти ABAP, и обеспечивают функциональность динамических массивов. Данные хранятся построчно, где каждая строка имеет одинаковую структуру.
Внутренние таблицы предпочтительно использовать для хранения и форматирования содержимого таблиц базы данных из программы. Кроме того, внутренние таблицы в сочетании со структурами являются важным средством определения сложных структур данных в программе ABAP.
В следующем примере определяется внутренняя таблица с двумя полями в формате таблицы базы данных VBRK.
* Сначала определите структурированный тип ТИПЫ : НАЧАЛО t_vbrk , VBELN ТИП VBRK - VBELN , ZUONR ТИП VBRK - ZUONR , КОНЕЦ t_vbrk .* Теперь определим внутреннюю таблицу нашего определенного типа t_vbrk ДАННЫЕ : gt_vbrk ТИП СТАНДАРТНАЯ ТАБЛИЦА t_vbrk , gt_vbrk_2 ТИП СТАНДАРТНАЯ ТАБЛИЦА t_vbrk . "легко определить больше таблиц* При необходимости определите структуру (строку внутренней таблицы) * Определение с типом или со ссылкой на внутреннюю таблицу: ДАННЫЕ : gs_vbrk ТИП t_vbrk , gs_vbrk_2 КАК СТРОКА gt_vbrk_2 .* При необходимости можно также определить тип таблицы ТИПЫ tt_vbrk ТИП СТАНДАРТНАЯ ТАБЛИЦА t_vbrk .
История
Следующий список дает лишь грубый обзор некоторых важных вех в истории языка ABAP. Для получения более подробной информации см. ABAP – Release-Specific Changes.
Проверка синтаксиса для литералов и констант хоста
Аннотация для подсказок по базе данных
Аннотации для выпуска элементов
Указание сущностей CDS послеUSING
Кавычки для логических схем
Дополнение in placeк заявлениюlate numbering
Добавлениеin class ... unique
Внешнее имя действия
Статический контроль поля
Произвольное имя для методов-обработчиков
Поведенческий пул без исключений
Язык манипулирования сущностями
TYPE STRUCTURE FOR
Ответная информация
Абсолютные имена типов
Бизнес-услуги
Проверки авторизации в обновлениях
Неявный тип сообщенияIF_T100_DYN_MSG
Использование тестовых классов
Дополнение COMBINATION MODE OR|ANDк заявлениюGRANT SELECT ON
Дополнение REDEFINITIONк заявлениюGRANT SELECT ON
ПредикатVOID
Дополнение IN SCENARIOк заявлениюGRANT SELECT ON
Общее Аспектное Условие ЗаявленияDEFINE ROLE
Новый вариантINHERITING CONDITIONS FROM SUPER
Разные REPLACINGоператоры
Определение родового аспекта
Ограничения DCL для иерархий ABAP CDS
Ограничения DCL для сущностей представления транзакционной проекции
7.55
Сентябрь 2020 г.
Внутренний оператор ABAP EXPORT NAMETAB больше не может использоваться и приводит к ошибке выполнения.
Внутренний оператор ABAP IMPORT NAMETAB все еще частично поддерживается по соображениям совместимости сверху вниз. Любой доступ к записям для типов таблиц DDIC приводит к ошибке времени выполнения. Любой другой доступ приводит к ошибкам из ATC.
Бывшая собственная таблица базы данных DDNTF для отдельных описаний полей nametab больше не поддерживается и будет удалена.
Теперь можно определять новые связи с внешними источниками данных в проекционных представлениях CDS.
Доступен новый тип представления CDS: сущность представления CDS.
Значение по умолчанию параметра профиля rdisp/max_alt_modes, определяющего возможное количество сеансов ABAP на сеанс пользователя, было увеличено с 6 до 16 и теперь совпадает с максимальным количеством сеансов ABAP на сеанс пользователя.
В присваиваниях после сложения NEXT конструкторского оператора REDUCE теперь можно использовать операторы присваивания вычислений +=, +=, *=, /= или &&=, и применяются соответствующие правила.
Поддержка регулярных выражений, совместимых с Perl
Дословные замены
Новое перехватываемое исключение CX_SY_STRING_SIZE_TOO_LARGE
Параметр форматирования CURRENCY для десятичных чисел с плавающей точкой
SQL: Новая агрегатная функция ALLOW_PRECISION_LOSS
SQL: Необязательная спецификация рамки окна в оконной функции
SQL: Новые оконные функции FIRST_VALUE и LAST_VALUE
SQL: Новые функции преобразования даты/времени для TIMESTAMPL, DATS и TIMS
SQL: Новые функции отметки времени UTCL_CURRENT, UTCL_ADD_SECONDS и UTCL_SECONDS_BETWEEN
SQL: Новые функции даты DATN_DAYS_BETWEEN, DATN_ADD_DAYS и DATN_ADD_MONTHS
SQL: Новые дополнения после предложения ORDER BY: NULLS FIRST и NULLS LAST
SQL: новые агрегатные функции MEDIAN, STDDEV, VAR, CORR и CORR_SPEARMAN
SQL: Новая функция преобразования геометрии as_geo_json
Пересмотрены условия SQL
SQL: Новая оконная функция NTILE
SQL: SELECT, INTO target – переменные хоста теперь можно объявлять встроенными, даже если предложение FROM является динамическим
SQL: Новые функции преобразования типов to_clob и to_blob
SQL: Новая функция конвертации валют конвертация валют
SQL: теперь в выражениях SQL можно использовать потоковую передачу и локаторы
SQL: Дополнительные типы данных, разрешенные в элементарных выражениях SQL
SQL: Параметры загрузки иерархии
SQL: Типизированные литералы
SQL: Новые строковые функции
SQL: Дополнение к предложению UPDATE FROM
SQL: Строгий режим проверки синтаксиса
Доступ к CDC: проверка с элементом IS [NOT] INITIAL в буквальном условии
Доступ к CDC: дополнительный обход, когда
Доступ к CDC: проверка имени пользователя в условиях пользователя
Доступ к CDC: типы данных
Доступ CDC: условия обхода аспекта
Декларация исключений CX_NO_CHECK
7.56
Октябрь 2021 г.
В ABAP Dictionary расширена единица загрузки. Теперь доступны следующие настройки:
Предпочтительный столбец
Предпочтительная страница
Колонка принудительного применения
Страница принудительного применения
Новый оператор EXTEND ABSTRACT ENTITY в DDL ABAP CDS позволяет добавлять новые элементы к существующим абстрактным сущностям CDS с помощью расширений абстрактных сущностей CDS.
В абстрактных сущностях CDS теперь можно определять ассоциации to-parent без условия ON. Условие ON можно опустить, если цель ассоциации также является абстрактной сущностью CDS
Определение иерархии DEFINE HIERARCHY теперь может использовать новое дополнение CACHE ON|OFF|FORCE для указания политики кэширования для сгенерированной иерархии.
Для каждого представления на основе CDS DDIC (устаревшее) при активации в словаре ABAP создается представление DDIC, управляемое CDS (устаревшее).
В сущностях представления CDS теперь можно повторно использовать выражения, определенные в списке SELECT, в других позициях операндов той же сущности представления CDS с помощью синтаксиса $projection.reuse_exp
Пункты UNION теперь поддерживаются в сущностях представления CDS. Есть несколько отличий от пунктов UNION в представлениях CDS DDIC. Самое важное отличие заключается в том, что ветви пунктов union могут быть вложены друг в друга в сущностях представления CDS
Добавление DISTINCT теперь доступно для операторов SELECT в сущностях представления CDS.
В сущностях представления CDS доступны два новых оператора множеств:
КРОМЕ
ПЕРЕСЕЧЕНИЕ
В сущностях представления CDS доступны две новые функции преобразования:
GET_NUMERIC_VALUE
CURR_TO_DECFLOAT_AMOUNT
Типизированные литералы теперь доступны для сущностей представления CDS. Типизированные литералы допускают явное объявление типа и доступны для многих встроенных типов данных словаря ABAP
В сущностях представления CDS реализована специальная обработка полей суммы CDS и полей количества CDS. Она отличается от обработки полей суммы и полей количества в DDIC, например, возможно больше типов данных, а ссылка на ключ валюты/ключ единицы учитывается в выражениях
В сущностях представления CDS матрица выражений была расширена:
В предложении WHERE в качестве операндов поддерживаются арифметические выражения и выражения case.
В предложении HAVING в качестве операндов поддерживаются арифметические выражения и выражения case.
В искомом выражении case в качестве операндов поддерживаются арифметические выражения и выражения case.
В проекционных представлениях CDS теперь можно переопределить ассоциации CDS из спроецированной сущности в заголовочной части. Это делается с помощью ключевого слова REDEFINE ASSOCIATION. Переопределение может включать новый фильтр, псевдоним и перенаправление на новую цель ассоциации, которая также должна быть проекционным представлением CDS, таким образом перемещая полную модель данных на проекционный слой
Теперь можно указать контракт поставщика для проекционных видов CDS с помощью ключевого слова PROVIDER CONTRACT. Контракт поставщика определяет, в каком сценарии используется проекционный вид CDS, а сценарий, в свою очередь, определяет, в какой среде выполнения выполняется вид и какие функции доступны
Следующая документированная программа ABAP теперь доступна для оценки возможности перехода от представления на основе CDS DDIC (устаревшего) к сущности представления CDS:
RUTDDLS_MIGRATION_CANDIDATES
Следующая документированная программа ABAP теперь доступна для миграции представлений на основе CDS DDIC в сущности представлений CDS:
RUTDDLSV2MIGRATION
Доступен новый тип ссылок для аннотаций:
LocalDefinitionRef
Были выпущены следующие новые аннотации AbapCatalog.extensibility:
AbapCatalog.extensibility.allowNewdataSources
AbapCatalog.extensibility.dataSources
AbapCatalog.extensibility.elementSuffix
AbapCatalog.расширяемость.расширяемый
AbapCatalog.extensibility.quota.maximumBytes
AbapCatalog.extensibility.quota.maximumFields
Доступны следующие новые функции системной таблицы CDS:
Оператор разыменования->* теперь можно использовать для переменных ссылок на данные с общим типом почти во всех позициях операндов. Раньше это было возможно только в операторе ASSIGN
Теперь можно указать операторы MOVE-CORRESPONDING со следующими дополнениями в контексте вложенных таблиц в глубоких структурах. Оба гарантируют, что вложенные таблицы глубоких целевых структур не будут удалены, а новые строки вложенных таблиц в глубоких исходных структурах будут добавлены
Теперь можно указывать операторы с оператором компонента CORRESPONDING со следующими дополнениями в контексте вложенных таблиц в глубоких структурах. Оба гарантируют, что вложенные таблицы глубоких целевых структур не будут удалены, а новые строки вложенных таблиц в глубоких исходных структурах будут добавлены:
ПРИСОЕДИНЯЮЩАЯСЯ БАЗА
Помимо существующей поддержки регулярных выражений PCRE и регулярных выражений POSIX (устаревших), ABAP теперь поддерживает также регулярные выражения XPath и регулярные выражения XSD. Внутри они преобразуются в регулярные выражения PCRE и обрабатываются библиотекой PCRE2
Оба вида регулярных выражений могут использоваться новыми (фабричными) методами CREATE_XPATH2 и CREATE_XSD системных классов CL_ABAP_REGEX и CL_ABAP_MATCHER.
Регулярные выражения XPath могут использоваться новым аргументом xpath в некоторых встроенных функциях.
Класс CL_ABAP_MATCHER теперь поддерживает вызовы в синтаксисе PCRE. Метод SET_CALLOUT может использоваться для регистрации класса обработчика, реализующего интерфейс IF_ABAP_MATCHER_CALLOUT. Специальные символы (?C...) регулярного выражения PCRE затем вызывают метод интерфейса CALLOUT при выполнении метода MATCH
Теперь это ограничение частично снято. В операторах INSERT, APPEND, COLLECT, MODIFY, DELETE, READ, LOOP и SORT операндами могут быть символы полей и формальные параметры, которые типизированы полностью обобщенно с TYPE data или TYPE any. Такие операнды можно использовать так, как если бы они были типизированы с помощью any table. Если задействован доступ к индексу, все равно требуются операнды, которые типизированы как минимум с TYPE index_table
Теперь псевдонимы можно объявлять для вторичных ключей внутренних таблиц, используя добавление ALIAS TYPES и DATA. Это может быть полезно при изменении существующих вторичных ключей без аннулирования пользователей
ABAP SQL теперь поддерживает новую строковую функцию INITCAP
Новые функции даты и времени
Новые составы
ABAP SQL теперь поддерживает новые операторы множеств INTERSECT и EXCEPT
Новый параметр start теперь может использоваться в функции REPLACE_REGEXPR. Кроме того, параметр encounter теперь может включать выражения
ABAP SQL теперь поддерживает новую строковую функцию SUBSTRING_REGEXPR, которая поддерживает регулярные выражения.
Если в операторе ABAP SQL используется одна из новых функций, перечисленных выше, или одна из новых системных табличных функций CDS SERIES_GENERATE_, проверка синтаксиса выполняется в строгом режиме, который обрабатывает оператор более строго, чем обычная проверка синтаксиса.
Начиная с этого выпуска, авторы средств контроля доступа могут помечать подмножество элементов CDS, используемых в их условиях доступа, как необязательные, так что сущности CDS, которые наследуют их условия доступа, больше не будут подвержены влиянию Day-1-impact.
С новым дополнением ALL условия доступа могут выражать, что доступ должен быть предоставлен только тогда, когда из ассоциации с множеством значений все значения удовлетворяют условию
Во всех местах управления доступом ссылки на объекты авторизации, поля авторизации и имена сценариев SACF могут быть записаны в синтаксисе идентификатора, если они соответствуют ему, и в строковом синтаксисе с одинарными апострофами в качестве альтернативы.
При использовании самоопределяемых аспектов они теперь могут обозначать произвольный набор своих элементов (поддерживаются выражения пути) как элемент фильтра. На эти элементы фильтра можно ссылаться при использовании самоопределяемого аспекта в условии доступа
Раздел REPLACING, ранее доступный только для наследования на основе сущностей INHERITING CONDITIONS FROM ENTITY cds_ntity, теперь также доступен для наследования на основе ролей INHERIT role FOR GRANT SELECT ON cds_entity
Раздел REPLACING наследования условий теперь поддерживает универсальный шаг замены для замены произвольного поля или ассоциации источника наследования произвольным полем или ассоциацией цели наследования.
Соблюдение настроек в переключаемой структуре авторизации (SACF) уже было возможно для выделенных условий PFCG:
АСПЕКТ PFCG_AUTH ( S_OBJECT В СЦЕНАРИИ ... )
Для иерархий CDS контроль доступа был ограничен использованием условий, не приводящих к фильтрации базы данных. Теперь элементы, расположенные в объявленном каталоге иерархии DIRECTORY ... FILTER BY, могут использоваться для формулирования таких условий
При работе системы с аварийным пользователем SAP* контроль доступа CDS теперь деактивирован
Начиная с версии 7.56, важные настройки ABAP Keyword Documentation можно настроить явно. Раньше документация настраивалась неявно из системных настроек
Программа ABAP_DOCU_CONFIG позволяет делать выбор между различными наборами параметров:
Типичный набор параметров для систем разработки SAP
Типичный набор параметров для систем развития клиентов
Типичный набор параметров для систем SAP S/4HANA
Типичный набор параметров для среды SAP S/4HANA Cloud ABAP
Типичный набор параметров для среды SAP BTP ABAP
Текущий набор параметров
Модель программирования приложений ABAP RESTful (RAP) была усовершенствована
7.57
Октябрь 2022 г.
Компоненты структур могут быть назначены полевым символам с помощью нового синтаксиса struc-(comp), который в значительной степени заменяет вариант ASSIGN COMPONENT OF
Новое дополнение ELSE UNASSIGN может быть указано для следующих вариантов оператора ASSIGN:
динамические задания
назначения динамических компонентов
динамический доступ
назначение табличного выражения
SAP HANA XSA заменяет SAP HANA XSC. Методы доступа, разработанные специально для объектов XSC, не подходят для объектов XSA и были объявлены устаревшими. Внешние представления DDIC являются одним из таких методов доступа. Они были объявлены устаревшими. Более подробную информацию можно найти в SAP Notes 2465027 и 3116165
Новый оператор объявления FINAL объявляет неизменяемую переменную, которой не может быть присвоено другое значение в других позициях записи того же контекста.
Новое дополнение STEP определяет размер шага и порядок обработки внутренней таблицы. Для операторов LOOP и FOR STEP может использоваться для управления размером шага и порядком обработки. Для операторов APPEND, DELETE, INSERT, VALUE и NEW STEP может использоваться только для определения размера шага. Изменить порядок обработки с помощью STEP для этих операторов невозможно.
Доступ к индексу таблицы при доступе к внутренней таблице с использованием хэш-ключа (доступ к хэшированной таблице с использованием ее первичного ключа или доступ к любой внутренней таблице с использованием хэшированного вторичного ключа) не допускается. Когда хэшированный ключ указывается динамически после USING KEY в операторе LOOP AT или выражении FOR ... IN, использование FROM и TO должно приводить к исключению. Этого не было до выпуска 7.57. Начиная с выпуска 7.57 в такой ситуации возникает ошибка времени выполнения ITAB_ILLEGAL_INDEX_OP. До выпуска 7.57 поведение было неопределенным.
Если в операторе LOOP AT или выражении FOR ... IN для FROM указано отрицательное значение, оно неявно устанавливается равным 1. До версии 7.57 это не было так в следующей ситуации:
Доступ к внутренней таблице осуществляется с использованием отсортированного ключа.
Внутренняя таблица содержит более 10 строк таблицы.
Указано условие WHERE, которое можно оптимизировать
Оператор IMPORT теперь позволяет присваивать данные типа n объектам данных типа c, если они имеют одинаковую длину. Это изменение может привести к несовместимому поведению, если обработка прежнего исключения приведет к результатам, отличным от нового поведения
Улучшена буферизация сущностей CDS: теперь поддерживается буферизация «Просмотр в представлении» при условии, что сущность представления CDS, используемая в качестве источника данных, соответствует определенным требованиям.
В сущностях представления CDS добавление ELSE NULL доступно в простых и сложных различиях регистра. Оно определяет значение null как возвращаемое значение ветви ELSE
В сущности представления CDS добавлены новые параметры литья
Буферизацию таблиц теперь можно определить для сущностей представления CDS:
Буферизацию таблиц можно включить и отключить с помощью аннотации @AbapCatalog.entityBuffer.definitionAllowed: true|false
Тип буферизации можно указать с помощью буфера сущности CDS, определенного с помощью DEFINE VIW ENTITY BUFFER ON cds_view_entity ...
В сущностях представления CDS функция SUBSTRING была улучшена. Теперь она принимает не только литералы, но и поля, параметры, выражения и встроенные функции в качестве аргументов pos и len
В сущностях представления CDS функции LEFT и RIGHT были улучшены. Теперь они принимают литералы, поля, параметры, выражения и встроенные функции в качестве аргумента len
В сущностях представления CDS доступны две новые переменные сеанса приложения:
bs_system_id
bs_zone_id
Использование управляемых CDS DDIC-представлений объявлено устаревшим. Следующая программа ABAP перечисляет все объекты репозитория, которые используют управляемые CDS DDIC-представления:
RUT_WHERE_USE_SQLVIEW
Доступны аналитические проекционные представления CDS для моделирования аналитических запросов. Аналитическое проекционное представление CDS определяется с помощью DEFINE TRANSIENT VIEW ENTITY AS PROJECTION ON. Значение для контракта поставщика должно быть установлено на ANALYTICAL_QUERY
Доступен новый тип представления проекции CDS: транзакционный интерфейс CDS. Транзакционные интерфейсы CDS служат стабильным общедоступным интерфейсным слоем в модели данных CDS. Обычно они используются в контексте модели программирования приложений ABAP RESTful для обеспечения основы для интерфейса RAP BO. Представление транзакционного интерфейса CDS определяется с помощью DEFINE VIEW ENTITY AS PROJECTION ON. Значение для контракта поставщика должно быть установлено на TRANSACTIONAL_INTERFACE
Реализована специальная обработка полей суммы CDS и полей количества CDS для сравнений в сущностях представления CDS.
Тип данных abap.string теперь поддерживается для входных параметров в списке параметров сущности представления CDS и в списке параметров табличной функции CDS.
Тип данных abap.string теперь поддерживается при привязке фактических параметров к входным параметрам сущности представления CDS, если в качестве источника данных после FROM используется табличная функция CDS.
Новый оператор EXTEND CUSTOM ENTITY DDL ABAP CDS позволяет добавлять новые элементы к существующим пользовательским сущностям CDS с помощью расширений пользовательских сущностей CDS.
Представления на основе CDS DDIC (устаревшие), определенные с помощью оператора DEFINE VIEW, устарели. При создании новых моделей данных вместо них следует использовать сущности представления CDS, определенные с помощью DEFINE VIEW ENTITY
Устаревшие версии языка ABAP
Статический ABAP с ограниченным использованием объектов
Стандартный ABAP с ограниченным использованием объектов
SAP HANA XSA заменяет SAP HANA XSC. Методы доступа, разработанные специально для объектов XSC, не подходят для объектов XSA и были объявлены устаревшими. Сюда входят внешние представления DDIC и прокси-серверы процедур базы данных. Более подробную информацию можно найти в SAP Notes 2465027 и 3116165
Модель программирования приложений ABAP RESTful (RAP) была усовершенствована
Шпаргалки по ABAP теперь доступны как часть документации по ключевым словам ABAP
7.58
Октябрь 2023 г.
Аналитические проекционные виды CDS теперь также могут иметь аналитические размерные виды в качестве проецируемой сущности.
Аннотация CDS @AbapCatalog.preserveKey устарела и теперь ведет себя несколько иначе.
Простые типы CDS определяют элементарные типы данных изначально в ABAP CDS. Простой тип CDS может быть обогащен метаданными с помощью аннотаций CDS. Синтаксический оператор для определения простого типа CDS — DEFINE TYPE.
Перечислимые типы CDS определяют перечислимые типы изначально в ABAP CDS. Синтаксический оператор для определения перечислимого типа CDS — DEFINE TYPE ENUM.
Аннотация ABAP Environment.sql.passValue теперь также доступна для параметров CDS в сущностях представления CDS, представлениях проекций CDS и иерархиях CDS. Область действия аннотации была расширена.
Новая аннотация ABAP доступна в сущностях представления CDS, проекционных представлениях CDS и иерархиях CDS: Environment.sql.passValueForClient. Она работает аналогично аннотации Environment.sql.passValue, но для клиентских полей. Она указывает, передается ли в базу данных заполнитель ? или литеральное значение в условии ABAP SQL, когда клиентское поле сравнивается с хостовой переменной.
Теперь доступен новый синтаксис для указания мощности ассоциаций CDS, объединений CDS и условий фильтрации выражений пути CDS.
Доступна новая сущность CDS: скалярная функция CDS. Она определяется с помощью оператора CDS DDL DEFINE SCALAR FUNCTION. Скалярная функция CDS связана с функцией AMDP, в которой она реализована с помощью SQLScript.
Матрица типов, которые могут быть преобразованы друг в друга с помощью CAST, была улучшена для представлений на основе CDS DDIC (устаревших) и для сущностей представлений CDS. Типы данных DECFLOAT16 и DECFLOAT34 теперь могут быть преобразованы в тип данных CURR.
Условие WHERE теперь доступно также для транзакционных интерфейсов CDS, чтобы ограничить набор результатов, возвращаемых при доступе к транзакционному интерфейсу.
Типизированные литералы теперь могут использоваться в большем количестве позиций операндов в ABAP CDS. Теперь их можно использовать в условии WHERE проекционных видов CDS и в условии ON ассоциаций CDS.
Выражение повторного использования $projection.Field теперь также можно использовать для повторного использования полей, выбранных с помощью выражения пути.
Для проекционных представлений CDS типа транзакционного запроса CDS доступен новый тип правила доступа: правило_проекции, определенное с помощью оператора GRANT SELECT ON ... AS PROJECTION ON ... FALLBACK ASSOCIATION ....
Доступны две новые функции DCL:
SWITCH_RUNTIME_STATE
TOGGLE_RUNTIME_STATE
Доступны два новых системных класса для числовых расчетов:
CL_ABAP_BIGINT содержит методы для вычислений с любым размером целых чисел в ABAP.
CL_ABAP_RATIONAL содержит методы вычислений с рациональными числами без потери точности.
Новый класс CL_ABAP_DIFF сравнивает содержимое внутренних таблиц и возвращает информацию о любых найденных различиях.
Новые методы MOVE_TRUNC, MOVE_TO_SHORT_TRUNC, ADD_TO_SHORT_TRUNC и SUBTRACTSECS_TO_SHORT_TRUNC системного класса CL_ABAP_TSTMP округляют дробные секунды длинных временных меток в меньшую сторону, тогда как существующие методы MOVE, MOVE_TO_SHORT, ADD_TO_SHORT и SUBTRACTSECS_TO_SHORT округляют коммерчески. Поскольку последнее может быть неожиданным, новые методы можно использовать уже сейчас, чтобы сохранить целую часть длинной временной метки.
Используя новый метод GET_CURRENT_PHASE, вы получаете информацию о текущей фазе транзакции RAP.
Новая спецификация \LINE позволяет указывать тип строки внутренней таблицы в абсолютном имени типа. За \LINE может следовать -comp, чтобы указать тип компонента типа строки.
В функциональных методах оператор RETURN может использоваться для присвоения результата выражения expr возвращаемому значению при завершении метода.
Дополнение DEFAULT позволяет назначать значения целевому компоненту на основе выражения.
До сих пор оптимизация условия WHERE с использованием доступа по ключу имела место только в очень ограниченных обстоятельствах, когда пары ключ-значение приходилось явно сравнивать на равенство и объединять с помощью AND. Теперь компилятор тщательно анализирует условие WHERE и пытается самостоятельно извлечь пары ключ/значение, необходимые для доступа по ключу.
Выражения ABAP SQL можно определить с правой стороны условия, заключенного в скобки.
Доступен новый синтаксис для указания мощности объединений: {MANY | ONE | {EXACT ONE}} TO {MANY | ONE | {EXACT ONE}}
Теперь можно обрабатывать несколько внутренних таблиц, к которым осуществляется доступ с помощью FROM @itab, в одном операторе ABAP SQL с помощью движка ABAP SQL. В настоящее время это ограничено объединениями внутренних таблиц, в которых не задействованы таблицы базы данных.
Благодаря новому дополнению PRIVILEGED ACCESS контроль доступа CDS может быть отключен для полного оператора SELECT.
Начиная с версии 7.58, отображение ABAP Keyword Documentation предлагает функцию отправки обратной связи в системах разработки, отличных от SAP, и в SAP Help Portal. До сих пор возможность отправки обратной связи существовала только в собственных системах разработки SAP. Функцию можно включить или выключить в конфигурации ABAP Keyword Documentation, см. SAP Note 3051036.
Начиная с версии 7.58, ABAP Keyword Documentation представляет новый макет в инструментах разработки ABAP для Eclipse (ADT), где также доступно переключение между Standard ABAP и ABAP Cloud. Новый макет включает:
Новая панель заголовка со ссылками на обратную связь по почте и веб-версию
Выделенные ключевые блоки для подсказок, блоков кода и т. д.
Столы с полосками зебры
В версии 7.58 модель программирования приложений ABAP RESTful (RAP) была улучшена следующим образом:
^ "Список кодов транзакций". SAP Help Portal . Получено 2023-09-09 .
^ "Полный список кодов транзакций в S4/HANA - docsfortec.com". docsfortec.com . Архивировано из оригинала 2024-05-14 . Получено 2024-05-14 .
^ "Начало работы с инструментами разработки ABAP для SAP NetWeaver | SAP Blogs". 19 июня 2012 г. Архивировано из оригинала 28 июня 2015 г. Получено 15 июня 2015 г.
^ "Пример программы ABAP со многими выражениями". Архивировано из оригинала 2015-06-19 . Получено 2015-06-19 .