Студопедия
Случайная страница | ТОМ-1 | ТОМ-2 | ТОМ-3
АрхитектураБиологияГеографияДругоеИностранные языки
ИнформатикаИсторияКультураЛитератураМатематика
МедицинаМеханикаОбразованиеОхрана трудаПедагогика
ПолитикаПравоПрограммированиеПсихологияРелигия
СоциологияСпортСтроительствоФизикаФилософия
ФинансыХимияЭкологияЭкономикаЭлектроника

DATA it_spfli TYPE sbc400_t_spfli. DATA wa_spfli LIKE LINE OF it_spfli.

WRITE: / ’Authority-Check Error’(001). ENDCASE. | PERFORM write_list USING it_flight. | Wa_sbook-loccurkey. | SELECT-OPTIONSname FORdata_object. | CALL SCREEN 100. | CLEAR wa_sbook. | MODULE user_command_100. |


 

SELECT * FROM spfli INTO TABLE it_spfli.

 

* at least one dataset selected

IF sy-subrc = 0.

 

LOOP AT it_spfli INTO wa_spfli. WRITE: / wa_spfli-carrid,

Wa_spfli-connid, wa_spfli-cityfrom, wa_spfli-cityto, wa_spfli-deptime, wa_spfli-arrtime.

ENDLOOP.

 

ENDIF.


 

Резюмепоуроку

Теперь вы сможете:

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

• использовать базисные ABAP-операторы с внутренними таблицами

• анализировать внутренние таблицы в режиме отладки


 

Резюмепоглаве

Теперь вы сможете:

• определять элементарные объекты данных (простые переменные)

• использовать базовые ABAP-операторы с элементарными объектами данных

• выполнять и анализировать программы в режиме отладки

• определять структурированные объекты данных (переменные структуры)

• использовать базовые ABAP-операторы для структурированных объектов данных

• анализировать структурированные объекты данных в режиме отладки

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

• использовать базисные ABAP-операторы с внутренними таблицами

• анализировать внутренние таблицы в режиме отладки

 

Дополнительная информация

 

... См. онлайн-документацию к соответствующим ABAP-операторам.


 

Глава 5

 

Сбор данных

 

Обзор главы

 

См. цели отдельных уроков в рамках этого раздела.

 

 

 
Цели главы

 

Прослушав эту главу, вы сможете

 

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

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

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

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

• внедрять проверки полномочий

 

 

Содержание главы

 

Урок: Считывание таблиц базы данных...................................146

Упражнение 8: Сбор данных с использованием цикла SELECT.163

Упражнение 9: Сбор и буферизация данных во внутренней таблице......................................................................169

Урок: Проверка полномочий.................................................174

Упражнение 10: Проверка полномочий...............................181


 

Урок: Считывание таблиц базы данных

 

 

Обзор урока

 

На этом уроке рассматриваются возможности извлечения информации из таблиц базы данных и считывания данных из этих таблиц. Кроме того, представлен обзор методов, позволяющих получать доступ к нескольким таблицам баз данных.

 

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

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

 

 
Цели урока

 

Прослушав этот урок, вы сможете

 

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

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

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

 

 

Практический пример

 

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


 

Сбор данных

 

 

 

 

 

Рисунок 86: Доступ к базе данных (архитектура)

 

SQL (Structured Query Language) – это язык, при помощи которого осуществляется доступ к таблицам базы данных в целях определения, изменения и считывания данных.

 

Каждая система управления реляционной базой данных имеет собственный SQL, т.е. Native SQL, который является специфичным для базы данных. Соответственно, ABAP-программа с операторами Native SQL не может использоваться без ограничений во всех SAP-системах (из-за различий в системах БД разных SAP-систем).

 

Open SQL – это определенный SAP стандарт SQL для языка ABAP, который является не зависящим от базы данных. Операторы Open SQL динамически преобразуются в соответствующие операторы Native SQL используемой системы баз данных, и таким образом, не зависят от

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


 

 

 

 
Рисунок 87: Поиск таблиц базы данных

 

На представленном выше рисунке иллюстрируются возможные варианты поиска требуемых таблиц базы данных.

 

Возможен также свободный поиск с использованием информационной системы репозитария.

 

 

 

Рисунок 88: Доступ к базе данных для чтения (обзор)


 

Оператор Open SQL SELECT используется для доступа к базе данных для чтения. Оператор SELECT содержит ряд выражений, каждое из которых имеет собственную задачу:

 

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

• Выражение FROM служит для указания имени источника (таблицы базы данных или ракурса), из которого должны быть выбраны данные.

• В выражении INTO определяется целевая переменная, в которой должны быть размещены выбранные данные.

• В выражении WHERE указываются столбцы таблицы, которые должны быть выбраны.

 

Для получения информации о других выражениях см. документацию по ключевым словам оператора SELECT.

 

 

 

 

 

Рисунок 89: Считывание отдельных записей

 

Оператор SELECT SINGLE позволяет считывать отдельные записи из таблицы базы данных. Для обеспечения уникального доступа необходимо, чтобы все ключевые поля выражения WHERE были заполнены. Исключением является поле манданта: если оно не заполнено, используется текущий мандант. (Следует отметить, что мандант может быть указан в операторе выбора SELECT только в комбинации с дополнением CLIENT SPECIFIED. Более подробная информация будет представлена далее.)


 

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

 

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

 

При обнаружении системой подходящей записи значение возврата

SY-SUBRC равно 0.

 

 

 

 

 

Рисунок 90: Подходящая целевая структура для списка полей

 

При необходимости выбора определенных считываемых полей из строки таблицы они могут быть указаны в форме списка полей в рамках оператора SELECT (см. рисунок выше). Затем в выражении INTO следует присвоить имя целевой структурной переменной, структура которой совпадает

со структурой списка полей (по крайней мере, в начале), т.е. содержит поля из списка полей, расположенные в том же порядке. Соответствовать друг другу должны лишь поля сопоставляемых типов. Имена полей целевой структуры не учитываются.

 

Альтернативой указанию целевой структуры является перечисление соответствующих целевых полей в выражении INTO.

 

INTO (field_1,..., field_n)


 

 

 

 
Рисунок 91: Поля целевой структуры, имена которых совпадают с именами в списке полей

 

При необходимости использования структурной переменной для получения считанной записи, имеющей поля, имена которых совпадают с именами полей в целевом списке, и другую структуру (дополнительные поля, другой порядок полей), целесообразно использовать дополнение CORRESPONDING FIELDS OF. В результате в целевой области будут заполнены только поля с одинаковыми именами. Следует удостовериться, что соответствующие типы полей также являются идентичными, поскольку в противном случае (как в операторе MOVE) осуществляется (сложное) преобразование, в результате которого в целевые поля могут быть перенесены неполные данные (по причине отсечения).

 

Преимущества этого варианта заключаются в следующем:

 

• Целевая структура не обязательно должна быть выровнена по левому краю, также как и список полей.

• Эта структура отличается простотой ведения, так как расширение списка полей или целевой структуры не требует внесения в программу дополнительных изменений, поскольку в структуре уже существует поле с тем же самым именем (и, возможно, тем же самым типом).


 

 

 

 
Рисунок 92: Считывание нескольких строк с использованием цикла

 

Показанный выше цикл SELECT может использоваться для последовательного считывания в программе нескольких строк из таблицы базы данных.

 

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

 

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

 

Цикл завершается автоматически после считывания и анализа всех требуемых строк.

 

Значение возврата должно быть запрошено после выполнения цикла SELECT(т.е. после оператора ENDSELECT). Если была считана хотя бы одна строка, значение переменной SY-SUBRC равно 0. В этом случае переменная SY-DBCNT содержит количество считанных записей.


 

 

 

 
Рисунок 93: Считывание нескольких строк с выборкой массива

 

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

 

Так как выборка массива не является видом обработки циклов,

оператор ENDSELECT не требуется и даже не является допустимым.

 

Аналогично описанным выше вариантам SELECT, внутренняя таблица, указанная в качестве целевой для выборки массива, должна быть выровнена по левому краю и структурирована так же, как и список полей. Если внутренняя таблица не отвечает этому условию, вместо INTO TABLE необходимо использовать дополнение INTO CORRESPONDING FIELDS OF TABLE. В этом случае столбцы базы данных, указанные в списке полей, копируются в столбцы внутренней таблицы, имеющие те же самые имена. Кроме того, следует также удостовериться, что типы полей связанных столбцов соответствуют друг другу, во избежание сложного преобразования

и возможного появления неполных данных в целевой таблице.

 

При выборке массива информация, которая могла содержаться во внутренней таблице, перезаписывается. При необходимости добавления, а не перезаписи строк, можно использовать дополнение APPENDING TABLE.


 

Если во внутреннюю таблицу была скопирована по крайней мере одна запись, значение переменной SY-SUBRC равно нулю. В данном случае переменная SY-DBCNT содержит количество считанных строк.

 

 

 

 

Рисунок 94: Считывание данных из таблиц, зависящих от манданта

 

Таблица базы данных называется зависящих от манданта, если поле манданта (тип данных CLNT) является первым ключевым столбцом, и таблица содержит записи, которые являются специфичными для манданта.

 

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

 

При необходимости считывания данных из явно указанного манданта этот мандант должен быть определен в выражении WHERE. Следует отметить, что это возможно только при использовании дополнения CLIENT SPECIFIED после выражения FROM.

 

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


 

 

 
Рисунок 95: Аспект производительности: вторичный индекс

 

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

 

При выборе из зависящих от манданта таблиц мандант всегда переносится в базу данных (т.е. данная операция всегда является частью процесса выбора). Следовательно, при определении индекса для подобных таблиц имеет смысл включать поле манданта. В ходе выполнения оно может использоваться

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

манданта посредством вторичного индекса.

 

После создания и активации индекса этот индекс автоматически используется оптимизатором базы данных при выполнении программы в случае, если использование индекса ускорит процесс выбора. Указывать индекс вручную в операторе SELECT не требуется.


 

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

 

Рекомендация: Необходимо отметить, что использование индексов,

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

 

 

Считывание нескольких таблиц баз данных, доступ с инициированием изменений (Outlook)

 

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

 

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

 

 

 

 

Рисунок 96: Повторное использование компонентов для сбора данных


 

Существуют четыре типа повторно используемых компонентов,

предназначенных для выбора данных:

 

• Логические базы данных

 

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

 

• Функциональные модули

 

(= подпрограммы, хранящиеся в построителе функций SAP-системы, с инкапсулированными функциональными возможностями, такими как считывание данных из иерархически связанных таблиц)

 

• BAPI

 

(= методы бизнес-объектов, например, с функцией чтения)

 

• Методы глобальных классов

 

Более подробная информация о поиске и использовании логических баз данных представлена в онлайн-документации по “ABAP-программированию и среде выполнения” в разделе, посвященном “доступу к базе данных ABAP”, а также в курсе BC405.

 

Информация о трех других методах приведена в соответствующих разделах.

 

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

 

В качестве примера рассмотрим считывание и вывод записей SPFLI. Для каждой записи также будет выведено полное название соответствующей авиакомпании, хранящееся в таблице SCARR. На следующем рисунке представлен логический процесс объединения таблиц, при котором все требуемые данные могут быть выбраны с использованием оператора SELECT.


 

 

 
Рисунок 97: Пример объединения таблиц

 

 

 

 

 

Рисунок 98: Записи для определения объединения таблиц


 

При объединении таблиц необходимо ответить на три вопроса:

 

• Объединяемые таблицы

 

К каким таблицам базы данных должен быть получен доступ?

 

• Условие соединения

 

Какому условию должны соответствовать записи, выбираемые из объединяемых таблиц и преобразуемые в объединенную запись?

 

• Объединяемые столбцы

 

Какие столбцы из объединяемых таблиц должны быть доступны в объединенной таблице?

 

 

 

 

Рисунок 99: Варианты внедрения объединения таблиц


 

Существуют два варианта выполнения объединения таблиц:

 

• В ABAP-словаре создается ракурс базы данных, соответствующий объединению таблиц, после чего он выбирается в программе.

 

Более подробная информация содержится в онлайн-документации по

ABAP-инструментальным средствам в разделе ABAP-словарь.

 

• В программе производится выбор данных из определенного объединения (ABAP-объединение). В ходе выполнения в интерфейсе базы данных системой динамически создается соответствующий запрос базы данных.

 

Для получения дополнительной информации см. документацию по ключевым словам выражения FROM оператора SELECT.

 

Рекомендация: Объединение таблиц представляет собой ракурс соответствующих таблиц базы данных и не содержит какие-либо избыточные данные. При выборе данных из объединения таблиц требуемые данные считываются из соответствующих таблиц базы данных.

 

В объединение таблиц можно включать и более двух таблиц.

 

 

 

 

 

Рисунок 100: Доступ к базе данных для изменения


 

В дополнении к оператору SELECT, Open SQL также содержит операторы

UPDATE, INSERT, DELETEиMODIFY. Однако для реализации доступа

к базе данных для изменения, предоставляемого этими операторами,

необходимы знания о концепции транзакций SAP; в противном случае это может стать причиной противоречивости данных.

 

Концепция транзакций SAP рассматривается в курсе BC414.


 


 

Упражнение 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? Используется ли первичный индекс в интерфейсе базы данных (до сих пор)?

 

 

Продолжение на следующей странице


 

Задание 2:

 

Расчет процентной занятости мест по рейсу

 

1. В рамках оператора цикла должен производиться расчет процентной занятости мест в каждом рейсе. Присвойте результат полю PERCENTAGE в рабочей области.

 

2. Расширьте вывод списка путем включения данных о процентном соотношении занятых мест.


 

Решение 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) См. выдержку из исходного текста в примере решения.

 

Продолжение на следующей странице


 

4. В таблице базы данных SFLIGHT должны выбираться все расписания рейсов для выбранной пользователем авиакомпании. Ограничьте выбор полями таблицы, для которых в рабочей области содержится целевое поле.

 

a) См. выдержку из исходного текста в примере решения.

 

5. Каково первое ключевое поле прозрачной таблицы SFLIGHT? Содержит ли оператор SELECT выражение WHERE? Используется ли первичный индекс в интерфейсе базы данных (до сих пор)?

 

a) Первым ключевым полем прозрачной таблицы SFLIGHT является поле MANDT. Даже если значение для этого поля не указывается в выражении WHERE, это значение (текущий мандант выполнения) переносится в базу данных функцией “автоматического выбора манданта”. Это означает, что выбор ограничивается полем MANDT, а не CARRID. Следовательно, в этом случае для

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

 

Рекомендация: Примечание относительно автоматического выбора манданта:

 

При обращении системы выполнения АВАР к специфичным для манданта таблицам, для которых не определен конкретный мандант, предполагается, что приниматься во внимание должны только те

данные, которые относятся к манданту входа в систему пользователя. Поэтому в интерфейсе базы данных выражение WHERE автоматически дополняется условием mandt = sy-mandt. (Информация о текущем манданте выполнения содержится в поле sy-mandt.)

 

Задание 2:

 

Расчет процентной занятости мест по рейсу

 

1. В рамках оператора цикла должен производиться расчет процентной занятости мест в каждом рейсе. Присвойте результат полю PERCENTAGE в рабочей области.

 

a) См. выдержку из исходного текста в примере решения.

 

Продолжение на следующей странице


 

2. Расширьте вывод списка путем включения данных о процентном соотношении занятых мест.

 

a) См. выдержку из исходного текста в примере решения.

 

Результат

 

Выдержка из исходного текста: SAPBC400DDS_SELECT_SFLIGHT

REPORT sapbc400dds_select_sflight. DATA wa_flight TYPE sbc400focc.


Дата добавления: 2015-11-16; просмотров: 87 | Нарушение авторских прав


<== предыдущая страница | следующая страница ==>
container_r TYPE REF TO CL_GUI_CUSTOM_CONTAINER, grid_r TYPE REF TO CL_GUI_ALV_GRID.| ID ’ACTVT’ FIELD ’02’.

mybiblioteka.su - 2015-2024 год. (0.07 сек.)