Создание собственных GOS-объектов
Для создания собственных GOS-объектов используется транзакция SWO1 – Построитель бизнес-объектов.
Для создания собственных GOS-объектов используется транзакция SWO1 – Построитель бизнес-объектов. Запускаем транзакцию и затем вводим имя создаваемого нами бизнес-объекта. Наименование может быть любым, однако, чтобы не нарушить гармонию вселенной SAP, населяя её НЛО и увеличивая её информационную энтропию, предлагаю использовать стандартное правило наименований объектов, т.е. начинать имена пользовательских объектов с символа Z или Y. В качестве примера, создадим объект для использования в позициях инвестиционной программы. Стандартно в системе такой возможности нет (Рис. 1), как видим, в стандартном поле экрана кнопка GOS-меню отсутствует.
Рис. 1: IM23-1
Для начала, в транзакции SWO1, создадим собственный объект, например, ZI_BUS1057. Почему именно ZI_BUS1057? Потому что для работы с инвестиционной программы в системе уже существует стандартный (системный) бизнес объект BUS1057. Однако, использовать его идентификатор для наших целей невозможно без ключа модификации, кроме того объект объявлен устаревшим, что в любом случае исключает возможность его модификации. Поэтому делаем новый собственный объект, Рис. 2.
Рис. 2: SW01-0
Появится диалоговое окно, в котором нужно задать описание создаваемого объекта и самое основное, задать имя программы, содержащей код обработки вашего GOS-объекта, Рис. 3.
Рис. 3: SW01-1
В поле супертип ничего не указываем, так как создаваемый объект для обработки есть не собственно инвестиционная программа, а есть объект для обработки позиций инвестиционной программы. Если мы выберем наследование, то система не даст нам возможности изменить параметры формирования глобального ключа объекта. Для объекта инвестиционная программа уникальный ключ объекта – это год утверждения и имя инвестиционной программы, нам же нужно к этим параметрам добавить еще код позиции программы, поэтому прямое наследование при создании объекта не подходит.
После определения основных параметров создаваемого объекта переходим на следующий экран (Рис. 4) для определения интерфейсов, ключей и метода объекта для работы с GOS-меню.
Рис. 4: SW01-2
Перед тем как что-то создавать в новом бизнес-объекте, необходимо сохранить определение объекта, затем установить курсор на строку «Интерфейсы» и нажать кнопку создания. Система запросит у вас имя нового интерфейса. Имя может следующим, Рис. 5:
- IFGOSASERV – Если у вас система версти SAP ECC 4.7 или меньше.
- IFGOSXSERV – Если система версии SAP ECC 6.0, для переходной версии 5.0 она же кажется, SAP 2004, не знаю, давно не встречал
Рис. 5: SW03-3
В результате появится новый интерфейс для поддержки GOS-меню, Рис. 6.
Рис. 6: SW01-4
Так как мы создали новый объект, то необходимо определить ключевые поля, уникально идентифицирующие экземпляр объекта в системе. Объект, инвестиционная программа, в системе определяется двумя ключевыми полями, это имя программы и год. Так как мы хотим создать объект для работы с позициями, то нам нужно еще одно ключевое поле, это код ветки программы, Рис. 7. Эти три поля однозначно идентифицируют экземпляр объекта в системе, фактически это набор полей для формирования уникального ключа таблицы.
Примечание: Так как «небожителям», создателям SAP-овских баз данных, повидимому, глубоко наплевать на нормализацию, а также на персону Дейта с его «Введением в базы данных», то у таблицы IMPR – «Позиции инвестиционной программы», фактически существует два варианта уникального??? ключа. Один вариант, это поле: POSNR – «Номер позиции»; второй вариант - набор полей:
- GJAHR – Год утверждения инвестиционной программы;
- POSID – Идентификатор позиции инвестиционной программы;
- PRNAM – Имя инвестиционной программы.
Поэтому можно создать ключ из одного поля POSNR, а можно добавить ключ из трех полей GJAHR, PRNAM и POSID.
Существующие в системе BAPI-функции работы с инвестиционной программой используют всегда связку из трех полей «Год» – «Позиция» – «Имя программы», поэтому я тоже решил использовать данную связку. Ставим курсор в районе ключевых полей и нажимаем кнопку создания новых ключевых полей, PROGRAM, APPROVALYEAR и POSITION, Рис. 7.
Рис. 7: SW01-4-1
Создаем три ключевых поля, при создании система предложит создать поля с использованием ABAP-словаря – отказываемся, так как мы будем создавать наименования полей по аналогии с BAPI-функциями системы, Рис. 8, а не ссылочной таблицы базы данных IMPR.
Рис. 8: SW01-4-2
Далее выбираем кнопку меню, для создания программы, где будет описан метод реализации GOS-объекта, Рис. 9.
Рис. 9: SW01-5
По умолчанию, текст созданной программы будет содержать некий код, в зависимости от того создавали вы объект с нуля или используя наследование от уже существующего объекта.
К примеру, текст программы следующий.:
***** Implementation of object type ZI_BUS1057 *****
INCLUDE <OBJECT>.
BEGIN_DATA OBJECT. " Do not change.. DATA is generated
* only private members may be inserted into structure private
DATA:
" begin of private,
" to declare private attributes remove comments and
" insert private attributes here ...
" end of private,
BEGIN OF KEY,
POSITION LIKE IMPR-POSID,
APPROVALYEAR LIKE IMPR-GJAHR,
PROGRAM LIKE IMPR-PRNAM,
END OF KEY.
END_DATA OBJECT. " Do not change.. DATA is generated
Как видим, описание структуры ключа KEY, содержит наши описанные три ключевые поля. Добавляем в данный код определение метода GOSAddObjects.
***** Implementation of object type ZI_BUS1057 *****
INCLUDE <object>.
begin_data object. " Do not change.. DATA is generated
* only private members may be inserted into structure private
DATA:
" begin of private,
" to declare private attributes remove comments and
" insert private attributes here ...
" end of private,
BEGIN OF key,
position LIKE impr-posid,
approvalyear LIKE impr-gjahr,
program LIKE impr-prnam,
END OF key.
end_data object. " Do not change.. DATA is generated
*------------------------------------------------------------------------------
*------------------------------------------------------------------------------
* Определение метода GOSAddObjects используя стандартные макросы
begin_method gosaddobjects changing container. "Макрос определения метода
DATA: service(255),
busidentifs LIKE borident OCCURS 0,
ls_borident TYPE borident.
CLEAR ls_borident.
* Имя логической системы
CALL FUNCTION 'OWN_LOGICAL_SYSTEM_GET'
IMPORTING
own_logical_system = ls_borident-logsys
EXCEPTIONS
own_logical_system_not_defined = 1
OTHERS = 2.
IF sy-subrc <> 0. CLEAR: ls_borident-logsys. ENDIF.
* Имя объекта
ls_borident-objtype = 'ZI_BUS1057'.
* Ключ экземпляра объекта
ls_borident-objkey = object-key.
APPEND ls_borident TO busidentifs.
swc_get_element container 'Service' service. "Макрос заполення контейнера
swc_set_table container 'BusIdentifs' busidentifs.
end_method. "Макрос завершения метода
*------------------------------------------------------------------------------
*------------------------------------------------------------------------------
Фактически для определения метода используем предопределенные макросы системы. Наш код довольно простой, фактически вы можете скопировать все, что ниже строки: «" Do not change.. DATA is generated» единственное, что нужно потом заменить это имя объекта на созданное вами в строке: «ls_borident-objtype = 'ZI_BUS1057'.». После этого сохраняем код и выходим.
Примечание: Если вы выберете создание с использованием ключей словаря данных, то
Если хотите прочитать статью полностью и оставить свои комментарии присоединяйтесь к sapland
ЗарегистрироватьсяУ вас уже есть учетная запись?
Войти