Читайте также: |
|
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. |