Sie sind auf Seite 1von 3

07/08/2018 SAPtoolBOX - reconstruir o CT_DATA

Recriar o CT_DATA
No MDX, ao chamar um BAdI, QUERY = ON permite usar os dados CT_DATA. Às vezes, esses dados são
inutilizáveis para problemas de mudança de contexto e devemos reconstruí-los do zero.
O conteúdo deste CT_DATA depende fortemente do conteúdo do IT_CV. Este tutorial irá abordar o CT_DATA,
veremos mais adiante como alterar o IT_CV.

1. relatório de dados
DATA:
lo_appl TYPE REF TO cl_uja_application,
lt_appl_dim TYPE uja_t_appl_dim,
ls_appl_dim LIKE LINE OF lt_appl_dim,
lt_dim_member TYPE uja_t_dim_member,
ls_dim_member LIKE LINE OF lt_dim_member,
lt_dim_name TYPE ujq_t_dim,
ls_dim_name LIKE LINE OF lt_dim_name,
lt_sel TYPE uj0_t_sel,
ls_sel TYPE uj0_s_sel,
ls_cv TYPE ujk_s_cv,
lo_model TYPE REF TO if_uj_model,
lo_dataref TYPE REF TO data,
lo_query TYPE REF TO if_ujo_query ,
lt_message TYPE uj0_t_message.

FIELD-SYMBOLS: <struct> TYPE STANDARD TABLE.

Dados 2.Initialization
REFRESH : lt_appl_dim, lt_dim_member, lt_dim_name, lt_sel, lt_message.
CLEAR : ls_appl_dim, ls_dim_member, ls_dim_name, ls_sel, ls_cv.

3.Criando um objeto do ambiente e recuperando as dimensões


do modelo
CREATE OBJECT lo_appl
EXPORTING
i_appset_id = i_appset_id
i_application_id = i_appl_id.

lo_appl->get_appl_dim(
EXPORTING
i_appl_id = i_appl_id
IMPORTING
et_appl_dim = lt_appl_dim ).

4.Preparação de uma tabela interna contendo a lista de


dimensões + MEDIDAS
LOOP AT lt_appl_dim INTO ls_appl_dim.
ls_dim_name = ls_appl_dim-dimension.
APPEND ls_dim_name TO lt_dim_name.
CLEAR ls_dim_name.
http://www.saptoolbox.net/tutoriels/detail/bpc/144/rebuild_the_ct_data 1/3
07/08/2018 SAPtoolBOX - reconstruir o CT_DATA

ENDLOOP.

ls_dim_name = 'MEASURES'.
APPEND ls_dim_name TO lt_dim_name.

SORT lt_dim_name.

5.Preparação da seleção
LOOP AT lt_dim_name INTO ls_dim_name .
CLEAR : ls_cv .

* Leitura de contexto de seleção para a dimensão que nos interessa

READ TABLE it_cv INTO ls_cv WITH KEY dimension = ls_dim_name .


IF sy-subrc = 0.
LOOP AT ls_cv-member into ls_dim_member.
ls_sel-dimension = ls_cv-dimension.
ls_sel-attribute = 'ID'.
ls_sel-sign = 'I'.
ls_sel-option = 'EQ'.
ls_sel-low = ls_dim_member.
APPEND ls_sel TO lt_sel.
CLEAR ls_dim_member.
ENDLOOP.
CLEAR lt_dim_member.
ENDIF.
ENDLOOP.

6.Criando uma estrutura semelhante a CT_DATA


TRY.
lo_model = cl_uj_model=>get_model( i_appset_id ).
lo_model->create_tx_data_ref(
EXPORTING
i_appl_name = i_appl_id
i_type = 'T'
it_dim_name = lt_dim_name
if_tech_name = space
IMPORTING
er_data = lo_dataref ).
CATCH cx_uj_static_check.
ENDTRY.

* Transferência da estrutura de dados para os símbolos de campo

ASSIGN lo_dataref->* TO <struct>.

Extração 7.Data
TRY.
lo_query = cl_ujo_query_factory=>get_query_adapter(
i_appset_id = i_appset_id
i_appl_id = i_appl_id
).

lo_query->run_rsdri_query(

http://www.saptoolbox.net/tutoriels/detail/bpc/144/rebuild_the_ct_data 2/3
07/08/2018 SAPtoolBOX - reconstruir o CT_DATA

EXPORTING
it_dim_name = lt_dim_name " BPC: Dimension List
it_range = lt_sel " BPC: Selection condition
if_check_security = ABAP_FALSE " BPC: Generic indicator
IMPORTING
et_data = <struct>
et_message = lt_message " BPC: Messages
).

CATCH cx_ujo_read.

ENDTRY.

8.Cópia da estrutura de dados em CT_DATA


ct_data[] = <struct>.

http://www.saptoolbox.net/tutoriels/detail/bpc/144/rebuild_the_ct_data 3/3

Das könnte Ihnen auch gefallen