on 06-11-2015 12:40 PM
Hi Experts,
I'm using the code below:
I'm not getting data populated in CT_DATA when QUERY = OFF WRITE = ON.
I only see data populated in CT_DATA when QUERY = ON WRITE = ON.
Can you help please...
*************CODE******
TYPES:
BEGIN OF TY_CONSDATA,
ACCOUNT TYPE C LENGTH 32,
AUDIT TYPE C LENGTH 32,
CATEGORY TYPE C LENGTH 32,
CURRENCY TYPE C LENGTH 32,
ENTITY TYPE C LENGTH 32,
FLOW TYPE C LENGTH 32,
INTERCO TYPE C LENGTH 32,
MEASURES TYPE C LENGTH 32,
SCOPE TYPE C LENGTH 32,
TIME TYPE C LENGTH 32,
SIGNEDDATA TYPE /B28/OISDATA,
END OF TY_CONSDATA .
FIELD-SYMBOLS: TYPE STANDARD TABLE,
********READ TRANSACTION CONSOLIDATION T-DATA***********
LO_APPL_MGR = CL_UJA_BPC_ADMIN_FACTORY=>GET_APPLICATION_MANAGER(
I_APPSET_ID = LV_ENVIRONMENT_ID
I_APPLICATION_ID = LV_APPLICATION_ID ).
CLEAR LS_APPLICATION.
LO_APPL_MGR->GET(
EXPORTING
IF_WITH_MEASURES = ABAP_FALSE " BPC: GENERIC INDICATOR
IF_SUMMARY = ABAP_FALSE " BPC: GENERIC INDICATOR
IMPORTING
ES_APPLICATION = LS_APPLICATION ). " APPLICATIONS TABLE TYPE
REFRESH LT_DIM_LIST.
LOOP AT LS_APPLICATION-DIMENSIONS INTO LS_DIMENSIONS.
APPEND LS_DIMENSIONS-DIMENSION TO LT_DIM_LIST.
ENDLOOP.
LO_APPL_MGR->CREATE_DATA_REF(
EXPORTING
I_DATA_TYPE = 'T'
IT_DIM_NAME = LT_DIM_LIST
IF_TECH_NAME = ABAP_FALSE
IF_SIGNEDDATA = ABAP_TRUE
IMPORTING
ER_DATA = LR_DATA ).
ASSIGN LR_DATA->* TO RUN_RSDRI_QUERY(
EXPORTING
IT_DIM_NAME = LT_DIM_LIST " BPC: DIMENSION LIST
IT_RANGE = " BPC: SELECTION CONDITION
IF_CHECK_SECURITY = ABAP_FALSE " BPC: GENERIC INDICATOR
I_PACKAGESIZE = " BPC: SIZE OF RETURNED DATA PACKAGE
I_CALL_BADI = ABAP_TRUE
IF_DB_AGGREGATE = ABAP_TRUE " BPC: GENERIC INDICATOR
IMPORTING
ET_DATA =
E_END_OF_DATA = " BPC: LAST DATA PACKAGE YES/NO
E_SPLIT_OCCURRED = " RESULT MAY NOT BE COMPLETELY AGGREGATED
ET_MESSAGE = LT_MESSAGE " BPC: MESSAGES
E_STATS_GUID = " BPC: STATISTICS SESSION
E_CELL_FILTED =
CHANGING
C_FIRST_CALL = " BPC: FIRST CALL YES/NO
).
CATCH CX_UJO_READ. " EXCEPTION OF COMMON READ
CATCH CX_UJO_READ. " EXCEPTION OF COMMON READ
ENDTRY.
REFRESH: CT_DATA, LT_QUERY_RESULT .
IF LT_QUERY_RESULT IS NOT INITIAL.
CT_DATA[] = LT_QUERY_RESULT[].
ENDIF.
ENDMETHOD.
*
*
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
COMPLETE CODE
TYPES:
BEGIN OF TY_CONSDATA,
ACCOUNT TYPE C LENGTH 32,
AUDIT TYPE C LENGTH 32,
CATEGORY TYPE C LENGTH 32,
CURRENCY TYPE C LENGTH 32,
ENTITY TYPE C LENGTH 32,
FLOW TYPE C LENGTH 32,
INTERCO TYPE C LENGTH 32,
MEASURES TYPE C LENGTH 32,
SCOPE TYPE C LENGTH 32,
TIME TYPE C LENGTH 32,
SIGNEDDATA TYPE /B28/OISDATA,
END OF TY_CONSDATA .
FIELD-SYMBOLS: <LT_CONS_RESULT> TYPE STANDARD TABLE,
*********READ TRANSACTION CONSOLIDATION T-DATA************
LO_APPL_MGR = CL_UJA_BPC_ADMIN_FACTORY=>GET_APPLICATION_MANAGER(
I_APPSET_ID = LV_ENVIRONMENT_ID
I_APPLICATION_ID = LV_APPLICATION_ID ).
CLEAR LS_APPLICATION.
LO_APPL_MGR->GET(
EXPORTING
IF_WITH_MEASURES = ABAP_FALSE " BPC: GENERIC INDICATOR
IF_SUMMARY = ABAP_FALSE " BPC: GENERIC INDICATOR
IMPORTING
ES_APPLICATION = LS_APPLICATION ). " APPLICATIONS TABLE TYPE
REFRESH LT_DIM_LIST.
LOOP AT LS_APPLICATION-DIMENSIONS INTO LS_DIMENSIONS.
APPEND LS_DIMENSIONS-DIMENSION TO LT_DIM_LIST.
ENDLOOP.
LO_APPL_MGR->CREATE_DATA_REF(
EXPORTING
I_DATA_TYPE = 'T'
IT_DIM_NAME = LT_DIM_LIST
IF_TECH_NAME = ABAP_FALSE
IF_SIGNEDDATA = ABAP_TRUE
IMPORTING
ER_DATA = LR_DATA ).
ASSIGN LR_DATA->* TO <LT_CONS_RESULT>.
TRY.
LO_QUERY = CL_UJO_QUERY_FACTORY=>GET_QUERY_ADAPTER(
I_APPSET_ID = LV_ENVIRONMENT_ID
I_APPL_ID = LV_APPLICATION_ID
).
LO_QUERY->RUN_RSDRI_QUERY(
EXPORTING
IT_DIM_NAME = LT_DIM_LIST " BPC: DIMENSION LIST
* IT_RANGE = " BPC: SELECTION CONDITION
IF_CHECK_SECURITY = ABAP_FALSE " BPC: GENERIC INDICATOR
* I_PACKAGESIZE = " BPC: SIZE OF RETURNED DATA PACKAGE
* I_CALL_BADI = ABAP_TRUE
* IF_DB_AGGREGATE = ABAP_TRUE " BPC: GENERIC INDICATOR
IMPORTING
ET_DATA = <LT_CONS_RESULT>
* E_END_OF_DATA = " BPC: LAST DATA PACKAGE YES/NO
* E_SPLIT_OCCURRED = " RESULT MAY NOT BE COMPLETELY AGGREGATED
ET_MESSAGE = LT_MESSAGE " BPC: MESSAGES
* E_STATS_GUID = " BPC: STATISTICS SESSION
* E_CELL_FILTED =
* CHANGING
* C_FIRST_CALL = " BPC: FIRST CALL YES/NO
).
* CATCH CX_UJO_READ. " EXCEPTION OF COMMON READ
CATCH CX_UJO_READ. " EXCEPTION OF COMMON READ
ENDTRY.
REFRESH: CT_DATA, LT_CONS_RESULT .
IF LT_CONS_RESULT IS NOT INITIAL.
CT_DATA[] = LT_CONS_RESULT[].
ENDIF.
ENDMETHOD.
*
*
Hi unknown BPC ABAP BADI expert
What do you want to achieve?
"I'm not getting data populated in CT_DATA when QUERY = OFF WRITE = ON.
I only see data populated in CT_DATA when QUERY = ON WRITE = ON. "
When QUERY = ON the CT_DATA will be populated with the data scoped in the previous lines of script. If QUERY = OFF - then CT_DATA is empty by design.
What for do you need to use RUN_RSDRI_QUERY? Do you want to get data from not current cube or??
Vadim
1) Use RUN_RSDRI_QUERY to capture data from CUBE to internal table LT_CONS_RESULT
Simply don't use RUN_RSDRI_QUERY!
1. Scope the required data in the script before BADI launch. *XDIM_MEMBERSET....
2. Launch BADI with QUERY = ON
3. CT_DATA will contain data scoped in the first step.
4. You can perform calculations directly in CT_DATA or copy records to another table.
5. At the end CT_DATA has to contain only records that has to be written back to the cube.
6. End!
Vadim
Hi,
You need to understand the difference between QUERY = ON and OFF.
with = ON, BPC will use the data region you specify in the logic file. CT_DATA will be populated in BADI from start of the BADI execution,
with = OFF, you have to use the code you provided to pull data into your BADI, CT_DATA will be empty from start of the BADI execution.
It is better to use QUERY = OFF if you can't fully specify the data region using XDIM statement.
by looking at your code you need to use IT_RANGE to limit the amount of data in want to use in your BADI, without using IT_RANGE then you might as well use QUERY = ON with no XDIM statement, because you are reading ALL the data in your model.
Andy
This is the CODE:
LT_CONS_RESULT[] = CT_DATA[].
IF NOT LT_CONS_RESULT IS INITIAL.
LOOP AT LT_CONS_RESULT ASSIGNING <LT_CONS_RESULT>.
MOVE-CORRESPONDING <LT_CONS_RESULT> TO l_FINAL.
APPEND l_FINAL TO LT_CONS_DEST.
ENDLOOP.
SORT LT_CONS_DEST BY ACCOUNT ENTITY TIME.
*START_BADI Z_BADI
QUERY = ON
WRITE = ON
*END_BADI
User | Count |
---|---|
12 | |
3 | |
1 | |
1 | |
1 | |
1 | |
1 | |
1 | |
1 | |
1 |
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.