четверг, 29 декабря 2011 г.
Портал BPS || IP блокировки
При реализации планирования через портал, столкнулся с тем что не всегда при переключении или закрытии портала снималась блокировка.
Решение - для того чтобы при закрытии окна обозревателя сессия автоматически закрывалась и снимались блокировки необходимо в адресной строке дописать команду &USE_PAGE_WRAPPER=’X’ (но не после Dummy).
Найдено Митей :)
четверг, 24 ноября 2011 г.
Debug modal window
Навеяло постом http://saphrblog.ru/?p=483#more-483
Можно создать файл - допустим debug.txt
И так же кидать его на окно.
Содержание файла:
[FUNCTION]
Title=Debugger
Command=/H
Type=SystemCommand
Можно создать файл - допустим debug.txt
И так же кидать его на окно.
Содержание файла:
[FUNCTION]
Title=Debugger
Command=/H
Type=SystemCommand
понедельник, 7 ноября 2011 г.
Особенности REF
На днях, столкнулся с некоторыми особенностями поведения REF.
REF & Constant Selection - вместе нормально не работают... точнее если вы пытаетесь сделать формулу с двумя этими показателями...
При использовании REF почему то проигнорировалось ограничение по кубу внутри показателя. Ограничение по кубу в фильтрах - отработало.
REF & Constant Selection - вместе нормально не работают... точнее если вы пытаетесь сделать формулу с двумя этими показателями...
При использовании REF почему то проигнорировалось ограничение по кубу внутри показателя. Ограничение по кубу в фильтрах - отработало.
вторник, 16 августа 2011 г.
Перенос Трансформации с самоуничтожением
Было три или четыре случая, когда при переносе "зачищалась" трансформация... причем с одна из переносимых, с остальными всё было ok.
Зачищалась - удалялась start\end рутина и все подпрограммы.
Но почему то всё происходило в запарке, не до расшаркиваний... и разбирательств.
Сейчас в спокойной обстановке, когда ситуация повторилась... удалось локализовать проблему и сценарий.
Итак:
1. Меняем трансформацию. Создается запрос в него попадает трансформация и все подпрограммы.
2. Удаляем трансформацию из запроса... но подпрограммы оставляем.
3. Опять меняем туже трансформацию, но сохраняем в новый запрос
4. Обнаруживаем что:
- в новом запросе только трансформация без подпрограмм
- система увидела что подчиненные объекты в другом запросе и не включила в этот >> логично
- но при этом система об этом никак не сигнализировала, что не удалось включить подпрограммы >> спорно
5. Переносим 2й запрос - получаем "зачистку" - логично
Зачищалась - удалялась start\end рутина и все подпрограммы.
Но почему то всё происходило в запарке, не до расшаркиваний... и разбирательств.
Сейчас в спокойной обстановке, когда ситуация повторилась... удалось локализовать проблему и сценарий.
Итак:
1. Меняем трансформацию. Создается запрос в него попадает трансформация и все подпрограммы.
2. Удаляем трансформацию из запроса... но подпрограммы оставляем.
3. Опять меняем туже трансформацию, но сохраняем в новый запрос
4. Обнаруживаем что:
- в новом запросе только трансформация без подпрограмм
- система увидела что подчиненные объекты в другом запросе и не включила в этот >> логично
- но при этом система об этом никак не сигнализировала, что не удалось включить подпрограммы >> спорно
5. Переносим 2й запрос - получаем "зачистку" - логично
За что я не люблю компаунды
Временами возникает вопрос, о использовании compaund. В принципе технология имеет право на жизнь, но я каждый время напряженно вспоминаю какие проблемы у меня с этой техникой возникали.
Собственно это сборник проблем:
>>При использовании признака как атрибута, есть проблема - невозможно повторно включить признак как ref-атрибут, т.к. compaund не понимает что такое ref, и не добавляет 2й compaund в признак.
A - признак
B - признак в котором A идет как compaund
B1 - ref B
B2 - ref B
C - признак, включаем атрибут B1 - автоматически включается А
С - признак, включает атрибут B2... система видит что А уже есть...
и в атрибутах у С имеет следующее:
- B1
- B2
- A (один для обоих B1 и B2)
>>В отчетности, при использовании навигационного атрибута B признака С, есть "проблема"... в ограничениях признака сохраняется "чистое" значение B. В принципе можно добавить ограничение по compaund - но пользователей такое поведение немного нервирует. см.картинку.
Собственно это сборник проблем:
>>При использовании признака как атрибута, есть проблема - невозможно повторно включить признак как ref-атрибут, т.к. compaund не понимает что такое ref, и не добавляет 2й compaund в признак.
A - признак
B - признак в котором A идет как compaund
B1 - ref B
B2 - ref B
C - признак, включаем атрибут B1 - автоматически включается А
С - признак, включает атрибут B2... система видит что А уже есть...
и в атрибутах у С имеет следующее:
- B1
- B2
- A (один для обоих B1 и B2)
>>В отчетности, при использовании навигационного атрибута B признака С, есть "проблема"... в ограничениях признака сохраняется "чистое" значение B. В принципе можно добавить ограничение по compaund - но пользователей такое поведение немного нервирует. см.картинку.
четверг, 4 августа 2011 г.
Строка с пробелами
Оригинальный способ соединять элементы в строку, если надо сохранить пробелы.
TYPES:
BEGIN OF aa,
client type EQECLIENT,
cube TYPE RSINFOPROV,
guid type GUID_32,
END OF aa.
DATA: aa1 type aa.
aa1-client = sy-mandt.
aa1-cube = 'Yxxxxxxx'.
aa1-guid =-GUID.
l_ARG = aa1.
TYPES:
BEGIN OF aa,
client type EQECLIENT,
cube TYPE RSINFOPROV,
guid type GUID_32,
END OF aa.
DATA: aa1 type aa.
aa1-client = sy-mandt.
aa1-cube = 'Yxxxxxxx'.
aa1-guid =
l_ARG = aa1.
пятница, 22 июля 2011 г.
Очистка кэша
Очистка кэша в кубах по инфо-области
*&---------------------------------------------------------------------*
*& Report Z_BW_CLEAR_CACHE_BY_CUBES_SO
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*
REPORT Z_BW_CLEAR_CACHE_BY_IA.
TYPE-POOLS: RSD.
TABLES: RSDCUBE, RSDODSO, RSQISET.
parameters:
lp_ia TYPE string. " Info Area
DATA:
l_cube TYPE RSINFOCUBE,
range_tab LIKE RANGE OF l_cube,
range_line LIKE LINE OF range_tab,
lt_tmplist TYPE STANDARD TABLE OF RSINFOCUBE.
FIELD-SYMBOLS:
TYPE RSINFOCUBE.
clear range_line.
range_line-sign = 'I'.
range_line-option = 'CP'.
SELECT DISTINCT INFOCUBE
FROM RSDCUBE
INTO TABLE lt_tmplist
WHERE INFOAREA = lp_ia.
IF lt_tmplist[] IS NOT INITIAL.
LOOP AT lt_tmplist
ASSIGNING.
range_line-low =.
collect range_line into range_tab.
ENDLOOP.
ENDIF.
SELECT DISTINCT ODSOBJECT
FROM RSDODSO
INTO TABLE lt_tmplist
WHERE INFOAREA = lp_ia.
IF lt_tmplist[] IS NOT INITIAL.
LOOP AT lt_tmplist
ASSIGNING.
range_line-low =.
collect range_line into range_tab.
ENDLOOP.
ENDIF.
SELECT DISTINCT INFOSET
FROM RSQISET
INTO TABLE lt_tmplist
WHERE INFOAREA = lp_ia.
IF lt_tmplist[] IS NOT INITIAL.
LOOP AT lt_tmplist
ASSIGNING.
range_line-low =.
collect range_line into range_tab.
ENDLOOP.
ENDIF.
* Вызов очистки
SUBMIT Z_BW_CLEAR_CACHE_BY_CUBES
WITH cubelist IN range_tab
AND RETURN.
*&---------------------------------------------------------------------*
*& Report Z_BW_CLEAR_CACHE_BY_CUBES
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*
REPORT Z_BW_CLEAR_CACHE_BY_CUBES.
TYPE-POOLS: RSD.
TABLES: RSDCUBE.
CLASS cl_rsr_cache_mm DEFINITION LOAD.
DATA:
p_r_mem_mon TYPE REF TO if_rsr_cache_memory_monitor,
p_s_mm TYPE rsrcb_s_mm,
p_r_mem TYPE REF TO if_rsr_cache_memory,
l_s_key TYPE rsrcb_s_key,
instance TYPE REF TO if_rsr_cache_mon,
n_r_mem TYPE REF TO cl_rsr_cache_mm,
p_t_alv TYPE rsrcc_t_alv,
l_s_mm_line TYPE rsrcb_s_mm_line,
l_s_alv TYPE rsrcc_s_alv,
l_flag TYPE c VALUE 'X',
l_cube TYPE RSINFOCUBE.
SELECT-OPTIONS cubelist FOR l_cube NO INTERVALS.
* correct input value, add mask
LOOP AT cubelist.
cubelist-option = 'CP'.
CONCATENATE cubelist-low '*'
INTO cubelist-low.
modify cubelist.
ENDLOOP.
WHILE l_flag = 'X'.
* на сколько я понял, в цикле сделано, для того, чтобы
* предотвратить появление кэша во время очистки
CALL METHOD cl_rsr_cache_qu_mon=>if_rsr_cache_mon~create
RECEIVING
r_r_instance = instance.
n_r_mem = cl_rsr_cache_mm=>create( 'm' ).
p_r_mem = n_r_mem.
p_r_mem_mon = n_r_mem.
p_s_mm = p_r_mem_mon->get_monitor_data( ).
LOOP AT p_s_mm-t_mm_line INTO l_s_mm_line.
MOVE-CORRESPONDING l_s_mm_line TO l_s_alv.
APPEND l_s_alv TO p_t_alv.
ENDLOOP.
CALL METHOD instance->get_prop
EXPORTING
i_r_mem = n_r_mem
CHANGING
c_t_alv = p_t_alv.
LOOP AT p_t_alv INTO l_s_alv
WHERE mem_id_ext IN cubelist.
EXIT.
ENDLOOP.
IF sy-subrc IS INITIAL.
l_s_key-mem_id = l_s_alv-mem_id.
l_s_key-log_id = l_s_alv-log_id.
p_r_mem->delete( l_s_key ).
ELSE.
CLEAR l_flag.
ENDIF.
CLEAR: p_t_alv[], l_s_alv.
ENDWHILE.
четверг, 21 июля 2011 г.
SM12 Unlock
Маленький код, для unlock'a пользователей.
Потом оформили как транзакцию c вариантом, и отдали пользователем... чтобы могли снимать собственные блокировки в IP.
Сам заблокировал себя, вот пусть сам и снимает :)
Потом оформили как транзакцию c вариантом, и отдали пользователем... чтобы могли снимать собственные блокировки в IP.
Сам заблокировал себя, вот пусть сам и снимает :)
*&---------------------------------------------------------------------*
*& Report Z_SM12_LOCK_DELETE
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*
REPORT Z_SM12_LOCK_DELETE.
PARAMETERS:
pNAME TYPE EQEGRANAME DEFAULT 'RSPLS_S_LOCK_SYNC',
pARG TYPE EQEGRAARG DEFAULT SPACE,
pUNAME TYPE EQEUNAME DEFAULT SY-UNAME,
pEXT TYPE CHAR4 DEFAULT SPACE. "для расширения в будущем
* Example:
*GNAME RSPLS_S_LOCK_SYNC
*GARG 500YIPSO_EMP*
*GUNAME MY_FAV_USER
IF pUNAME = SPACE.
pUNAME = SY-UNAME.
ENDIF.
DATA : ZENQ TYPE STANDARD TABLE OF SEQG3.
CALL FUNCTION 'ENQUE_READ'
EXPORTING
GCLIENT = SY-MANDT
GNAME = pNAME
GARG = pARG
GUNAME = pUNAME
TABLES
ENQ = ZENQ .
IF ZENQ IS NOT INITIAL.
CALL FUNCTION 'ENQUE_DELETE'
TABLES
ENQ = ZENQ .
IF sy-subrc = 0.
write: / 'Unlock.'.
ENDIF.
ELSE.
write: / 'Lock isn''''t found.'.
ENDIF.
вторник, 31 мая 2011 г.
WAD Scrolling
Нашел два пути настройки скролинга в WAD для запроса...
1. Стандартный - но при скролинге считывает данные, т.е. дергается
2. Плавный - но работает только с определенной версии JAVA
Вообще там много интересных и полезных модулей com.sap.ip.bi.rig.*
1. Стандартный - но при скролинге считывает данные, т.е. дергается
2. Плавный - но работает только с определенной версии JAVA
Вообще там много интересных и полезных модулей com.sap.ip.bi.rig.*
среда, 13 апреля 2011 г.
вторник, 15 марта 2011 г.
WAD 3.x and Windows 7
При попытке запустить WAD 3.x в Windows 7 возникла ошибка по поводу версии IE.
Проблема решается установкой патчика на DHTML.
http://www.microsoft.com/downloads/en/confirmation.aspx?familyId=b769a4b8-48ed-41a1-8095-5a086d1937cb&displayLang=en
Проблема решается установкой патчика на DHTML.
http://www.microsoft.com/downloads/en/confirmation.aspx?familyId=b769a4b8-48ed-41a1-8095-5a086d1937cb&displayLang=en
вторник, 1 марта 2011 г.
RSZDELETE Log
Удалился тут запрос, а кто, чего, за что... непонятно.
Найти лог можно в транзакции SLG1
Object : RSZ
Subobject : DELETE
Остальное по логике...
Некоторые книжки оказались только в фаворитах у пользователей, и чтобы по тихому получить доступ к ним... пришлось все делать через /h и табличку SMEN_BUFFC :)
Найти лог можно в транзакции SLG1
Object : RSZ
Subobject : DELETE
Остальное по логике...
Некоторые книжки оказались только в фаворитах у пользователей, и чтобы по тихому получить доступ к ним... пришлось все делать через /h и табличку SMEN_BUFFC :)
суббота, 22 января 2011 г.
ORA-60 deadlock
Чтобы не потерять :)
http://www.sdn.sap.com/irj/scn/weblogs?blog=/pub/wlg/7916
http://www.sdn.sap.com/irj/scn/weblogs?blog=/pub/wlg/7916
http://www.sdn.sap.com/irj/scn/weblogs?blog=/pub/wlg/22852
ну и в нагрузку
http://www.sdn.sap.com/irj/scn/weblogs?blog=/pub/wlg/23130
http://www.sdn.sap.com/irj/scn/weblogs?blog=/pub/wlg/7916
http://www.sdn.sap.com/irj/scn/weblogs?blog=/pub/wlg/7916
http://www.sdn.sap.com/irj/scn/weblogs?blog=/pub/wlg/22852
ну и в нагрузку
http://www.sdn.sap.com/irj/scn/weblogs?blog=/pub/wlg/23130
пятница, 21 января 2011 г.
Date Pack
Для планирования дат были созданы показатели с типом DEC - иначе не планирует.
Как следствие дата 21.01.2010 = 734159
И понадобилось сравнить с текущей датой, но не через bi-отчет, а в ABAP'e.
Вопрос: Как конвертнуть sy-datum в этот формат?
Ответ:
DATA:
Y_PACKDATE TYPE i.
PACK sy-datum TO Y_PACKDATE.
* оказалось что OO не поддерживает PACK, используем MOVE
MOVE sy-datum TO Y_PACKDATE
Как следствие дата 21.01.2010 = 734159
И понадобилось сравнить с текущей датой, но не через bi-отчет, а в ABAP'e.
Вопрос: Как конвертнуть sy-datum в этот формат?
Ответ:
DATA:
Y_PACKDATE TYPE i.
PACK sy-datum TO Y_PACKDATE.
* оказалось что OO не поддерживает PACK, используем MOVE
MOVE sy-datum TO Y_PACKDATE
Подписаться на:
Сообщения (Atom)