Start of selection abap что это
Start of selection abap что это
SAP NetWeaver AS ABAP Release 751, ©Copyright 2017 SAP AG. All rights reserved.
This event keyword defines the standard processing block of an executable program. The associated event is raised by the ABAP runtime environment during the running of an executable program after any standard selection screens have been processed.
In an executable program, the following statements are assigned to an implicit START-OF-SELECTION event block, which is inserted by an explicit START-OF-SELECTION event block if one exists:
If the program is associated with a logical database, preparatory tasks can be performed in START-OF-SELECTION before the logical database imports the data. If the program is not associated with a logical database, this event block becomes a type of «main program» from which procedures or classic screens are called.
The following program section shows the recommended use of START-OF-SELECTION in an executable program. A dedicated method is called either instead of a function being implemented.
CLASS cls DEFINITION.
PUBLIC SECTION.
CLASS-METHODS main.
ENDCLASS.
CLASS cls IMPLEMENTATION.
METHOD main.
.
ENDMETHOD.
ENDCLASS.
The following three executable programs all work in exactly the same way:
The first program contains an explicit event block START-OF-SELECTION and shows the recommended arrangement.
DATA text TYPE string.
START-OF-SELECTION.
text = `Hello World!`.
cl_demo_output=>display_data( text ).
In the second program, an assignment is inserted before the first processing block, which constructs a second implicit event block START-OF-SELECTION before the explicit event block.
DATA text TYPE string.
START-OF-SELECTION.
cl_demo_output=>display_data( text ).
In the third program, there is no explicit processing block. All statements construct the event block START-OF-SELECTION implicitly.
DATA text TYPE string.
text = `Hello World!`.
cl_demo_output=>display_data( text ).
The third program has exactly the same meaning as the first program. The second program, in contrast, would have the following structure if expressed explicitly:
DATA text TYPE string.
START-OF-SELECTION.
text = `Hello World!`.
START-OF-SELECTION.
cl_demo_output=>display_data( text ).
ABAP: Красивый
Эта публикация предназначена ABAP-разработчикам в SAP ERP и всем им сочувствующим.
Немногие знают, что в fullscreen ALV можно подключать HTML-заголовки. Еще больше не знают, что можно сделать красивый стандартный выпадающий список, он же select-box, только для такой по сути стандартной фичи, потребуется много вашего Z-кода.
Выглядит примерно так:
Добро пожаловать под кат.
Поехали! Определим глобальные переменные:
— Выходная таблица нашего отчета, пусть она будет на основе всем известной таблицы MARA;
— Переменная, в которой мы будем хранить текущее значение выбранной в селект-боксе;
— константу с подпрограммой для HTML-header;
— класс-handler, который будет срабатывать при выборе данных, и объект handler.
Напишем главную программу отчета и подпрограммы по инициализации, получении данных и выводе отчета. Здесь особо отмечу, что нужно создать объект handler и подключить HTML-заголовок: i_callback_html_top_of_page = gc_form_top.
Для HTML-хедера создаем подпрограмму с именем, указанным в глобальном константе. Вызовем из нее подпрограмму, которая создаст нашу красоту:
Посмотрим подпрограмму по созданию селект-бокса. Здесь отмечу, что если в отчете была команда, снять фильтры, зачищаем нашу глобальную переменную (gv_matnr) со значением. Потом создаем линию, в которую добавляем заголовок фильтра, вызываем подпрограмму, которая заполнит нам значения в нем, и сам фильтр на форму, закрываем линию:
В программе по заполнению фильтра добавим сначала то значение, которое сейчас выбрано, чтобы оно было первым в списке. Потом добавим значение Все, если у нас в таблице больше одного значения. И потом все записи из таблицы:
Внедрим наш handler. Здесь в sender->value значение, выбранное пользователем. Запишем его сразу в нашу глобальную переменную gv_matnr. В подпрограмме set_filter по обработке стандартной фильтрации:
1) Получим глобальный grid в локальный объект;
2) Получим уже установленные параметры фильтрации, и снимем уже установленный ранее фильтр, по полю, которое мы фильтруем, через селект-бокс;
3) Добавим новые параметры фильтрации;
4) Сохраним фильтр;
5) Обновим отчет.
Запускаем! Любуемся на итог страданий:
UPDATE: можно довести до:
Вроде простая штука, а в SAPе нужно постараться еще. Всем спасибо.
Создание диалоговых программ в системе SAP R/3
Экраны SAP R/3
ЭКРАНЫ ВЫБОРА
Параметр определяет поле, которое может использоваться программой-отчетом как обычное поле, определенное с помощью оператора data. После ввода значения в поле ввода данного параметра на экране выбора и нажатия кнопки EXECUTE, это значение заносится в соответствующее поле, определенное параметром.
При вводе значений параметров или составных критериев выборки количество извлекаемых данных автоматически не ограничивается. В предложении WHERE оператора SELECT соответствующие параметры следует размещать так же, как и обычные поля.
Поскольку параметры выполняют роль интерфейсных объектов экрана выбора, то в синтаксисе определения parameters и data есть небольшие различия:
1) Начальное значение параметра определяется с помощью дополнения default (а не value, как для data). Однако это дополнение не является обязательным.
2) Структурированные параметры не поддерживаются (типа записей, задаваемых с помощью операторов BEGIN OF / END OF).
3) Параметры типа C длиной 1 могут выводиться на экран в виде переключателя, если использовать дополнение as checkbox в определении параметра. При выборе поля значение параметра будет равно Х, в противном случае он будет пустым.
Каждый параметр связан со своей определяемой на естественном языке меткой (или названием поля), которая отображается на экране перед полем ввода. Эту метку можно изменить или перевести на другой язык без изменения исходного текста программы.
СОСТАВНЫЕ КРИТЕРИИ ВЫБОРКИ
Составные критерии выборки (SELECT-OPTIONS) обычно применяются при задании сложной выборки (например, диапазона значений, исходного шаблона или их сочетания). Стандартная форма SELECT-OPTIONS на экране выбора имеет 2 поля ввода, позволяющих задать единственное значение или интервал.
Пример:
ABAP/4 автоматически сохраняет введенную информацию во внутренней, стандартно структурированной таблице, которая может использоваться в динамическом предложении WHERE оператора SELECT.
Задание составного критерия выборки в диалоговом окне
COMPLEX SELECTIONS:
Внутренняя таблица, соответствующая составному критерию SELECT-OPTION, всегда состоит из 4 столбцов: SIGN (признак), OPTION (операция), LOW (нижнее значение), HIGH (верхнее значение).
Каждая строка этой таблицы соответствует определенному условию выборки. Поля LOW и HIGH содержат используемые при сравнении значения и связаны с соответствующими полями таблицы: они должны иметь одинаковые тип и длину. Поле HIGH применяется только для задания диапазона значений, в противном случае оно сохраняет начальное значение.
При выполнении программы внутренняя таблица, связанная с составным критерием, автоматически заполняется данными, введенными пользователем на экране выбора. Однако ее можно заполнить значениями по умолчанию до отображения этого экрана, а также работать с ней, как с обычной таблицей (например, проверять введенные пользователем данные на корректность или правдоподобность).
Выполнение таких проверок лучше всего организовать на основе событий экрана выбора. Если какое-нибудь условие проверки не удовлетворяется, на экран выбора можно вывести соответствующее сообщение, после чего обновить экран и разрешить новый ввод данных в поля.
СОБЫТИЯ ЭКРАНА ВЫБОРА
В ABAP/4 предусмотрены события, обеспечивающие задание значений на экране выбора и присвоение критерию выборки этих значений:
INITIALIZATION в?» выполняется сразу после начала создания отчета и до обработки значений, заданных на экране выбора
AT SELECTION-SCREEN OUTPUT в?» выполняется до того, как будет выведен экран выбора
AT SELECTION-SCREEN ON P/S в?» выполняется после задания пользователем параметра p или составного критерия s
AT SELECTION-SCREEN в?» выполняется после ввода всех критериев выборки
Событие INITIALIZATION происходит только однажды, а событие AT SELECTION-SCREEN OUTPUT в?» при каждом нажатии Enter, если экран выборки активен. После обработки всех перечисленных событий ABAP/4 продолжает выполнение события START-OF-SELECTION, обрабатывая самый верхний уровень вложения выборки из базы данных.
События AT SELECTION-SCREEN и AT SELECTION-SCREEN ON P/S рекомендуется использовать для проверки введенных пользователем данных на допустимость значений и правдоподобие.
Каждое сообщение об ошибке, получаемое по событию AT SELECTION-SCREEN, немедленно останавливает программу-отчет и обновляет экран выбора. При этом можно изменить все критерии выборки. Если используется дополнение on p/s, то после события разрешается ввод только данного параметра или составного критерия. Текст сообщения об ошибке создается или изменяется двойным щелчком мыши на поле текста и хранится в системной таблице, содержащей информацию, определяемую на естественном языке.
Для ускорения получения отчета следует запретить неограниченные запросы к базе данных. Во избежание этого в составном критерии можно указать количество строк, которое следует использовать в предложении WHERE оператора SELECT.
Если внутренняя таблица, содержащая составной критерий, пуста, а пользователь не указал никакого критерия, то желательно выводить на экран сообщение об ошибке.
Пример:
ЭКРАНЫ ДИАЛОГА
Логика ДинПро (Dynamic Programs)
Содержимое полей в рабочей области экрана передается соответствующим элементам в программе в модулях PAI или считывается из элементов программы в модулях PBO.
Основной синтаксис описан в таблице.
Ключевое слово Назначение
MODULE Вызывает диалоговый модуль в ABAP программе
FIELD Обозначает точку переноса содержимого поля
ON Используется в сочетании с FIELD
VALUES Используется в сочетании c FIELD
CHAIN Стартует цепочку обработки полей
ENDCHAIN Завершает цепочку обработки полей
CALL Вызывает подэкран
LOOP Цикл обработки экранной таблицы
ENDLOOP Завершает цикл обработки экранной таблицы
Пример:
Обработка событий на экране осуществляется через обработку OK_CODE в модуле PAI (POH, POV).
Вызов ABAP диалоговых модулей
Для проверки нескольких полей используется следующий синтаксис в логике ДинПро:
Следующий модуль вызывается по user-command CS и function type S. Обычно такой код присваивается клавише F2 и так же срабатывает по mouse double-click. Модуль обрабатывается в порядке присутствия во Flow Logic и не пропускает проверок по input.
MODULE AT CURSOR-SELECTION
ПЕРЕДАЧА ДАННЫХ МЕЖДУ ABAP ПРОГРАММАМИ И ЭКРАНАМИ
ТИПЫ СООБЩЕНИЙ ОБ ОШИБКАХ
Технологии расширений функциональности системы SAP R/3
SAP-расширения (User Exits, Customer Exits)
Персонализация
Роли:
Варианты пользователя
Модификация
Нерегистрируемые модификации
Вспомогательные модификации
User exits
Расширение
ABAP dictionary
— Таблицы
— Field exit
Customer exits
-Function module exits
— Menu exits
— Screen exits
Business transaction events
Business Add-Ins
Стандарт R/3 (бизнес приложения)
Доработки
Транзакция SMOD
SE80. Имена Include c User exits содержат 8 позиций и содержат ‘FZ*’.
РЕКОМЕНДАЦИИ ПО ПРОГРАММИРОВАНИЮ USER EXITS
Для написания и первоначальной отладки кода используйте конструкцию
Вместо ‘USER’ должно быть имя пользователя под которым вы входите в SAP.
User exits типа в?? INCLUDEs в?? (которые включены в стандартную транзакцию) активизируются сразу после сохранения. Поэтому берегите нервы зарубежных партнеров и наших коллег, которые работают с этой транзакцией, и проверяйте ваш код, а только потом сохраняйте.
User exits типа в??User exits которые используют таблицыв?? надо обязательно активировать иначе ваши последние изменения не будут работать.
Программную точку останова в программе можно сделать так:
Самая информативная утилита для нахождения дополнительной информации это отладчик. В нем можно найти необходимые структуры данных и поля. Проверить область видимости и т.п.
В случае необходимости передать значения между user exit- ми (они часто имеют разные области видимости) используйте механизмы EXPORT в?»IMPORT.
ТРАНЗАКЦИОННЫЕ МОДИФИКАЦИИ
Загрузка данных в систему R/3
Работа с файлами
РАБОТА С ФАЙЛАМИ, НАХОДЯЩИМИСЯ НА СЕРВЕРЕ ПРИЛОЖЕНИЙ
Применение файлового интерфейса включает в себя три основных действия:
открытие файла;
запись или чтение;
закрытие файла.
Для открытия файла, принадлежащего файловой системе на сервере приложений, используется оператор OPEN DATASET, затем указывается имя файла. Для того, чтобы пользователь мог задать имя файла на экране выбора, предусмотрен параметр FILENAME, имеющий атрибут LOWER CASE, поскольку записи пути доступа и имени файла в некоторых ОС чувствительны к регистру.
Если файла с таким именем не существует, то команда OPEN DATASET создаст его. При наличии такого файла впоследствии в него будет записана новая информация. Если к содержимому файла требуется только дописать данные, следует использовать команду OPEN DATASET с дополнением FOR APPENDING. Тогда новые данные будут записаны после существующих.
Дополнение FOR OUTPUT команды OPEN DATASET означает, что данный файл открывается программой ABAP/4 для записи в него выходных данных (результатов). Дополнение IN TEXT MODE сообщает программе, что данные в файле будут представлены в виде строк текста. Разрешается использовать принятое по умолчанию дополнение IN BINARY MODE (в двоичном виде). Двоичные записи применяются для неструктурированных и необработанных данных, которые невозможно интерпретировать при стандартных операциях ввода/вывода. Так, исполняемые программы всегда передаются в виде двоичных кодов.
Если файл недоступен (например, отсутствует заданный путь доступа или соответствующие права доступа к файлу), система возвращает ненулевой код завершения оператора в переменной SY-SUBRC. Текст сообщения об ошибке передается в поле MSG_TEXT, которое следует за дополнением MESSAGE.
Чтобы переслать данные в файл, используется оператор TRANSFER.
Несмотря на то, что система закрывает все открытые программой файлы после ее исполнения, в программировании считается хорошим тоном после завершения работы с файлом закрывать его в явном виде с помощью оператора CLOSE. После того, как файл закрыт и открыт вновь, каждая последующая операция TRANSFER и READ DATASET (запись или чтение) выполняется с начала файла.
Чтение содержимого файла выполняется оператором READ DATASET. Убедиться, что структура данных при записи и чтении файла одинакова, можно, обратившись к Dictionary и используя для обеих программ общие файлы include, содержащие определения структур данных.
ИСПОЛЬЗОВАНИЕ ФАЙЛОВОЙ СИСТЕМЫ РАБОЧЕЙ СТАНЦИИ
В небольшой системе R/3 персональный компьютер (или рабочая станция) одновременно является и сервером представления данных, и сервером приложений. В этом случае пользователь всегда работает с файловой системой ПК и вполне может обходиться рассмотренными ранее командами записи и чтения файла.
В крупных системах сервер приложений обычно устанавливается на другом компьютере. Поскольку исполнительная система ABAP/4 работает на сервере приложений, программные команды transfer и read dataset будут работать с файлами файловой системы сервера приложений. Если же разработчик хочет использовать файловую систему ПК и его сервер представления данных, то следует применять специальные функции ABAP/4:
WS_DOWNLOAD (DOWNLOAD) в?» для сохранения внутренней таблицы в виде файла на сервере представления данных.
WS_UPLOAD (UPLOAD)в?» для загрузки размещенного на сервере представления данных файла во внутреннюю таблицу
Пример:
Технология пакетного ввода (Batch Input, Call Transaction)
Один из принципов системы SAP R/3 в?» ввод информации в систему через бизнес-транзакции, а не путем прямой записи в таблицы базы данных. При этом сохраняется непротиворечивость информации, т.к. база данных обновляется системой, а не напрямую программами разработчика. Для этого в системе SAP R/3 предусмотрена возможность автоматического ввода больших объемов информации (например, из внешнего файла или выполнения повторяющихся действий оператора при обработке значительных объемов информации) через бизнес-транзакции системы.
Технология BAPI
BAPI в?» это строго определенный интерфейс для процессов и данных для прикладных приложений, реализованный в качестве методов объектов.
Бизнес-объекты формируют основу для связи на высоких (удобных для пользователя) уровнях сети. Например, они позволяют системе R/3 функционировать через Интернет или осуществлять связь с программами на настольных ПК. Целью объектно-ориентированной SAP-стратегии является интеграция объектов на хозяйственном, а не на чисто техническом уровне.
Бизнес-объекты:
создают основу для четко определенной связи между системами клиент/сервер;
ориентированы на хозяйственную деятельность: например, существуют такие объекты, как «дебитор», «заказ» или «сотрудник»;
предоставляют бизнес-функции (методы). Например, для объекта «дебитор» существуют такие методы, как «Создание дебитора» и «Просмотр дебитора». Названия таких методов позволяют программировать понятно и, следовательно, без ошибок;
управляются централизованно в системе R/3, в репозитарии бизнес-объектов (РВО).
Интерфейсы BAPI (Business Application Programming Interfaces) являются функциональными интерфейсами. Они используют бизнес-функции, определенные для бизнес-объектов. Интерфесы BAPI можно вызвать как из системы R/3, так и вне ее.
Для поиска BAPI используется транзакция BAPI.
Русские Блоги
ABAP-объект наследования и интерфейса
1 наследство
1 Наследственная реализация полиморфизма
В наследовании полиморфизм достигается за счет перегрузки метода и ссылочных переменных. То есть подкласс может по-разному переопределять и реализовывать открытые или защищенные методы в базовом классе, а методы в классе должны быть методами экземпляра. В методе объявления производного класса требуется следующее объявление MEHTOD meth REDEFINITION.
Этот метод должен иметь тот же интерфейс, что и метод в базовом классе, но он может быть реализован различными кодами. Если существует один и тот же базовый класс, который содержит несколько производных классов, эти производные классы могут переопределять методы экземпляра.С точки зрения пользователей классов, эта операция существует в разных классах, но конкретный процесс реализации отличается. При доступе к базовому классу будет использоваться оригинальная реализация метода в базовом классе. При доступе к производному классу новый метод производного класса используется для реализации метода, а исходный метод базового класса блокируется, включая вызов метода через оператор самоссылки «me->».
В процессе перегрузки метода, если вам все еще нужно использовать метод в базовом классе внутри производного класса, вы можете использовать ключевое слово SUPER, чтобы указать базовый класс. CALL METHOD super->meth.
2 Абстрактный класс и выпускной класс
Иногда базовый класс содержит несколько производных классов, но базовый класс отображается только в виде шаблона и не нуждается в каком-либо объекте в качестве экземпляра. Вы можете объявить этот класс как абстрактный класс.
2 интерфейса
1 Определение и реализация интерфейса
Члены, которые могут быть объявлены в определении интерфейса, такие же, как и члены в классе (включая атрибуты, методы, события и т. Д.), Но нет необходимости в известной определенной видимости, поскольку все члены компонента интерфейса, реализованные в конкретном классе, являются общими членами. В то же время в определение интерфейса включается только часть объявления члена, и конкретная реализация также будет выполняться в определенном классе.
Интерфейс не имеет своего собственного экземпляра, поэтому нет необходимости в реализации метода, который должен быть реализован через определенные классы. Формат синтаксиса для реализации интерфейса в классе выглядит следующим образом
В определении класса реализация интерфейса может появляться только в общей части, и все компоненты, определенные в интерфейсе, будут добавлены как открытые члены класса. Член icomp в интерфейсе intf появляется в форме имени intf
icomp во время внутренней реализации класса. В части реализации класса должны быть включены все реализации метода интерфейса.
Использовать ссылку на интерфейс доступа
Для статического члена, определенного в интерфейсе, если член является константой, к нему можно получить доступ только через ссылку на интерфейс intf=>const
Для других членов статического интерфейса к ним можно получить доступ через сам класс или ссылку на класс, который реализует интерфейс
Подобно ссылкам на классы, вы можете назначать ссылки на интерфейсы различным ссылочным переменным, а также вы можете назначать значения между ссылками на классы и ссылками на интерфейсы. Во время процесса назначения система должна выполнить проверку синтаксиса, чтобы убедиться, что назначение может быть выполнено.
Предполагая, что есть ссылки на классы cref и интерфейсные ссылки iref, iref1 и iref2, следующие формы назначения находятся в процессе: iref1 = iref2. Система выполнит статическую проверку синтаксиса. Два интерфейса должны ссылаться на одно и то же объявление интерфейса, или интерфейс, на который ссылается iref2, является членом интерфейса iref1.
При использовании iref = cref Класс, на который ссылается cref, должен быть реализацией интерфейса iref.
Если ссылка на интерфейс назначена ссылке на объект cref = iref Тогда класс, на который ссылается cref, должен быть пустым классом OBJECT, запланированным для ABAP.
Для всех остальных случаев это должно быть сделано с помощью оператора принудительного присваивания или оператора принудительного присваивания «? =»
Во время принудительного назначения в системе не будет статической проверки синтаксиса, но система во время выполнения проверит, может ли ссылочная переменная целевого объекта указывать на объект, на который ссылается исходная переменная. Присвойте значение, если это разрешено, в противном случае оно вызовет отслеживаемую ошибку времени выполнения MOVE_CAST_ERROR.
3 события
1 Определите события
должен сначала объявить событие в разделе объявления класса, а затем вызвать событие в одном из методов
2 Метод обработки событий
Событие должно быть захвачено и обработано методом. Сначала необходимо определить метод обработки события для события (также называемый обработчиком события, а затем зарегистрироваться для события во время выполнения)
Интерфейс метода обработки события может содержать только формальные параметры, определенные в событии evt, и должен следовать настройке атрибута параметра в событии, но метод обработки события не должен использовать параметры, определенные в RAISE EVENT. Если вы хотите использовать неявный параметр SENDER, вы должны включить его в список интерфейса параметров.Этот параметр позволяет методу обработки события получить доступ к триггеру события и вернуть результат обработки.
3 Запуск и обработка событий
В реальной операции, чтобы метод обработки событий объекта мог захватить событие триггера другого объекта, вы должны сначала использовать оператор SET HANDLER для регистрации.Этот процесс регистрации формирует соответствующую взаимосвязь между объектом триггера и объектом ответа. Конечно, вы также можете зарегистрировать несколько обрабатывающих объектов, соответствующих одному триггерному объекту одновременно.
Оператор SET HANDLET создает таблицу обработки событий внутри системы и регистрирует соответствующий метод для каждого события. Эта таблица скрыта системой и не видна пользователям. Для событий экземпляра таблица обработки событий содержит имя метода, использованного для реализации обработки, и ссылку на зарегистрированный экземпляр класса. Таблица динамически поддерживается с помощью инструкции SET HANDLER. Соответствуя статическим событиям, система создает независимую от экземпляра таблицу обработки для связанных классов. Как только событие запущено, система ищет таблицу связанных событий и выполняет метод экземпляра (или соответствующий статический метод), соответствующий событию.