среда, 25 июля 2012 г.

Активация трансформаций и DTP и другое

В идеале хотелось бы программу, которая бы пробегала по цепочке и активировала не активные трансформации и DTP.

Нашел ещё книгу Common SAP R/3 Functions от William Lawlor на google book на похожую тематику.

Но в ручном режиме, может пригодиться следующее...
RSDG_TRFN_ACTIVATE - активация трансформаций (note 1408161). Запрос на перенос не формируется.
RSBKDTPREPAIR - активация DTP, транспорт по желанию клиента.
RSBK* - там вообще целый сборник программ, в основном для работы с DTP

Список ниже, но более цивильно оформлен... 

Useful ABAP Programs and Function Modules in SAP BI


RSDG_CUBE_ACTIVATE     куб
RSDG_ODSO_ACTIVATE     DSO
RSDG_IOBJ_ACTIVATE        инфо-объект
RSDG_MPRO_ACTIVATE     Activating Multiproviders
RS_COMSTRU_ACTIVATE_ALL     Activate all inactive Communication Structures
RS_TRANSTRU_ACTIVATE_ALL     Activate Transfer Structure
RSAU_UPDR_REACTIVATE_ALL     Activate Update Rules
RRHI_HIERARCHY_ACTIVATE     Activate Hierarchies
SAP_AGGREGATES_ACTIVATE_FILL     Activating and Filling the Aggregates of an InfoCube

<неожиданно много вкусного, чуть позже переформатирую
RSDDS_AGGREGATES_MAINTAIN --- attribute change run
RSSM_SET_REPAIR_FULL_REQUEST -- changes full update to repair fulll request
RSTRSNSTRU_ACTIVATE_ALL-- activating transfer structure
RSPC_PROCESS_FINISH --- process chain details
RSDG_IOBJ_REORG Repair InfoObjects
RSDG_IOBJ_REORG_TEXTS Reorganization of Texts for InfoObjects
RSDG_MPRO_ACTIVATE Activating Multiproviders
RSDG_MPRO_COPY Make Multiprovider Copies
RSDG_MPRO_DELETE Deleting Multiproviders
RS_COMSTRU_ACTIVATE_ALL Activate all inactive Communication Structures
RS_TRANSTRU_ACTIVATE_ALL Activate Transfer Structure
RSAU_UPDR_REACTIVATE_ALL Activate Update Rules
RRHI_HIERARCHY_ACTIVATE Activate Hierarchies
SAP_AGGREGATES_ACTIVATE_FILL Activating and Filling the Aggregates of an InfoCube
SAP_AGGREGATES_DEACTIVATE Deactivating the Aggregates of an InfoCube
RS_PERS_ACTIVATE Activating Personalization in Bex(Inactive are highlighted)
RSSM_SET_REPAIR_FULL_FLAG Convert Full Requests to Repair Full Requests
SAP_INFOCUBE_DESIGNS Print a List of Cubes in The System and Their Layouts
SAP_ANALYZE_ALL_INFOCUBES Create DB Statstics for all InfoCubes
SAP_CREATE_E_FACTTABLES Create Missing E-Fact Tables for InfoCubes and Aggregates
SAP_DROP_EMPTY_FPARTITIONS Locate/Remove Unused or Empty partitions of F-Fact Table
SAP_DROP_TMPTABLES Remove Temperory Database Objects

Function Modules within BW.

Function Module Description (Function Group RRMX)
RRMX_WORKBOOK_DELETE Delete BW Workbooks permanently from Roles & Favourites
RRMX_WORKBOOK_LIST_GET Get list of all Workbooks
RRMX_WORKBOOK_QUERIES_GET Get list of queries in a workbook
RRMX_QUERY_WHERE_USED_GET Lists where a query has been used
RRMX_JUMP_TARGET_GET Get list of all Jump Targets
RRMX_JUMP_TARGET_DELETE Delete Jump Targets

Function Module Description
MONI_TIME_CONVERT Used for Time Conversions.
CONVERT_TO_LOCAL_CURRENCY Convert Foreign Currency to Local Currecny.
CONVERT_TO_FOREIGN_CURRENCY Convert Local Currency to Foreign Currency.
TERM_TRANSLATE_TO_UPPER_CASE Used to convert all texts to UPPERCASE
UNIT_CONVERSION_SIMPLE Used to convert any unit to another unit. (Ref. table : T006)
TZ_GLOBAL_TO_LOCAL Used to convert timestamp to local time
FISCPER_FROM_CALMONTH_CALC Convert 0CALMONTH or 0CALDAY to Financial Year or Period
RSAX_BIW_GET_DATA_SIMPLE Generic Extraction via Function Module
RSAU_READ_MASTER_DATA Used in Data Transformations to read master data InfoObjects

 RSPC_CHAIN_ACTIVATE_REMOTE

RSIMPCURR -- To Transfer Exchange Rates
RSIMPCUST -- To Transfer Global Settings from source system
RS_TRANSTRU_ACTIVATE_ALL -- To Activate Transfer Rules
-- Useful whenever we need to activate transfer rules in Quality or Production system after transports. 

RSAU_UPDR_REACTIVATE_ALL -- To Activate Update Rules
SAP_CONVERT_TO_TRANSACTIONAL -- To change Basic Cube to Transactional Cube
RSAR_PSA_CLEANUP_DIRECTORY -- To Clean PSA and Change log
SAP_INFOCUBE_DESIGN -- 
To know statistics(Size) of Cubes
-- 
Useful to know the size of Fact Tables and Dimension Tables
RSSM_SET_REPAIR_FULL_FLAG -- 
To change request status from Full load to repair full
-- Useful to start delta loads, If full loads are already present in data target from same data source
RSDDS_AGGREGATES_MAINTAIN -- For Hierarchy/Attribute Change run
RSDDS_CHANGERUN_MONITOR -- To Check Change run Status

RSDG_ODSO_ACTIVATE -- To Activate ODS in background. very much useful when BEx reporting switched on.
RSDG_IOBJ_ACTIVATE -- To Activate Infoobjects(Mass Activation)
RSDG_MPRO_ACTIVATE -- To Activate MultiProviders
RSDG_CUBE_ACTIVATE -- Activation of InfoCubes
RS_COMSTRU_ACTIVATE_ALL -- Activate all inactive communication structures 
RSCONN07 - SAP Connect Administration(System Status)
RSAOS_METADATA_UPLOAD_BATCH -- To replicate single datasource from Source(R/3) 

RSDRD_DELETE_FACTS -- To delete data selectively from infoprovider(ODS or CUBE)
RSAR_LOGICAL_SYSTEMS_ACTIVATE -- Activate All SAP Source Systems (After BW Upgrade)
RSDS_DATASOURCE_ACTIVATE_ALL -- Activate All DataSources of a Log System
RSTCC_ACTIVATE_ADMIN_COCKPIT -- Perform all steps to activate the content for the BI Admin Cockpit
RSTCC_ACTIVATEADMINCOCKPIT_NEW -- Activate Content for the BI Admin Cockpit

RSDG_CUBE_ACTIVATE (InfoCube)
RSDG_IOBJ_ACTIVATE (InfoObject)
RSDG_MPRO_ACTIVATE (MultiProvider)
RSDG_ODSO_ACTIVATE (DSO)
RSQ_ISET_MASS_OPERATIONS (InfoSet - Requires client to be opened)
RSDS_DATASOURCE_ACTIVATE_ALL (DataSource)

RSDMD_DEL_MASTER_DATA

Удаление данных в кубе
RSSM_DELETE_REQUEST
RSDD_INFO_REQUID_DELETE


CALL FUNCTION 'RSAWB_MAINTAIN_DTA'
  EXPORTING
    i_method                         =  'DELDATA'
    I_DTA                              =  name_of_cube_or_dso
    I_DEL_DIMS                     =  'X' .


Использует таблицу rstran и класс cl_rstran_maintain для трансформация
Таблицы rsbkdtp AS a JOIN rsbkdtpstat и класс cl_rsbk_dtp для DTP

TableDescription
RSBKDTPBW: Data Transfer Process Header Data
RSBKDTPHDTP: Historic Versions
RSBKDTPSTATStatus Information on Data Transfer Process
RSBKDTPTTexts on Data Transfer Processes
RSBKDTPTHTexts on Data Transfer Processes
RSDDSTATDTPTable for WHM Statistics. Details DTP
RSOACUBE_DTPBW: OLTP Direct Access: Directory of Assigned Remote DTPs
RSBKDATAPAKSELDTP: Data Package Selections
RSBKSELECTSelections for DTP Request (Summary)
RSBKREQUESTDTP Request
RSBKREQUEST_VView of DTP Request
RSBKBPBreakpoints
RSBKDATAINFOInformation on DTP Runtime Buffers
RSBKDATAPAKIDDTP: Status Table for Data Packages
RSBKSUBSTEPProperties of Substeps in a DTP



TableDescription
RSTRANTransformation
RSTRANFIELDMapping of Rule Parameters - Structure Fields
RSTRANRULETransformation Rule
RSTRANSTEPROUTRule Type: Routine
RSTRANRULESTEPRule Steps for a Transformation Rule
RSTRANSTEPMAPMapping for Rule Step Within a Rule
RSLDPIO Links datasource to infopackages
RSLDPIOT InfoPackage Text Description
RSLDPRULE ABAP source code for InfoPackages
RSLDPSEL Hardcoded selections in InfoPackages
RSMONICDP Contains the request-id number by data target
RSPAKPOS List of InfoPackage Groups / InfoPackages
RSSELDONE InfoPackage selection and job program
RSREQDONE
RSLDTDONE
RSUICDONE

RSEC_DELETE_AUTHORIZATION - удаление значений из транзакции RSECADMIN. А то тут коллеко  по неопытности нагенерил понимаешь....

четверг, 5 июля 2012 г.


Обход проверок полномочий

Иногда возникают ситуации когда прав на запуск той или иной транзакции в системе нет, а права на отладку системы имеются, обойти ограничение на запуск, без изменения полномочий, можно следующим образом:
  • Ставим точку в ФМ: SMTR_KERNEL_CHECK_AUTHORITY
  • Нажимаем F7, чистим P_CANCEL_FLAG
Другая часто встречающаяся ситуация: есть полномочия на запуск программ, но нет на запуск функций, идем в SE38 и запускаем - RSFUNCTIONBUILDER.

Если у вас нет полномочий на "отладку системы", а есть простая отладка, и есть полномочия на SE37, заходим в ФМ - RS_TRANSACTION_TEST, ставим точку после проверки полномочий - ‘AUTH_CHECK_TCODE’ ID ‘TCODE’ FIELD objectname, меняем sy-subrc на 0 и вуаля ;)
Еще более простой обход проверки полномочий, даже не имея прав на отладку вы можете запустить транзакцию используя ФМ: CC_CALL_TRANSACTION_NEW_TASK.

среда, 6 июня 2012 г.

История Bex + персонализация

Началось все с того, что при попытке открытия BEx возникала следующая ошибка - RSOBJS 170 Serious error occurred while reading history folder

побродив по форумам - нашел ответ, активируйте историю BEx, через программу RS_PERS_ACTIVATE (да был старт проекта)


Но все оказалось чуть интересней... История была уже ранее активирована, но потом была деактивирована. И теперь при попытке "повторно" активировать, система пишет о ошибке - "Activation Of BEx History Failed".

Небольшой анализ показал следующее...
  1. Информация о настройках хранится в таблице RSPERSHEAD
  2. В этой таблице указаны ссылки на DSO
  3. При первой активации опции DSO создаются в системе, при деактивации система удалили их... и при повторной активации не могла их создать (почему хз)
  4. Активация по сути считывает структуру указанной таблицы DSO и генерирует программу - см.поле QUERY
  5. Как решение:
    1. соответствующая DSO были поднята из контента
    2. перенос
    3. снять флаг активности - A (иначе Вас не поймут :)
    4. после запуска программа была сгенерированна
table.RSPERSHEAD

0PERS_WTE Personalization Data for Web Template Drilldowns
0PERS_BOD Personalization Data for the BEx Open Dialog
0PERS_VAR Personalization Data for the Replacement of Variables
DSO for Personalization Data


p.s. В неактивированном состоянии таблица RSPERSHEAD не содержит записей с активной версией. Видимо это не позволяет создать DSO.





Initial state of table RSPERSHEAD


ФМ.Некорректные символы

RSKC - транзакция где определяется набор разрешенных символов
            предустановленные константы - 'ALL_CAPITAL' и 'ALL_CAPITAL_PLUS_HEX'


RSKC_ALLOWED_CHAR_GET - FM, доступные символы
SCP_REPLACE_STRANGE_CHARS - FM, стандартный, который может помочь.
Пример вызова (для RU)

CALL FUNCTION 'SCP_REPLACE_STRANGE_CHARS'
  EXPORTING
    INTEXT                  = SOURCE_FIELDS-SGTXT
*   INTEXT_LG               = 0
    INTER_CP                = '1501'
*   INTER_BASE_CP           = '0000'
*   IN_CP                   = '0000'
*   REPLACEMENT             = 46
 IMPORTING
    OUTTEXT                 = RESULT
*   OUTUSED                 =
*   OUTOVERFLOW             =
* EXCEPTIONS
*   INVALID_CODEPAGE        = 1
*   CODEPAGE_MISMATCH       = 2
*   INTERNAL_ERROR          = 3
*   CANNOT_CONVERT          = 4
*   FIELDS_NOT_TYPE_C       = 5
*   OTHERS                  = 6
          .
*IF SY-SUBRC <> 0.
** Implement suitable error handling here
*ENDIF.
-----------------








FUNCTION Z_BW_CLEAR_ILLEGAL_SYMB.
*"----------------------------------------------------------------------
*"*"Локальный интерфейс:
*"  CHANGING
*"     REFERENCE(CHANGING_VALUE)
*"----------------------------------------------------------------------

Constants:
           l_x_A0 type X value 'A0'
         , l_x_C2 type X value 'C2'
         , l_x_09 type X value '09'
         , l_x_20 type X value '20'
         .

Data: int      TYPE I
    , buffer   TYPE XSTRING
    , l_x_D0A0 type XSTRING
    , l_x_D009 type XSTRING
    , l_result TYPE /BI0/OICRM_DESCR
    , conv     TYPE REF TO cl_abap_conv_out_ce
    , conv2    TYPE REF TO cl_abap_conv_in_ce
    .

l_x_D0A0 = 'D0A0'.
l_x_D009 = 'D009'.

l_result = CHANGING_VALUE.

int = strlen( l_result ).

conv = cl_abap_conv_out_ce=>create(
encoding = 'UTF-8'
endian = 'L'
).

CALL METHOD conv->write( data = l_result n = int ).

buffer = conv->get_buffer( ).

replace all occurrences of l_x_D0A0 in buffer with l_x_20 in byte mode.
replace all occurrences of l_x_D009 in buffer with l_x_20 in byte mode.
replace all occurrences of l_x_A0 in buffer with l_x_20 in byte mode.
replace all occurrences of l_x_C2 in buffer with l_x_20 in byte mode.
replace all occurrences of l_x_09 in buffer with l_x_20 in byte mode.

class cl_abap_conv_in_ce definition load.
conv2 = cl_abap_conv_in_ce=>create(
encoding = 'UTF-8'
endian = 'L'
input = buffer
).

CALL METHOD conv2->read(
*EXPORTING n = 4
IMPORTING data = l_result
).

CHANGING_VALUE = l_result.

ENDFUNCTION.

суббота, 5 мая 2012 г.

Патчим исходную

Адекватная ссылка со списком действий... единственное что бы добавил, это выгрузить таблицк ROOSFIELD из исходной - определение полей экстракторов. Ну и пользователей выгнать, а то сколько очередь не выбирай... ну а так конечно все правильно - SMQ1, RSA7x2, RMCEX_SETUP_ENTRIES c LBWG на пару.
Если вдруг проблемы с дельтой... не можете её убить в BI. То либо создайте full пакет, и через него убейте инициализацию, либо воспрользуйтесь нотой 852443 и программой RSSM_OLTP_INIT_DELTA_UPDATE (параметры для запуска найдете в таблице RSSDLINIT), но теперь при заходе в пакет система не падает в дамп.

Для удаления дельты можно воспользоваться программой RSSM_DELETE_INITSEL_OLTP, описанная в ноте 920525.

Интересный эффект... после деактивации структур 2LIS источников, вроде как должна была прекратится сбор очереди в SMQ1. Но по факту, некоторое время, очередь продолжала собираться... Правда через полчаса эффект исчез. Предположительно - документы были зацеплены в обработке и по завершению попали в очередь.

пятница, 20 апреля 2012 г.

Другие модули\функциональности SAP. Доки

К счастью или сожалению, все мы подвержены проф.деформации... Если вдруг меня осенит таки почитать о то что видит за той или иной транзакцией\настройкой брат SAP-консультант модуля <нужное подставить>, то вот полезные ресурсы для SAP-консультанта.

четверг, 19 апреля 2012 г.

Переносы

Был нужен список всех объектов в ХХХ переносах.
<коево ляда?>немного ругани.</коево ляда?> - вырвалось из груди:

E070 - заголовки переносов
E071 - списки объектов

Все объекты могут быть найдены в таблице TADIR