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

«Ко­рре­кти­ро­вка таблиц базы данных с помощью ABAP»
Олег Точенюк:
Андрей а вам никто никогда не говорил, что обновлять таблицы базы данных SAP категорически запрещено, независимо от того чем обусловлены такие желания. Свои Z-таблицы, да сколько угодно, но......
«Тра­нза­кция SM02: сообщения в SAP системе»
Олег Башкатов:
С помощью ФМ TH_POPUP можно отправить сообщение конкретному пользователю :-)
«MVC или как писать отчеты быстро и просто»
Олег Точенюк:
>>"Самое главное - это расположить инклуды с моделью и представлением до инклуда с контроллером"   А может проще написать в начале что-то типа: CLASS: <имя> DEFINITION...

База знаний

Использование синонимов и динамических параметров в процедурах с SAP BW на базе SAP HANA 7.5 с пакетом поддержки 4 для компенсации отсутствия переменных OLAP

695

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

Иногда при работе с ракурсами расчета SAP HANA из таблиц базы данных могут извлекаться ненужные данные. Чтобы этого не случалось, используйте для доступа к SAP HANA и SAP BW табличные синонимы и процедуры SAP HANA. Аналогично функциональным модулям ABAP процедуры можно использовать для реализации логики и вычислений, которые невозможно выполнить в стандартных вычисляемых столбцах.

После перехода со стандартной реляционной базы данных SAP BW на систему SAP BW на основе базы данных SAP HANA компании стремятся ускорить процессы в среде SAP BW. Среди существенных преимуществ SAP HANA не только увеличенная скорость и переход на более новую базу данных. Эта платформа позволяет значительно сократить объем избыточных данных SAP BW и оптимизировать функциональность (путем переноса функциональности с сервера приложений на уровень базы данных SAP HANA) благодаря применению современных инструментов и архитектуры. В настоящее время я широко применяю ракурсы расчета SAP HANA для наполнения данными композитных провайдеров, аналог мульти-кубов в SAP BW. Это, в свою очередь, порождает новые трудности вследствие отсутствия переменных оперативной аналитической обработки (OLAP), например, текущего года.

Раньше при работе со стандартной системой SAP BW на основе реляционной базы данных вы могли без труда воспользоваться переменными OLAP для фильтрации данных в пакетах переноса данных (DTP) или инфо-пакетах при загрузке данных в постоянные инфо-провайдеры. Следствием современной концепции хранить в SAP HANA как можно больше данных и использовать ракурсы вместо сохранения данных является недостаточное количество вариантов переменных OLAP. Переменные OLAP, использовавшиеся в старых системах SAP BW, выполняются в среде сервера приложений ABAP, но при выборе собственных таблиц базы данных SAP HANA такие переменные становятся недоступны.

При работе с новой архитектурой в системах SAP BW на основе базы данных SAP HANA (в настоящее время я использую SAP BW 7.5 с пакетом поддержки 4) возникают новые трудности, в том числе необходимость фильтрации данных на самом раннем этапе. Старые переменные ABAP или OLAP (переменные BEx Query) не подходят для фильтров в ракурсах расчета или проекциях, поскольку предназначены для работы на уровне приложения, а не на уровне базы данных. В новой структуре вы можете указать жестко закодированный фильтр, но чаще требуются динамические фильтры, например, определенный диапазон дат. Наглядным примером в данном случае является фильтр для считывания таблиц вариантов SAP или аналогичных источников. Для этого можно использовать процедуры SAP HANA (хранимые процедуры), которые вызываются путем определения входных и выходных параметров, например, функциональных модулей.

Функциональные возможности SAP HANA предлагают разные способы извлечения значений из внутренних таблиц SAP. Наиболее подходящим для этого способом я считаю динамический. На трех примерах я расскажу, как преодолеть трудности, связанные с именами схем в SAP HANA на основе префиксов имен таблиц. Например, для таблиц типа TVARVC используется префикс схемы SAPDEV, но в продуктивной среде может применяться префикс SAPPROD. В этом случае возникают проблемы, поскольку в программном коде эти префиксы зависят от вашей системной схемы, например, YOUR_SYSTEM. Проблемы могут появиться после переноса ракурсов расчета, поскольку префиксы в именах схем таблиц не совпадают с префиксами системных схем.

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

С помощью этой вводной статьи по процедурам и синонимам, тесно интегрированным с системой SAP BW 7.5, вы сможете расширить ваши ракурсы расчета. Используя описанные в статье способы, вы сможете создавать собственные процедуры так же, как ранее создавали переменные, и многократно применять их в любых компонентах SAP HANA для ускорения работы системы.

Статический способ извлечения значений из внутренних таблиц SAP

Код на рис. 1, в котором используются статические имена таблиц и схем, является примером для процедуры, которая считывает данные из данной таблицы (например, из таблицы TVARVC) посредством схемы по умочланию в системе разработки (DEV). Этот подход можно применять в одноуровневых ландшафтах.

CREATE PROCEDURE GET_TVARVC_P (in pNAME varchar(30),out pSIGN varchar(1),out pOPTI varchar(2), out pLOW varchar(255),out pHIGH varchar(255))

LANGUAGE SQLSCRIPT

SQL SECURITY INVOKER

READS SQL DATA AS

BEGIN

--SELECT ID INTO myVar FROM MYTAB; --NO_DATA_FOUND exception

DECLARE LV_SIGN varchar(1);

DECLARE LV_OPTI varchar(2);

DECLARE LV_LOW varchar(255);

DECLARE LV_HIGH varchar(255);

DECLARE EXIT HANDLER FOR SQL_ERROR_CODE 1299 SELECT ::SQL_ERROR_CODE, ::SQL_ERROR_MESSAGE FROM DUMMY;

t = select * from "SAPD04"."TVARVC" WHERE NAME = pNAME;

select SIGN into LV_SIGN from :t;

select OPTI into LV_OPTI from :t;

select LOW into LV_LOW from :t;

select HIGH into LV_HIGH from :t;

if LV_LOW <= '19000101' then

LV_LOW := '19000101';

end if;

pSIGN = :LV_SIGN;

pOPTI = :LV_OPTI;

pLOW = :LV_LOW;

pHIGH = :LV_HIGH;

END;

Рис. 1. Код для статических объявлений таблиц в процедурах

Если в ваших процедурах используются таблицы из определенных схем, выполнение этих процедур после переноса из системы разработки (DEV) в систему обеспечения качества (QA) и продуктивную систему (PROD) в трехуровневом ландшафте SAP может замедлиться. В статье я на примере покажу, как считать определенную запись из таблицы SAP DDIC TVARV (в которой хранятся все виды вариантов, например, диапазоны данных) и получить запрашиваемые данные в виде возвращенного значения. Пример кода для этого представлен на рис. 1.

Использование синонимов как псевдонимов для любой таблицы

Во втором примере используется функциональность синонимов SAP HANA, которая работает так же, как и псевдонимы таблиц. Благодаря этой функциональности вы сможете избежать многих проблем, которые могут возникнуть при использовании статических имен схем, например, MY_SYSTEM_TABLE_NAME и статических имен таблиц (см. первый пример). Однако вы должны создать синонимы на всех трех уровнях ландшафта SAP BW, поскольку для каждой системы определен собственный префикс, например, MY_DEV_SYSTEM или MY_PROD_SYSTEM для таблицы TVARVC (например, в трехуровневом ландшафте вы должны создать синонимы во всех трех системах).

В данном случае (при использовании синонимов) вы должны ссылаться на определенную таблицу посредством индивидуальной схемы в вашей системе DEV, как было показано в первом примере кода (например, посредством схемы SAPD04). Однако эта схема в системе DEV называется SAPD04, а в системе PROD — SAPP04. Такое различие в именах может вызвать проблемы при переносе процедуры в существующем ландшафте SAP BW, поскольку именно такие имена схем после переноса в трехуровневом ландшафте существовать не будут.

Чтобы избежать таких ситуаций после переноса сегментов кода для процедур, можно использовать синонимы SAP HANA, к которым в коде можно обращаться как к псевдонимам таблиц. В этом случае вы сможете использовать простую таблицу синонимов (например, как таблица из примера TVARVC), а не обращаться к именам схем и таблиц (например, схема SAPD04 и таблица TVARVC).

Сначала следует создать общедоступный синоним, с которым смогут работать все пользователи, а не только ваш персональный пользователь, и схемы. Для создания синонима откройте консоль SQL в Eclipse и введите код, представленный на рис. 2. Выполните оператор для создания в базе данных SAP HANA синонима TVARVC, который вы сможете повторно использовать в ваших процедурах.

Рис. 2. Консоль SQL в Eclipse с кодом для создания синонима TVARVC

После успешного выполнения SQL-оператора для создания нового общедоступного синонима этот синоним будет отображаться в схеме таблицы в разделе «DF4 Development» (Разработка DF4) в папке «Public Synonyms» (Общедоступные синонимы), см. Рис. 3.

Рис. 3. Синонимы SAP HANA в ракурсе моделирования SAP HANA в Eclipse

Новый синоним можно протестировать, выполнив оператор, как показано на рис. 4. Если выводится контент таблицы, значит, синоним создан и работает корректно.

Рис. 4. SQL-код для подтверждения успешного создания TVARVC (псевдоним таблицы)

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

Совет.

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

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

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

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


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