Комментарии по теме

«SAP NetWeaver 7.4: осо­бе­нно­сти ко­нфи­гу­ра­ции памяти»
Вячеслав Шиболов:
Илья, добрый день!   Этот параметр (abap\heap_area_nondia) ограничивает максимальный объем выделяемой памяти, по достижению которого процесс будет остановлен с дампом. Выделение памяти же...
«SAP NetWeaver 7.4: осо­бе­нно­сти ко­нфи­гу­ра­ции памяти»
Илья Муковоз:
Вячеслав, добрый день! Подскажите, когда в системе начинает работать задание в BTC процессе, на уровне управления памятью происходит выделение и блокирование всего объема памяти, установленного...

База знаний

Преимущества использования CL_UJO_WRITE_BACK вместо CL_UJK_WRITE

442

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

Расширение UJR_WRITE_BACK (Business Add-In [BAdI]) предоставляется компанией SAP как блок кода, который выполняется перед записью стандартной программой SAP данных в модели SAP BusinessObjects Planning and Consolidation (BPC).

SAP BusinessObjects Planning and Consolidation (BPC), версия NetWeaver, содержит Business Add-In (BAdI) с поддержкой пользовательской логики перед записью данных стандартной программой в модели BPC. В этом BAdI можно определить собственный код для записи данных в другие модели. Первая проблема заключается в том, что некоторые разработчики вместо предпочтительного класса CL_UJO_WRITE_BACK используют для выполнения этой задачи CL_UJK_WRITE. С использованием CL_UJK_WRITE связан ряд проблем и ограничений. Второй проблемой является то, что если в вашем BAdI для обратной записи приходится вызывать другой код, в котором также используется CL_UJK_WRITE, это может стать причиной нежелательных результатов. Рассмотрим подробнее суть этих проблем и способы их решения для лучшего понимания архитектуры обратной записи в BPC.

Дополнительная информация о BAdI приводится в разделе «BAdI для BPC».
 

BadI для BPC

Business Add-In (BAdI) — это точка расширения, которую SAP предоставляет для встраивания пользовательской логики. SAP предоставляет несколько BAdI для SAP BusinessObjects Planning and Consolidation (BPC).

Наиболее важными являются UJ_CUSTOM_LOGIC BADI и UJR_WRITE_BACK BADI. Например, без использования UJR_WRITE_BACK BADI система не может записать бюджет в размере 1,2 миллиона долларов США на 2016 год, который является родительским элементом для 12 месяцев. Вам необходимо указать, в каком базовом элементе (в данном случае месяце) будет проводиться эта сумма. Однако ввод сумм для каждого месяца может отнимать у пользователя слишком много времени и в целом противоречить требованиям процесса бюджетирования в рамках конкретной компании. В этой ситуации может потребоваться предоставить пользователю возможность указать общую сумму за 2016 год и передать системе остальную работу по распределению по месяцам на основе заданной логики.

С помощью UJR_WRITE_BACK BADI пользователь может записать данные за 2016 год и нажать кнопку Save Data (Сохранить данные) на ленте EPM. Далее будет инициирована системная программа SAP для обратной записи. До того, как система предпримет попытку записать данные за 2016 год (которая не увенчается успехом), данные будут обработаны UJR_WRITE_BACK BADI. Вы можете написать ABAP-код для распределения суммы в 1,2 миллиона долларов США по 12 месяцам согласно определенным правилам. Правило распределения может быть простым и равномерно разделять сумму 1,2 миллиона долларов США на 12 частей или сложным и искать записи продаж за предыдущий год для всех периодов, чтобы рассчитать вес каждого месяца. Обычно для выполнения бизнес-функции пользователь запускает пакет Data Manager в интерфейсе BPC Microsoft Excel.

Эти бизнес-функции могут быть стандартными, например, пересчет валют или финансовая консолидация. Также эти функции могут быть пользовательскими, например, распределение в соответствии с особыми указанными пользователем факторами (прогноз по трендам). Простую пользовательскую логику можно внедрить в логике скрипта. В этом случае скрипт будет вызываться пакетом Data Manager. При сложной пользовательской логике в логику скрипта потребуется вставить несколько строк кода. Код вызывает UJ_CUSTOM_LOGIC BADI в ABAP с параметрами импорта для выполнения задачи, как показано на рис. A.

Рис. А. Инициирование UJ_CUSTOM_LOGIC BADI посредством пакета Data Manager

Примечание.

Предпосылка: предполагается, что читатели имеют опыт разработки BPC, ABAP и BAdI.

Варианты использования CL_UJK_WRITE и соответствующие ограничения

На рис. 1 представлен метод write класса CL_UJK_WRITE. В транзакции SE24 введите имя класса CL_UJK_WRITE Display. Далее выберите метод write. Для просмотра параметров нажмите кнопку Signature.

Рис. 1. Метод write класса CL_UJK_WRITE

На рис. 2 показано определение метода. В меню выберите Method > Display Method definition (Метод > Просмотреть определение метода).

Рис. 2. Определение метода: общий и статический

На рис. 3 показано, как, по моим наблюдениям, пользователи применяют метод CL_UJK_WRITE=>WRITE() в своих программах.

Рис. 3. Типичное использование метода write() класса CL_UJK_WRITE

Поскольку это статический общий метод, некоторые используют его напрямую. Это просто и удобно. Однако при таком использовании возникают следующие проблемы:

Проблема 1: Следует ли скрывать нулевые значения. При обратной записи данных в одних случаях может потребоваться сохранять нулевые значения, а в других — скрывать. В приведенном примере вызова не предусмотрена такая вариативность.

Решением является использование параметра I_SUPPRESS_ZERO. Разумеется, описание для данного параметра на рис. 4 (значение Y — «не записывать») является некорректным, так как для типа UJ_FLG разрешены только значения ABAP_TRUE («X») или ABAP_FALSE (« «). Если требуется использовать данный параметр, введите значение «X» или оставьте поле пустым.

Рис. 4. I_SUPPRESS_ZERO — дополнительный параметр, который часто игнорируется при вызове данного метода

Проблема 2: Негибкость CL_UJK_WRITE=>WRITE(). Выполнение программы CL_UJK_WRITE=>WRITE() показано на рис. 5.

Рис. 5. Выполнение программы CL_UJK_WRITE=>WRITE()

Таким образом, в основе CL_UJK_WRITE=>WRITE() по-прежнему лежит CL_UJO_WRITE_BACK(), как и рекомендует SAP. В данном примере выполнения программы видно, что CL_UJK_WRITE=>WRITE() является просто оболочкой для CL_UJO_WRITE_BACK.

Параметры обратной записи, показанные на рис. 6, жестко закодированы в WRITE_IN_SYNC_MODE2() для CL_UJK_WRITE.

Рис. 6. Жестко закодированные параметры обратной записи

В шаге 2 алгоритма программы (рис. 5) для параметров обратной записи перед вызовом CL_UJO_WRITE_BACK-> write_back() устанавливаются жестко закодированные значения. Разработчики не имеют никакой возможности изменить эти значения. Такое ограничение лишает CL_UJK_WRITE=>WRITE() гибкости.

Однако данные параметры недоступны для ввода или изменения при вызове CL_UJK_WRITE=>WRITE(). Вместо этого значения присваиваются им внутри метода write_in_sync_mode2() без возможности для разработчика внести изменения в методе write(). Список параметров обратной записи представлен на рис. 7.

Рис. 7. Параметры обратной записи

По этой причине класс CL_UJO_WRITE_BACK является более предпочтительным, поскольку перед вызовом метода обратной записи вы можете самостоятельно настроить все требуемые параметры. Пример кода представлен на рис. 8.

Вы хотели бы увидеть полную версию статьи?

Если вы являетесь подписчиком журнала SAP Professional Journal, пожалуйста, введите в правом верхнем углу логин и пароль.

Если вы хотите подписаться на журнала SAP Professional Journal, пожалуйста, обратитесь в редакцию или сделайте заказ на сайте.

Правила получения тестового доступа к статьям SAP Professional Journal

Ключевые слова: SAP NetWeaver
Функциональная область: Информационные технологии / IT, Basis, ABAP
Ролевое назначение: SAP Консультант / Consultant

Любое воспроизведение запрещено.
Копирайт © «Издательство ООО «Эксперт РП» Copyright © 2010 Wellesley Information Services. All rights reserved.