Меню

Чтение данных инфотипа с помощью стандартных классов и методов

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

Ключевое понятие

В ABAP Objects, глобальные интерфейсы создаются (определяются) с помощью транзакции SE24. Стандартные классы могут использовать эти интерфейсы. Любой метод, который содержится в используемом интерфейсе, может быть вызван с помощью объектов (инстанций) этих классов.

Доступ к данным из различных инфотипов является необходимым требованием для разработчика в области SAP ERP HCM. Подобное знание обычно требуется при разработке отчетов в HCM, так как пользователи запрашивают просмотр данных из одного или нескольких инфотипов сотрудника. Система SAP предоставляет множество полезных классов и методов для этих целей. Из-за простоты и надежности, с которыми данные из стандартных и клиентских инфотипов могут быть считаны, знание этой темы является необходимым для SAP разработчиков. Вдобавок, использование объектно-ориентированного подхода является рекомендованным по отношению к другим подходам, таким как использование функциональных модулей или устаревших использований ключевого слова IMPORT.

ABAP классы и методы могут быть использованы как для чтения так и изменения данных, находящихся в инфотипах. Подробный обзор ABAP objects выходит за рамки этой статьи. Подробнее классы и методы в ABAP, описаны по ссылке (web-адр. 1):

https://help.sap.com/saphelp_nw70/helpdata/en/c3/225b6254f411d194a60000e8353423/frameset.htm?frameset=/en/48/4aad83b75211d194f50000e8353423/frameset.htm&current_toc=/en/d3/2e974d35c511d1829f0000e829fbfe/                                                                                    plain.htm&node_id=424&show_children=false

Web-адр. 1. Подробный обзор классов и методов ABAP objects

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

Примечание.

Целевым читателем этой статьи являются разработчики и пользователи модуля HR. Для показа сути я приведу примеры кода и необходимые скриншоты. Читатели могут с легкостью адаптировать примеры кода, используемые в этой статье, для своих нужд.

Классы и интерфейсы для доступа к данным инфотипа

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

Один из самых важных классов, используемых для чтения, является класс CL_HRPA_READ_INFOTYPE. Он предоставляет центральный метод фабрики (factory method), GET_INSTANCE, который позволяет Вам сгенерировать обработчик, необходимый для доступа к данным соответствующего инфотипа. Обработчик имеет интерфейс IF_HRPA_READ_INFOTYPE (в следующей части будет приведено больше деталей про этот интерфейс).

Интерфейс IF_HRPA_READ_INFOTYPE является одним из самых важных. Необходимые методы этого интерфейса и их назначение показаны в табл. 1.

Табл. 1. Методы интерфейса IF_HRPA_READ_INFOTYPE

Примечание.

Начальный метод фабрики (factory method) является одинаковым для вызовов методов READ и READ_SINGLE интерфейса IF_HRPA_READ_INFOTYPE.

Другим важным классом, необходимым для корректного чтения данных, является класс CL_HR_PNNNN_TYPE_CAST. Он преобразует внутреннею таблицу общего типа в значимую и понятную форму конкретного инфотипа, данные которого разработчикам необходимо считать. Также обратим внимание на класс CL_HRPA_TEXT_CLUSTER, который предоставляет полезный метод READ для чтения длинных текстов, хранимых для конкретной записи инфотипа. (Для более подробной информации о необходимых шагах, которые нужно выполнить до выполнения операции чтения, смотрите блок «Получение обработчика по чтению»).

Получение обработчика по чтению

Чтение набора записей из инфотипа

Как только Вы познакомились с методами интерфейса и факторным методом (factory method), требуемым для чтения, Вы можете написать код программы для чтения. Для простоты, сначала давайте рассмотрим, как читать набор записей из инфотипа. В качестве примера, давайте прочитаем данные из инфотипа 22 (Данные об образовании — Education details).

На первом шаге вызываем метод GET_INSTANCE класса CL_HRPA_READ_INFOTYPE, как показано на рис. 1.

Рис. 1. Получение инстанции для обработчика чтения

В этом случае, Вы используете метод READ (в рамках переменной READING_HANDLE) интерфейса IF_HRPA_READ_INFOTYPE для чтения набора записей из базы данных. Параметры метода READ показаны на рис. 2.

Рис. 2. Параметры метода READ

Как можно заметить, в этом методе имеется множество обязательных и необязательных параметров. Код для чтения данных из инфотипа 22 показан на рис. 3.

Рис. 3. Вызов метод READ

Здесь Вы читаете все записи в инфотипе 22, для табельного номера 1273, которые доступны для дат начала и окончания 01.01.1990 и 22.09.2015. Как только выполнится код метода READ, данные вернутся во внутреннюю таблицу IT_GENERIC_TABLE. (Внутренняя таблица создана по типу таблицы словаря HRPAD_PRELP_TAB). Данные пока еще не в весьма удобной и читаемой форме, как показано на рис. 4.

Рис. 4. Данные внутренней таблицы IT_GENERIC_DATA

Как можно увидеть, все поля с данными хранятся вместе в одним поле, DATA1, внутренней таблицы IT_GENERIC_DATA. Это не совсем подходит, так как Вы не можете сопоставить конкретное поле инфотипа 22 с конкретными данными.

Параметр экспорта DATA_EXISTS метода READ содержит значение X, когда данные читаются из соответствующей таблицы инфотипа. Если данные не считаны, параметр экспорта DATA_EXISTS содержит пробел (space). Вы можете проверять это параметр при обработке в вашей программе.

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

Оформите подписку sappro и получите полный доступ к материалам SAPPRO

У вас уже есть подписка?

Войти