Наткнулся на решение, где предлагалось сделать собственную функцию, которая рубила бы все блокировки на кубе (куб - параметром). Соответственно вставить данную функцию в плановую цепочку первой. ИМХО, как то грубовато.
Нашел выход интересней... Создать признак GUID, на нем по факту данных нет. Но при вызове функции он указывается в критериях выбора, туда куда мы собираемся писать данные.
Переменная GUID заполняется в CMOD'e
CALL FUNCTION 'GUID_CREATE'
IMPORTING
EV_GUID_32 = L_GUID.
L_VAL = 'IEQ' && L_GUID.
APPEND L_VAL TO E_T_RANGE.
Но правда тут оказалась подлянка...
Если переменная без ввода - то в рамках одной сессии BEx позволяет запускать разные функции, но без повторений... т.е. нельзя запустить ещё одну книгу. Если открыть новый Bex то всё ок
Если переменная input_ready и в есть в запросе (в dummy kf) - то дает запускаться как угодно, и в одной сессии BEx и в разных. Но пользователь на экране визит GUID. Даже если скрыть переменную с помощью E_NO_SCREEN = 'X' то почему то возвращаемся к первому варианту.
Есть побочный эффект, т.к. система генерирует данные, то создаются SID в таблице признака ZGUID
А да, ещё в первом случае функция планирования возвращала сообщение что значение GUID не действительно. Типа Value '0050568842301EE3B7839EABB7A29A35[0050568842301EE3B' is not valid for variable GUID Generator
Либо подавить сообщение, либо можно сгенерить SID следующим способом.
DATA: lt_ZGUID_T TYPE STANDARD TABLE OF /BIC/TZGUID.
APPEND L_GUID TO lt_ZGUID_T.
CALL FUNCTION 'RSDMD_WRITE_ATTRIBUTES_TEXTS'
EXPORTING
I_IOBJNM = 'ZGUID'
I_TABCLASS = 'T'
* I_T_ATTR =
* I_S_MINFO =
* I_REQUNR =
* I_DATAPAKID =
* I_MONITORING =
* I_CREATE_STATISTICS = RS_C_TRUE
* IMPORTING
* E_T_IDOCSTATE =
* E_SUBRC =
TABLES
I_T_TABLE = lt_ZGUID_T
EXCEPTIONS
ATTRIBUTE_NAME_ERROR = 1
IOBJ_NOT_FOUND = 2
GENERATE_PROGRAM_ERROR = 3
OTHERS = 4
.
IF SY-SUBRC <> 0.
* Implement suitable error handling here
ENDIF.
Причем, т.к. тексты пусто, то функция в таблицу текстов ничего не записала... но при этом добавила SID в таблицу SID'ов. Активировать признак не надо.
Еще попробовал сделать ZGUID через собственный класс... но по ходу в IP написана собственная проверка тупо через SID таблицу - ни один метод класса при генерации данных не вызывался. Еще попробовал сделать измерение с ZGUID lineitem - тоже не помогло.
Чтобы систему не напрягать, выкинул из блокировок все признаки кроме ZGUID.
Выкинуть все признаки система дала, но при этом ругалась что не может поставить блокироку, и функция неотрабатывала.
RSPLAN
Goto \ Manager Lock Server
Lock Characteristics
И ещё пару ссылок, пока искал решения
SAP How-To Guides for Analysis and Planning
http://sapbwbw.com/category/sap-bi-ip/
Либо можно решить вопрос кардинально, отключив блокировки
RSPLSE, ввести expert и поставить галку No Locks на панели Lock Table
Для BW-BPS см.параметр SEM_BPS_NO_LOCK
Либо можно решить вопрос кардинально, отключив блокировки
RSPLSE, ввести expert и поставить галку No Locks на панели Lock Table
Для BW-BPS см.параметр SEM_BPS_NO_LOCK
Комментариев нет:
Отправить комментарий