+ Sapforum.Biz » Инструменты » ABAP - Инструментальные средства » Техники расширений системы SAPТема:
|- 4 - A3_Userexits (Пользовательские подпрограммы).



Автор Тема: 4 - A3_Userexits (Пользовательские подпрограммы).  (Прочитано 1269 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Uukrul

  • SAP ECC 6.0 Ehp(*)
  • Administrator
  • Epic Member
  • *****
  • Сообщений: 3 636
  • Reputation Power: 2
  • Uukrul barely matters.Uukrul barely matters.
  • Пол: Мужской
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • Sapforum.BIZ
   Данная техника пользовательских расширения, на мой взгляд, является сильно устаревшей, так как для этого типа расширения система требует получение ключа разработчика, на модуль находящийся в пространстве имен SAP при этом в данном модуле реализованы подпрограммы, в которые требуется добавить пользовательский код. Наименования подпрограммы и комментарий к заголовку подпрограммы, довольно прозрачно определяют их назначение, например:
Код: You are not allowed to view links. Register or Login
*---------------------------------------------------------------------*
*       FORM USEREXIT_DELETE_DOCUMENT                                 *
*---------------------------------------------------------------------*
*       This userexit can be used to delete data in additional tables *
*       when a sales document is deleted.                             *
*                                                                     *
*      This form is called in dialog at the end of form BELEG_LOESCHEN*
*      just before form BELEG_SICHERN is performed to delete the      *
*      datas on the database.                                         *
*                                                                     *
*---------------------------------------------------------------------*
form userexit_delete_document.

endform.
   Так как такие подпрограммы выполняются в рамках контекста основной системной программы, то требуется очень аккуратно обрабатывать доступные глобальные переменные основной программы. Данная техника достаточно активно применяется в функциональности SD и части оперативной логистики – входящие/исходящие поставки, хотя в настоящий момент видно, что компания SAP, активно заменяет такие вызовы, на использование технологий BADI, например, в данном случае выше описанная подпрограмма заменяется методом BADI_SD_SALES-DELETE_DOCUMENT – Replacement for User Exit DELETE_DOCUMENT. Таким образом, использование данной техники практически теряет смысл. Она оставлена как я понимаю, только из соображений обратной совместимости с уже работающими расширениями. Данный раздел будет самым коротким, так как особых нюансов в данной технике нет, к тому же я не рекомендую использовать ее в новых версиях систем.

В функциональности сбыта, данные расширения собраны в модулях, типа:
  • MV45AFZZ – Обработка документов сбытовой заказ
  • MV45AFZA – Условия в документе сбытового заказа
  • MV45AFZB – Обработка позиции документа сбытового заказа
  • И т.д.

   Полный перечень данных расширений можно найти по ссылке (справочный центр по продуктам SAP):
You are not allowed to view links. Register or Login

   Так же расширения данного типа можно определить из настройки системы, транзакция SPRO, в соответствующих разделах, например настройка функциональности SD, все расширения сгруппированы в отдельной ветке настройки, рисунок 1: use-03.png.

   Для использования любого из расширений вы должны получить ключ разработчика на соответствующий модуль, например: MV45AFZZ для этого в транзакции SE38 переходим в режим редактирования. Если никто не модифицировал объект до вас, то появится окно с запросом ключа доступа для объекта, рисунок 2: use-01.png.

   Выпишите или скопируйте полный ключ объекта, в данном случае это: R3TR PROG MV45AFZZ. Затем перейдите на сайт You are not allowed to view links. Register or Login, если у вас есть доступ, т.е. активный и зарегистрированный пользователь, так называемый S-user, вы можете пройти в раздел: «Keys & Requests» – «SSCR Keys». В данном разделе, будет выведен список, всех доступных для вас систем, на которые вы можете получить ключи, рисунок 3: use-02.png. Выбираете систему и далее на запрос вводите код объекта. Вам будет предоставлен 20-значный код, который следует внести в поле «Ключ доступа», после внесения ключа и выбора кнопки «Дальше», если все сделано правильно, т.е. вы не ошиблись при вводе ключа и правильно указали систему, для которой его получили, система перейдет в режим редактирования текста модуля.

   Теперь можно модифицировать код согласно вашим требованиям. Само собой вы не должны изменять объявления подпрограмм, которые написаны в модуле, а так же удалять их из модуля. Аккуратно относитесь к работе с глобальными переменными, которые доступны в точке вызова, не меняйте сортировку внутренних таблиц, иначе последствия в работе транзакции создания сбытового заказа, могут возникнуть самые не объяснимые.

   Примечание: Используя возможности новой техники расширения Enhancements spot, теоретически можно отказаться от получения ключа на модификацию объекта системы.

   Компания SAP гарантирует только то, что разработчики системы не будут сами использовать данные точки пользовательских выходов. Проблемы в их использовании, это невозможность разделения разработчиков и соответственно ответственности за внесенные изменения. Работа в области глобальных переменных основной транзакции и соответственно появляется вероятность программного вмешательства  при некачественном кодировании расширения, что может привести к нарушению целостности данных. Например, в расширении вы имеете доступ к глобальной таблице позиций документа сбытового заказа и вам нужно для всех позиций, которые есть в документе обновить свои данные. Для этого вы пишете код, прохода по всем позициям документа:
Код: You are not allowed to view links. Register or Login
LOOP AT xvbap.
* Обработка позиций документа
ENDLOOP.
   При таком использовании текущее состояние заголовка таблицы XVBAP измениться на последнее значение и соответственно это может нарушить дальнейшую работу основной программы, которая возможно ориентируется на другое состояние переменной заголовка таблицы. Поэтому при такой реализации нужно объявить локальную структуру, куда необходимо читать данные из глобальной внутренне таблицы.
« Последнее редактирование: Февраль 25, 2016, 08:54:52 pm от Uukrul »