Главная страница

Руководство для участников курса Версия курса 2й квартал 2005 г. Продолжительность курса 5 Дн. Номер материала 50072594


Скачать 38.91 Mb.
НазваниеРуководство для участников курса Версия курса 2й квартал 2005 г. Продолжительность курса 5 Дн. Номер материала 50072594
АнкорBC400_RU_ECC_2005.pdf
Дата13.04.2017
Размер38.91 Mb.
Формат файлаpdf
Имя файлаBC400_RU_ECC_2005.pdf
ТипРуководство
#4748
страница10 из 23
1   ...   6   7   8   9   10   11   12   13   ...   23
Глава 5: Сбор данных
BC400
162
© 2006 г. SAP AG All rights reserved. Авторские права защищены.
06-04-2006

BC400
Урок: Считывание таблиц базы данных
Упражнение 8: Сбор данных с
использованием цикла SELECT
Цели упражнения
Выполнив это упражнение, вы сможете

программировать доступ к базе данных с использованием циклов

ограничивать выбор данных в соответствии с параметрами ввода
Практический пример
Необходимо расширить ABAP-программу так, чтобы в результате ее выполнения выводились только те расписания рейсов, которые относятся к выбранным пользователем авиакомпаниям.
Список должен также включать в себя процентное соотношение занятых мест для каждого рейса.
Задание 1:
Считывание нескольких строк с использованием цикла согласно выбору пользователя
1.
Скопируйте исполняемую программу ZBC400_##_GS_LIST (решение для упражнения из урока “Разработка программ и организация разработок”) или шаблон SAPBC400WBS_GS_LIST и присвойте им новое имя
ZBC400_##_SELECT_SFLIGHT.
2.
Измените определение рабочей области (рекомендуемое имя: wa_flight).
После этого используйте глобальную структуру SBC400FOCC для типизации. Просмотрите информацию о полях этой структуры.
3.
Определите параметр ввода для сокращенного названия авиакомпании.
4.
В таблице базы данных SFLIGHT должны выбираться все расписания рейсов для выбранной пользователем авиакомпании. Ограничьте выбор полями таблицы, для которых в рабочей области содержится целевое поле.
5.
Каково первое ключевое поле прозрачной таблицы SFLIGHT? Содержит ли оператор SELECT выражение WHERE? Используется ли первичный индекс в интерфейсе базы данных (до сих пор)?
Продолжение на следующей странице
06-04-2006
© 2006 г. SAP AG All rights reserved. Авторские права защищены.
163

Глава 5: Сбор данных
BC400
Задание 2:
Расчет процентной занятости мест по рейсу
1.
В рамках оператора цикла должен производиться расчет процентной занятости мест в каждом рейсе. Присвойте результат полю
PERCENTAGE в рабочей области.
2.
Расширьте вывод списка путем включения данных о процентном соотношении занятых мест.
164
© 2006 г. SAP AG All rights reserved. Авторские права защищены.
06-04-2006

BC400
Урок: Считывание таблиц базы данных
Решение 8: Сбор данных с
использованием цикла SELECT
Задание 1:
Считывание нескольких строк с использованием цикла согласно выбору пользователя
1.
Скопируйте исполняемую программу ZBC400_##_GS_LIST (решение для упражнения из урока “Разработка программ и организация разработок”) или шаблон SAPBC400WBS_GS_LIST и присвойте им новое имя
ZBC400_##_SELECT_SFLIGHT.
a)
Этот шаг выполняется в соответствии с обычной процедурой.
2.
Измените определение рабочей области (рекомендуемое имя: wa_flight).
После этого используйте глобальную структуру SBC400FOCC для типизации. Просмотрите информацию о полях этой структуры.
a)
См. выдержку из исходного текста в примере решения.
В состав глобальной структуры SBC400FOCC входят следующие компоненты:
- CARRID типа S_CARR_ID;
- CONNID типа S_CONN_ID;
- FLDATE типа S_DATE;
- SEATSMAX типа S_SEATSMAX;
- SEATSOCC типа S_SEATSOCC и
- PERCENTAGE типа S_FLGHTOCC.
За исключением последнего компонента, все прочие поля имеют тот же самый тип, что и поля с аналогичными именами из прозрачной таблицы SFLIGHT. В таблице SFLIGHT отсутствует
соответствие для поля PERCENTAGE, в которое должны переноситься данные о занятости мест в текущем рейсе.
3.
Определите параметр ввода для сокращенного названия авиакомпании.
a)
См. выдержку из исходного текста в примере решения.
Продолжение на следующей странице
06-04-2006
© 2006 г. SAP AG All rights reserved. Авторские права защищены.
165

Глава 5: Сбор данных
BC400
4.
В таблице базы данных SFLIGHT должны выбираться все расписания рейсов для выбранной пользователем авиакомпании. Ограничьте выбор полями таблицы, для которых в рабочей области содержится целевое поле.
a)
См. выдержку из исходного текста в примере решения.
5.
Каково первое ключевое поле прозрачной таблицы SFLIGHT? Содержит ли оператор SELECT выражение WHERE? Используется ли первичный индекс в интерфейсе базы данных (до сих пор)?
a)
Первым ключевым полем прозрачной таблицы SFLIGHT является поле MANDT. Даже если значение для этого поля не указывается в выражении WHERE, это значение (текущий мандант выполнения)
переносится в базу данных функцией “автоматического выбора манданта”. Это означает, что выбор ограничивается полем
MANDT, а не CARRID. Следовательно, в этом случае для выбора записей интерфейсом базы данных может использоваться первичный индекс (частичная, но выровненная по левому краю область ключевых полей в ограничении выбора).
Рекомендация: Примечание относительно автоматического выбора манданта:
При обращении системы выполнения АВАР к специфичным для манданта таблицам, для которых не определен конкретный мандант, предполагается,
что приниматься во внимание должны только те данные, которые относятся к манданту входа в систему пользователя. Поэтому в интерфейсе базы данных выражение WHERE автоматически дополняется условием mandt = sy-mandt
. (Информация о текущем манданте выполнения содержится в поле sy-mandt.)
Задание 2:
Расчет процентной занятости мест по рейсу
1.
В рамках оператора цикла должен производиться расчет процентной занятости мест в каждом рейсе. Присвойте результат полю
PERCENTAGE в рабочей области.
a)
См. выдержку из исходного текста в примере решения.
Продолжение на следующей странице
166
© 2006 г. SAP AG All rights reserved. Авторские права защищены.
06-04-2006

BC400
Урок: Считывание таблиц базы данных
2.
Расширьте вывод списка путем включения данных о процентном соотношении занятых мест.
a)
См. выдержку из исходного текста в примере решения.
Результат
Выдержка из исходного текста: SAPBC400DDS_SELECT_SFLIGHT
REPORT sapbc400dds_select_sflight.
DATA
wa_flight TYPE sbc400focc.
PARAMETERS pa_car TYPE s_carr_id.
* Select all flights belonging to carrier PA_CAR :
SELECT carrid connid fldate seatsmax seatsocc
FROM sflight
INTO CORRESPONDING FIELDS OF wa_flight
WHERE carrid = pa_car.
* Calculate occupation of each flight:
wa_flight-percentage =
100 * wa_flight-seatsocc / wa_flight-seatsmax.
* Create list:
WRITE: / wa_flight-carrid,
wa_flight-connid,
wa_flight-fldate,
wa_flight-seatsmax,
wa_flight-seatsocc,
wa_flight-percentage, ’%’
ENDSELECT.
IF sy-subrc NE 0.
WRITE: ’No ’, pa_car, ’flights found !’.
ENDIF.
06-04-2006
© 2006 г. SAP AG All rights reserved. Авторские права защищены.
167

Глава 5: Сбор данных
BC400
168
© 2006 г. SAP AG All rights reserved. Авторские права защищены.
06-04-2006

BC400
Урок: Считывание таблиц базы данных
Упражнение 9: Сбор и буферизация
данных во внутренней таблице
Цели упражнения
Выполнив это упражнение, вы сможете

заполнять внутренние таблицы данными из таблиц баз данных

выполнять сортировку содержимого внутренних таблиц
Практический пример
Необходимо расширить имеющуюся ABAP-программу так, чтобы требуемые расписания рейсов отображались в порядке возрастания занятости мест.
Задание 1:
Сбор данных и заполнение внутренней таблицы
1.
Скопируйте программу ZBC400_##_SELECT_SFLIGHT
(решение из первого упражнения настоящего урока) или шаблон
SAPBC400DDS_SELECT_SFLIGHT и присвойте им новое имя
ZBC400_##_SELECT_SFLIGHT_ITAB.
2.
Определите внутреннюю таблицу (рекомендуемое имя: it_flight) с использованием глобального типа таблицы, в котором типом строки является глобальная структура SBC400FOCC.
Рекомендация: В SBC400FOCC вызовите ведомость
использования для поиска подходящего типа таблицы
(возможно, он уже существует).
3.
Каждая считываемая строка SFLIGHT должна не выводиться непосредственно, а вставляться во внутреннюю таблицу (оператор
INSERT).
Задание 2:
Сортировка и вывод внутренней таблицы
1.
Выполните сортировку внутренней таблицы в соответствии со значениями занятости (по восходящей).
2.
Используйте оператор LOOP для вывода содержимого внутренней таблицы.
06-04-2006
© 2006 г. SAP AG All rights reserved. Авторские права защищены.
169

Глава 5: Сбор данных
BC400
Решение 9: Сбор и буферизация данных
во внутренней таблице
Задание 1:
Сбор данных и заполнение внутренней таблицы
1.
Скопируйте программу ZBC400_##_SELECT_SFLIGHT
(решение из первого упражнения настоящего урока) или шаблон
SAPBC400DDS_SELECT_SFLIGHT и присвойте им новое имя
ZBC400_##_SELECT_SFLIGHT_ITAB.
a)
Этот шаг выполняется в соответствии с обычной процедурой.
2.
Определите внутреннюю таблицу (рекомендуемое имя: it_flight) с использованием глобального типа таблицы, в котором типом строки является глобальная структура SBC400FOCC.
Рекомендация: В SBC400FOCC вызовите ведомость
использования для поиска подходящего типа таблицы
(возможно, он уже существует).
a)
Этот шаг выполняется в соответствии с обычной процедурой.
3.
Каждая считываемая строка SFLIGHT должна не выводиться непосредственно, а вставляться во внутреннюю таблицу (оператор
INSERT).
a)
См. выдержку из исходного текста в примере решения.
Задание 2:
Сортировка и вывод внутренней таблицы
1.
Выполните сортировку внутренней таблицы в соответствии со значениями занятости (по восходящей).
a)
См. выдержку из исходного текста в примере решения.
2.
Используйте оператор LOOP для вывода содержимого внутренней таблицы.
a)
См. выдержку из исходного текста в примере решения.
Результат
Выдержка из исходного текста: SAPBC400DDS_SELECT_SFLIGHT_TAB
Продолжение на следующей странице
170
© 2006 г. SAP AG All rights reserved. Авторские права защищены.
06-04-2006

BC400
Урок: Считывание таблиц базы данных
REPORT sapbc400dds_select_sflight_tab.
DATA: it_flight TYPE sbc400_t_sbc400focc,
wa_flight LIKE LINE OF it_flight.
PARAMETERS pa_car TYPE s_carr_id.
* Select all flights belonging to PA_CAR :
SELECT carrid connid fldate seatsmax seatsocc
FROM sflight
INTO CORRESPONDING FIELDS OF wa_flight
WHERE carrid = pa_car.
* Calculate occupation of flight wa_flight-percentage =
100 * wa_flight-seatsocc / wa_flight-seatsmax.
* Insert flight into internal table
INSERT wa_flight INTO TABLE it_flight.
* If you are using standard tables, "APPEND wa_flight TO it_flight."
* would be the same as the above INSERT-statement.
ENDSELECT.
IF sy-subrc = 0.
* Sort internal table
SORT it_flight BY percentage.
* Create list
LOOP AT it_flight INTO wa_flight.
WRITE: / wa_flight-carrid,
wa_flight-connid,
wa_flight-fldate,
wa_flight-seatsocc,
wa_flight-seatsmax,
wa_flight-percentage, ’%’.
ENDLOOP.
ELSE.
WRITE: ’No ’, pa_car, ’flights found !’.
Продолжение на следующей странице
06-04-2006
© 2006 г. SAP AG All rights reserved. Авторские права защищены.
171

Глава 5: Сбор данных
BC400
ENDIF.
172
© 2006 г. SAP AG All rights reserved. Авторские права защищены.
06-04-2006

BC400
Урок: Считывание таблиц базы данных
Резюме по уроку
Теперь вы сможете:

перечислять различные методы поиска соответствующих таблиц баз данных

реализовывать доступ для чтения к определенным столбцам и строкам в таблице базы данных

описывать различные способы получения доступа для чтения к нескольким таблицам базы данных
06-04-2006
© 2006 г. SAP AG All rights reserved. Авторские права защищены.
173

Глава 5: Сбор данных
BC400
Урок:
Проверка полномочий
Обзор урока
На этом уроке описываются цели использования проверки полномочий и способы ее внедрения в программах.
Цели урока
Прослушав этот урок, вы сможете

пояснять концепцию полномочий SAP

внедрять проверки полномочий
Практический пример
Проверки полномочий в программах необходимы для защиты данных от несанкционированного доступа.
Проверки полномочий
Критически важные данные и функции SAP-системы должны быть защищены от несанкционированного доступа. В рамках имеющейся программы необходимо внедрить проверки полномочий для предоставления пользователям доступа лишь к тем областям, на работу с которыми у пользователей имеются полномочия. Концепция полномочий SAP
представлена на рисунке ниже.
174
© 2006 г. SAP AG All rights reserved. Авторские права защищены.
06-04-2006

BC400
Урок: Проверка полномочий
Рисунок 101: Концепция полномочий SAP
Рисунок 102: Объекты полномочий и полномочия (пример)
06-04-2006
© 2006 г. SAP AG All rights reserved. Авторские права защищены.
175

Глава 5: Сбор данных
BC400
Объекты полномочий могут быть определены в рамках классов объектов.
При определении объекта полномочий необходимо указать соответствующие поля (без значений). Фактические полномочия создаются путем присвоения значений полям. Полномочия могут быть интегрированы в необходимые
основные записи пользователей посредством профиля полномочий.
Для объекта полномочий может быть создано несколько разных видов полномочий (для интеграции в различные основные записи пользователей).
Рисунок 103: Проверка полномочий (принципиальная схема)
Для проверки наличия в основной записи пользователя необходимых полномочий на использование функции во время выполнения может использоваться оператор AUTHORITY-CHECK . Выполнение программы продолжается при получении положительного результата проверки
(sy-subrc):
sy-subrc = 0: пользователь имеет требуемые полномочия -> выполнение функции (например, SELECT);
Else: полномочия отсутствуют -> вывод соответствующего сообщения для пользователя.
Рекомендация: Помимо вышеописанного, проверки полномочий могут также использоваться для защиты программ и транзакций.
Однако подобные проверки должны считаться лишь дополнением к вышеописанной концепции, но не заменять ее.
176
© 2006 г. SAP AG All rights reserved. Авторские права защищены.
06-04-2006

BC400
Урок: Проверка полномочий
Как правило, определение объекта полномочий и внедрение проверок полномочий входит в сферу ответственности разработчиков, тогда как за последующие шаги, такие как определение полномочий и определение профиля, а также разработку основных записей пользователей, несет ответственность администратор.
В следующем разделе представлено описание двух шагов, выполняемых разработчиком.
Рисунок 104: Создание объектов полномочий
Перед внедрением требуемой проверки полномочий в программе,
необходимо определить структуру (поля) соответствующей концепции полномочий. В состав объекта обычно входит поле ACTVT (операция) и дополнительное поле, в котором указывается тип защищаемых данных
(например, номер материала, авиакомпания и т.д.). Значения этих полей полномочий указывают возможность выполнения тех или иных операций пользователем.
После этого для создания полей используется транзакция SU20. Поле
ACTVT уже существует в системе.
Затем выполняется транзакция SU21 для создания класса объектов и последующего создания объекта полномочий путем указания соответствующих полей. Если в состав объекта входит поле ACTVT,
необходимо также выполнить ведение допустимых операций в отношении объекта. При этом из всех возможных операций выбираются те, применение которых в отношении данного объекта является целесообразным.
06-04-2006
© 2006 г. SAP AG All rights reserved. Авторские права защищены.
177

Глава 5: Сбор данных
BC400
Наконец, проверка полномочий внедряется в программе. Проверка полномочий представлена на следующем рисунке.
Рисунок 105: Проверка полномочий (пример синтаксиса)
Для проверки полномочий в программе указываются те полномочия, наличие которых должно проверяться в основной записи текущего пользователя.
Полномочия указываются путем ввода объекта полномочий, его полей, а также соответствующих значений полей. Синтаксис см. на представленном выше рисунке.
В рассматриваемом примере выполняется проверка того, имеет ли пользователь полномочия для объекта S_CARRID, для которого в поле
CARRID (авиакомпания) содержится название авиакомпании, введенное пользователем, а в поле ACTVT (операция) содержится значение "03"
(просмотр).
В таблице ТАСТ содержатся все возможные коды операций и их описания. В
свою очередь, таблица TACTZ содержит коды операций, которые являются
допустимыми для конкретных объектов.
178
© 2006 г. SAP AG All rights reserved. Авторские права защищены.
06-04-2006

BC400
Урок: Проверка полномочий
После выполнения оператора AUTHORITY-CHECK необходимо проверить код возврата sy-subrc и соответствующим образом скорректировать дальнейшее выполнение программы.
Рекомендация: Если какое-либо поле не должно включаться в проверку, можно либо не вводить его в оператор AUTHORITY-CHECK,
либо ввести DUMMY в качестве значения этого поля. Запись "DUMMY" представляет собой предварительно определенное описание, вводимое без кавычек.
Пример подавления проверки поля: при вызове транзакции изменения всегда производится проверка наличия у пользователя полномочий на изменение данных любой авиакомпании. Если проверка завершается неуспешно, для пользователя немедленно выводится соответствующие сообщение. Для внедрения такой проверки может использоваться следующий синтаксис:
AUTHORITY-CHECK OBJECT ’S_CARRID’
ID ’CARRID’ DUMMY
ID ’ACTVT’
FIELD ’02’.
Рисунок 106: Внедрение проверок полномочий в программах
06-04-2006
© 2006 г. SAP AG All rights reserved. Авторские права защищены.
179

1   ...   6   7   8   9   10   11   12   13   ...   23


написать администратору сайта