Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Vvedenie_v_ABAP

.pdf
Скачиваний:
96
Добавлен:
21.05.2015
Размер:
2.85 Mб
Скачать

Глава 5: Динамические программы

Содержание

Эта глава покажет структуру более сложных программ с интегрированными экранами. Вы создадите новую программу, которая выбирает и показывает сведения о, об одном из авиарейсов из базы данных SAP. Здесь вы воспользуетесь технологией dynpro (экранов).

Обоснование

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

Требования

Вы должны уметь пользоваться словарем ABAP и SQL-запросам.

41

Задание 1: Вход в систему SAP

Краткое описание: Используя SAPGui, войдите в систему с вашим именем пользователя и паролем

Запустите SAPGui и войдите в систему, используя предоставленное имя пользователя и пароль. Вы можете найти их в главе 1.

Задание 2: Создание первой программы с несколькими экранами (dynpros)

Краткое описание: Создайте программу, которая использует 2 экрана, чтобы отобразить сведения об авиарейсе из базы SAP

Запустите Навигатор по объектам из меню SAP Easy Access, используя следующий путь:

Инструменты ABAP-инструментальные средства Обзор • Навигатор по объектам.

Код данной транзакции – SE80

Создайте новую программу «ZY_*##_DYNPRO». Поставьте галочку «с TOP INCL.».

Измените название TOP-include на «ZY_*##_DYNPRO_TOP‟.

Совет:

Заметьте, что система SAP автоматически предложила имя для top include, которое не начиналось с обязательной буквы Z, обозначающей клиентский top include. В будущем, во время разработки вы часто будете сталкиваться с ситуацией, когда система предлагает название не из клиентского пространства имен. Будьте внимательны!

В следующем окне вы видите все свойства программы. Выберите статус «Тестовая» и Приложение «Общее для всех приложений». Нажмите «Enter», затем присвойте программу пакету «ZY_*##» и своему транспортному запросу. Система дважды спрашивает запрос переноса, так как первый относится к программе, а второй к top include.

Откройте top include, дважды щелкнув на нем. На этом шаге вы должны определить все глобальные переменные. Такие переменные доступны для всей программы и каждый экран имеет доступ к ним. Такими переменными будут таблица SPFLI,

42

системная переменная ok_code и рабочая переменная wa_flight. Определите их в the top include:

Следующий шаг – создание первого экрана (dynpro). Нажмите правой клавишей мыши по названию программы в дереве навигации и создайте новый экран с номером 100.

Теперь вы должны определить свойства нового экрана. Введите описание, а также экран «200» в качестве «Следующего экрана». Это позволит программе перейти к экрану 200 после того, как PAI-модуль 100-го экрана будет выполнен. Да, вы еще не создали экран 200, но вы сделаете это позже.

43

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

экранов, нажав включен, вы не кнопку «Назад»

кнопку на панели инструментов. Пока редактор экранов можете пользоваться SAPGui. Вы можете вернуться в SAPGui, нажав в редакторе экранов.

Нажмите кнопку текстового поля и нарисуйте текстовое поле на экране. Назовите его «TXT_INSTRUCTION» и введите текст: «Пожалуйста, выберите авиакомпанию и номер рейса». Экран должен выглядеть следующим образом:

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

Сделать это очень легко нажав кнопку «Окно словаря/полей программы» на панели инструментов. Введите название SPFLI и нажмите «Вызвать из словаря».

Так как ваше приложение должно предоставлять пользователю 2 поля ввода для авиакомпании и для рейса, выберите строки «CARRID» и «CONNID» и нажмите Enter. Это действие изменит внешний вид курсора и позволит разместить два поля ввода на экране. Экран должен получить следующий вид:

44

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

Совет:

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

Так как новая кнопка все еще подсвечена красным, вам необходимо ввести код функции. Дважды щелкните по кнопке. Это действие откроет свойства, где будет одно красное поле ввода, куда нужно ввести код функции («КодФкц») «SELECT» и нажать enter. Позже в программе нажатие кнопки должно будет автоматически присваивать переменной «ok_code» значение «SELECT». Эта переменная доступна из всех модулей программы, так как была объявлена в top include. Но пока что связь между кодом функции и переменной «ok_code» отсутствует. Чтобы добавить эту связь,

нажмите кнопку «Окно списка элементов» на панели инструментов. Откроется окно со списком элементов редактируемого экрана.

Вновь вы видите красное поле, показывающее, что чего-то не хватает. Рядом с красным полем есть маленький OK-символ, представляющий переменную «ok_code». Введите «OK_CODE», чтобы создать связь с глобальной переменной «ok_code».

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

Создать Транзакция:

45

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

В свойствах транзакции вы можете определить вызываемую программу. Введите название «ZY_*##_DYNPRO» и номер экрана 100. Проверьте и сохраните

46

транзакцию, активируйте все ваши разработки, если они все еще не были активированы.

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

Вернитесь в программу и переключитесь на вкладку «Логика выполнения». Здесь отображается логика выполнения первого экрана, разделенная на этапы «до вывода» и «после ввода». Добавьте следующий код:

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

Прежде чем закончить логику выполнения, разберемся со строкой состояния и названием программы. Для этого уберите значок комментария около строки «MODULE STATUS_0100» в логике выполнения и дважды нажмите на «STATUS_0100». Появится вопрос, хотите ли вы создать новый модуль. Выберите

«Да».

Система автоматически предложит название для нового модуля. Название для PBOмодуля нам подходит, а название нового include нет. Добавьте «ZY_» в начало названия нового include. Нажав Enter, вы увидите сообщение о том, что дополнительный include появился в программе.

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

47

Раскомментируйте обе строки SET и замените «xxx» на номер «100». Теперь вы настроите панель статуса и строку заголовка для вашего экрана. Для этого дважды щелкните на цифру «100» после «PF-STATUS». Система спросит, хотите ли вы создать статус. Ответьте «Да» и введите краткое описание на следующем экране. После появится следующее окно:

Здесь вы можете создавать, редактировать и удалять панель статуса своего экрана. Вы можете изменить код, передаваемый каждой кнопкой программе. Кнопки, которым никакой код не присвоен, впоследствии будут недоступны. Настройте кнопку «Назад», добавив текст «BACK» в соответствующее поле. Сохраните панель статуса и вернитесь к коду программу. Дважды щелкните на «100» после «TITLEBAR».

48

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

Теперь закончим логику выполнения. Перейдите к экрану «100» на вкладку «ЛогикаВыполн.». Раскомментируйте строку «USER_COMMAND_0100» и дважды щелкните по ней. Вам будет задан вопрос, хотите ли вы создать объект. Ответьте «Да» и исправьте название include: удалите последние 3 знака названия и добавьте «ZY_» в начало.

Присвойте новый модуль своему пакету. На следующем шаге вы должны добавить логику выполнения в этот модуль. В зависимости от значения «ok_code» программа должна либо прекращать свою работу («BACK») либо считывать данные из таблицы SPFLI SELECT»). Добавьте инструкцию «CASE»:

49

Сохраните, проверьте и активируйте все свои объекты.

Совет:

Заметьте, что инструкция CASE чувствительна к регистру. Это означает, что «back» и «BACK» отличаются при использовании в инструкции CASE! Это довольно распространенная ошибка.

Задание 3: Создание второго экрана

Краткое описание: Создайте второй экран, чтобы отобразить сведения о рейсе.

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

Создайте экран с номером «200». Посмотрите задание 2, если не помните, как это делается. Установите экран «100» «следующим экраном».

50

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]