Руководство для участников курса Версия курса 2й квартал 2005 г. Продолжительность курса 5 Дн. Номер материала 50072594
Скачать 38.91 Mb.
|
Глава 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 |