Читайте также: |
|
MODULE clear_ok_code.
PROCESS AFTER INPUT.
MODULE user_command_0100.
Резюмепоуроку
Теперь вы сможете:
• внедрять GUI-заголовок
• внедрять GUI-статус (строка меню, символьная строка инструментов и строка кнопок) для списка и экрана
• выполнять ведение присвоения функциональных клавиш для экрана
Резюмепоглаве
Теперь вы сможете:
• описывать атрибуты и преимущества ABAP-списков
• внедрять заголовки списков и столбцов
• внедрять многоуровневые списки
• внедрять интерактивные списки
• описывать свойства и преимущества экранов выбора
• внедрять опции ограничения выбора данных на экране выбора
• внедрять проверку ввода и полномочий с выводом диалога при обнаружении ошибок на экране выбора
• перечислять атрибуты экранов и пояснять преимущества их использования
• внедрять простые экраны с полями ввода и вывода и экранными кнопками, а также вызывать их из соответствующей программы
• пояснять и внедрять внутреннюю программную обработку для вызовов экранов
• внедрять GUI-заголовок
• внедрять GUI-статус (строка меню, символьная строка инструментов и строка кнопок) для списка и экрана
• выполнять ведение присвоения функциональных клавиш для экрана
Дополнительная информация
... См. статью “События” в онлайн-документации и документацию по ключевым словам для соответствующего ABAP-оператора.
Глава 10
Повторно используемые компоненты
Обзор главы
См. цели отдельных уроков в рамках этого раздела.
|
Прослушав эту главу, вы сможете
• выполнять поиск функциональных модулей
• получать информацию о функциональных возможностях и способах использования функциональных модулей
• вызывать функциональный модуль в программе
• выполнять базовые шаги объектно-ориентированного программирования ABAP (создание инстанций и вызов методов) для использования классов и методов, имеющихся в стандартной SAP-системе
• выводить внутреннюю таблицу на экран с использованием SAP Grid
Control (ALV List Viewer)
• находить подходящие BAPI
• использовать вызовы BAPI в программе
Содержание главы
Урок: Работа с функциональными модулями............................346
Упражнение 18: Использование функциональных модулей......357
Урок: Работа с методами.....................................................364
Процедура: Вывод внутренней таблицы в ALV Grid Control на экране.......................................................................375
Упражнение 19: Использование методов.............................379
Урок: Работа с BAPI...........................................................384
Урок: Работа с функциональными модулями
Обзор урока
На этом уроке описывается поиск и использование функциональных модулей. В качестве примера выполняется вызов функционального модуля для инкапсуляции стандартного диалога и модуля в целях изменения записей в базе данных.
|
Прослушав этот урок, вы сможете
• выполнять поиск функциональных модулей
• получать информацию о функциональных возможностях и способах использования функциональных модулей
• вызывать функциональный модуль в программе
Практический пример
В программу необходимо добавить определенную функцию. Эта функция,
возможно, уже была реализована в виде функционального модуля, и если это так, то по возможности в программе следует использовать этот функциональный модуль.
Работа с функциональными модулями
|
Рисунок 194: Группа функций
Функциональный модуль представляет собой подпрограмму с определенной функцией, централизованно хранящуюся в библиотеке функций SAP-системы. Каждый функциональный модуль имеет интерфейс для импорта или экспорта параметров. Основная цель применения функциональных модулей заключается в их многократном использовании. Это означает, что один и тот же модуль может использоваться в программе несколько раз.
Функциональные модули организованы в группы функций. Каждая группа функций представляет собой совокупность функциональных модулей, имеющих аналогичные функции и/или работающих с одними и теми же данными.
Группа функций может содержать те же компоненты, что и исполняемая программа. Это следующие компоненты:
Объекты данных
Эти объекты являются глобальными в рамках группы функций, т.е. доступными и изменяемыми для всех функциональных модулей в пределах одной группы.
Подпрограммы
Вызов подпрограмм может выполняться из всех функциональных модулей в данной группе.
Экраны
Вызов экранов может выполняться из всех функциональных модулей в данной группе.
|
Рисунок 195: Функциональный модуль
Свойства функционального модуля включают в себя, помимо прочего,
краткое описание и группу функций, к которой относится данный модуль.
Как и в случае с подпрограммами, функциональный модуль может содержать определения локальных типов и объектов данных. Они будут доступны только в пределах функционального модуля.
Интерфейс функционального модуля может содержать следующие элементы:
• Параметры импорта: в эти параметры могут заноситься значения или переменные из вызывающей программы при вызове функционального модуля. Указание дополнительных параметров при вызове не обязательно.
• Параметры экспорта: выходные данные функционального модуля могут поступать в вызывающую программу посредством присвоения “приемной переменной”. Параметры экспорта всегда являются необязательными.
• Изменяемые параметры: переменные вызывающей программы, измененные функциональным модулем, могут переноситься в изменяемые параметры.
• Особые ситуации: особые ситуации могут инициироваться функциональным модулем при возникновении определенных ошибок и содержать информацию о соответствующей ошибке обработки в функциональном модуле. Особые ситуации должны обрабатываться вызывающей программой.
В общем случае присвоение интерфейсных параметров различным типам определяется в ABAP-словаре.
|
При вызове программой функционального модуля загружается вся соответствующая группа функций, после чего выполняется соответствующий модуль. Группа функций остается загруженной в рабочую память до закрытия вызывающей программы. При этом вызов другого функционального модуля, входящего в эту группу, обрабатывается без повторной загрузки и с теми же самыми глобальными данными группы функций.
Таким образом, при вызове функционального модуля, осуществляющего запись каких-либо значений в глобальные данных группы функций, другие функциональные модули в этой группе функций могут обращаться к этим данным в случае, если они вызываются в том же сеансе выполнения программы.
Помимо глобальных данных группы функций, функциональный модуль может также обращаться к собственным локально определенным объектам данных, а также собственным интерфейсным параметрам. Последние используются для получения данных или их передачи в вызывающую программу.
|
На рисунке выше иллюстрируются различные сценарии поиска:
• Поиск в приложении посредством иерархии приложений следует использовать в тех случаях, когда необходимо найти функциональные модули в пределах одного/нескольких прикладных компонентов.
• Произвольный поиск с применением информационной системы репозитария используется для нахождения функциональных модулей, не зависящих от прикладных компонентов.
• Поиск в программе следует использовать в тех случаях, когда необходимо найти функциональный модуль, вызываемый в имеющейся программе.
После нахождения функционального модуля необходимо выяснить, был ли он деблокирован (атрибуты функциональных модулей), поскольку возможность ведения и совместимость "снизу вверх" обеспечиваются только при использовании деблокированных функциональных модулей. Поэтому рекомендуется использовать только те функциональные модули, которые были деблокированы.
Для получения информации о функциональных возможностях и других характеристиках функционального модуля см. документацию по конкретному функциональному модулю.
|
Во многих ABAP-программах после выбора опции Отменить выводится экран подтверждения. На этом экране отображается стандартный текст “ Данные будут потеряны ”, а также произвольно задаваемый текст (см. рисунок выше). Пользователь может выбрать вариант Да или Нет.
|
Рисунок 199: Пример функционального модуля с диалогом пользователя (II)
Этот диалог интегрирован в функциональный модуль, который также можно использовать в собственных программах.
При вызове этого функционального модуля может осуществляться передача этому модулю дополнительных текстов заголовков посредством соответствующих параметров импорта. Функциональный модуль передает экран своей группы функций, который содержит текстовые строки и заголовок, а также кнопки Да и Нет. Затем посредством параметра экспорта ANSWER в вызывающую программу передается информация о кнопке, нажатой пользователем.
|
Рисунок 200: Интерфейс функционального модуля
Интерфейс функционального модуля включает в себя параметры импорта и экспорта, изменяемые параметры и особые ситуации.
Параметры, которые являются обязательными, должны передаваться вместе с данными при вызове функционального модуля. Для получения информации о дополнительных параметрах и условиях, при которых необходимо их указание, см. документацию по функциональному модулю и интерфейсным параметрам.
|
Функциональные модули можно протестировать в среде тестирования. Шаблон ввода позволяет задавать значения соответствующих параметров импорта и изменяемых параметров. Можно также перейти в режим отладки. После выполнения выводятся значения изменяемых параметров и параметров экспорта.
Если функциональный модуль инициирует особую ситуацию вследствие ошибки, на экран выводится информация об этой ошибке и текст сообщения (при его наличии).
Кроме того, отображается время выполнения. К обработке применяются те же ограничения, что и в случае динамического анализа. Поэтому следует повторить тестирование несколько раз с указанием одних и тех же данных.
Кроме того, можно сохранить тестовые данные в каталоге тестовых данных и создать тестовые последовательности.
|
Вызов функциональных модулей производится посредством ABAP-оператора CALL FUNCTION. В нем указывается имя функционального модуля заглавными буквами в одинарных кавычках.
В блоке EXPORTING производится передача значений в параметры импорта
функционального модуля.
В блоке IMPORTING вызова производится присвоение параметрам экспорта приемных переменных, посредством которых осуществляется получение результатов вызова.
Со стороны вызывающей программы может осуществляться экспорт значений в параметры импорта функционального модуля и импорт значений в приемные переменные, присвоенные параметрам экспорта этого функционального модуля.
В синтаксисе вызова в левой части присвоения параметра всегда должно быть указано имя интерфейсного параметра (формальный параметр), а
в правой части – объект данных или значение вызывающей программы
(текущий параметр).
|
При внедрении вызовов в исходном тексте рекомендуется создавать вызовы посредством кнопки Модель во избежание ошибок в написании текста. Кроме того, можно вывести группу функций в области навигации и затем создать вызов функционального модуля в исходном тексте путем перетаскивания в область редактора.
При этом генерируется весь синтаксис вызова. Это означает, что перечисляются все интерфейсные параметры, а также особые ситуации. Необязательная информация в вызове отмечается как комментарий.
После этого необходимо ввести текущие параметры и, при необходимости,
внедрить обработку особых ситуаций.
|
Если при выполнении функционального модуля возникают ошибки обработки (например, считываемая запись данных не существует), то функциональный модуль инициирует соответствующую особую
ситуацию. В результате обработка функционального модуля прерывается,
и происходит возврат в вызывающую программу. Если возникшая особая ситуация присутствует в блоке EXCEPTIONS данного вызова, то в системное поле sy-subrc вызывающей программы вводится указанный
код возврата. Проверка этого поля после вызова позволяет определить, была ли инициирована особая ситуация, и если да, то какая именно, после чего выполнить соответствующую обработку. Если при выполнении функционального модуля особые ситуации отсутствовали, поле sy-subrc вызывающей программы содержит нулевое значение.
Кроме того, существует возможность определения возврата некоторых из возможных особых ситуаций и задания другого кода возврата для всех не указанных особых ситуаций. Для этого необходимо ввести формальную особую ситуацию OTHERS с требуемым (произвольным) кодом возврата.
При выполнении вызова все особые ситуации должны выявляться и соответствующим образом обрабатываться программой. Если инициированная особая ситуация не выявлена, возникнет динамическая ошибка.
Упражнение 18: Использование функциональных модулей
Цели упражнения
Выполнив это упражнение, вы сможете
• выполнять поиск функциональных модулей
• вызывать функциональный модуль в программе
Практический пример
При выборе функции Отменить на экране программы происходит обработка диалогового окна подтверждения. Кроме того, при выборе опции Сохранить производится обновление записи данных в таблице базы данных.
Эти возможности внедряются посредством вызовов функциональных модулей.
Задание 1:
Внедрение стандартного диалога подтверждения для функции Отменить
1. Расширьте программу ZBC400_##_DYNPRO_1 или скопируйте шаблон SAPBC400UDS_DYNPRO_4 в новую программу ZBC400_##_DYNPRO_5.
2. Вывод диалогового окна подтверждения для функции Отменить инициируется функциональным модулем POPUP_TO_CONFIRM. Изучите интерфейс функционального модуля, прочтите документацию и протестируйте функциональный модуль в среде тестирования.
3. В GUI-статусе экрана активируйте функцию Отменить (код функции
"RW").
4. Расширьте модуль USER_COMMAND_0100 и проанализируйте код функции для функции Отменить. Затем внедрите вызов функционального модуля POPUP_TO_CONFIRM с использованием кнопки Модель. Определите следующую реакцию на ответ пользователя, возвращаемый функциональным модулем:
- если пользователь выбрал отмену, для параметра следующего экрана динамически устанавливается значение "0";
- в противном случае выполняется переход к экрану 100.
Продолжение на следующей странице
Задание 2:
Обновление таблицы базы данных согласно данным, введенным пользователем
1. Измените процесс обработки кода функции SAVE для вызова функционального модуля BC400_UPDATE_BOOK с целью обновления базы данных.
2. Добавьте перенос введенных пользователем данных в функциональный модуль согласно их типу, а также обработку особых ситуаций в функциональном модуле.
3. Если база данных была обновлена успешно, происходит возврат к основному списку с выводом сообщения 148 класса сообщений BC400 (соответствующий тип сообщения: "S").
В противном случае выводится сообщение об ошибке 149 класса сообщений BC400 (тип сообщения: "E").
Решение 18: Использование функциональных модулей
Задание 1:
Внедрение стандартного диалога подтверждения для функции Отменить
1. Расширьте программу ZBC400_##_DYNPRO_1 или скопируйте шаблон SAPBC400UDS_DYNPRO_4 в новую программу ZBC400_##_DYNPRO_5.
a) Этот шаг выполняется в соответствии с обычной процедурой.
2. Вывод диалогового окна подтверждения для функции Отменить инициируется функциональным модулем POPUP_TO_CONFIRM. Изучите интерфейс функционального модуля, прочтите документацию и протестируйте функциональный модуль в среде тестирования.
a) Этот шаг выполняется в соответствии с описанием в учебных материалах.
Обязательные параметры импорта:
TEXT_QUESTION (макс. 80 знаков): вопрос в диалоговом окне.
Необязательные параметры импорта:
TITLEBAR (макс. 40 знаков): заголовок диалогового окна.
DIAGNOSE_OBJECT(SE61, тип DT): дополнительный диагностический текст, выводимый над текстом вопроса в диалоговом окне.
TEXT_BUTTON_1 (макс. 8 знаков): текст на первой кнопке.
ICON_BUTTON_1 (макс. 30 знаков): имя пиктограммы на первой кнопке (таблица ICON).
TEXT_BUTTON_2 (макс. 8 знаков): текст на второй кнопке.
ICON_BUTTON_2 (макс. 30 знаков): имя пиктограммы на второй кнопке (таблица ICON).
DEFAULT_BUTTON ("1", "2" или "A"): кнопка с присвоением по умолчанию.
DISPLAY_CANCEL_BUTTON ("X". " ’’): отображение кнопки Отменить.
USERDEFINED_F1_HELP (SE61, тип DT): пользовательский текст справки, выводимый на экран при нажатии дополнительной кнопки.
Продолжение на следующей странице
START_COLUMN (тип SY-CUCOL): начальный столбец диалогового окна.
START_ROW (тип SY-CUROW): начальная строка диалогового окна.
POPUP_TYPE (тип ICON-NAME): пиктограмма, выводимая рядом с текстом вопроса в диалоговом окне.
IV_QUICKINFO_BUTTON_1 (макс. 132 знака):
всплывающая подсказка для первой кнопки.
IV_QUICKINFO_BUTTON_2 (макс. 132 знака):
всплывающая подсказка для второй кнопки.
Параметр экспорта (всегда является необязательным):
ANSWER (значение: "1", "2", "A"): ответ, выбранный пользователем.
Необязательные табличные параметры:
PARAMETER (тип строки SPAR): таблица переноса для параметров в текстах диагнозов и вопросов.
Особые ситуации:
TEXT_NOT_FOUND: диагностический текст не найден.
3. В GUI-статусе экрана активируйте функцию Отменить (код функции
"RW").
a) Этот шаг выполняется в соответствии с обычной процедурой.
4. Расширьте модуль USER_COMMAND_0100 и проанализируйте код функции для функции Отменить. Затем внедрите вызов функционального модуля POPUP_TO_CONFIRM с использованием кнопки Модель. Определите следующую реакцию на ответ пользователя, возвращаемый функциональным модулем:
- если пользователь выбрал отмену, для параметра следующего экрана динамически устанавливается значение "0";
- в противном случае выполняется переход к экрану 100.
a) См. выдержку из исходного текста в примере решения.
Продолжение на следующей странице
Задание 2:
Обновление таблицы базы данных согласно данным, введенным пользователем
1. Измените процесс обработки кода функции SAVE для вызова функционального модуля BC400_UPDATE_BOOK с целью обновления базы данных.
a) См. выдержку из исходного текста в примере решения.
2. Добавьте перенос введенных пользователем данных в функциональный модуль согласно их типу, а также обработку особых ситуаций в функциональном модуле.
a) См. выдержку из исходного текста в примере решения.
3. Если база данных была обновлена успешно, происходит возврат к основному списку с выводом сообщения 148 класса сообщений BC400 (соответствующий тип сообщения: "S").
В противном случае выводится сообщение об ошибке 149 класса сообщений BC400 (тип сообщения: "E").
a) См. выдержку из исходного текста в примере решения.
Результат
Выдержка из исходного текста SAPBC400UDS_DYNPRO_5:
MODULE user_command_0100 INPUT.
CASE ok_code.
WHEN ’BACK’.
SET SCREEN 0.
WHEN ’RW’.
Дата добавления: 2015-11-16; просмотров: 45 | Нарушение авторских прав
<== предыдущая страница | | | следующая страница ==> |
MODULE STATUS_0100. | | | MESSAGE e149(bc400). ENDIF. |