cancel
Showing results for 
Search instead for 
Did you mean: 

CT_DATA Not Populated

Former Member
0 Kudos

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.

*

*

Accepted Solutions (0)

Answers (1)

Answers (1)

Former Member
0 Kudos

Hi BPC,

It is very bad to declare the type of your model, you should always determine dynamically at run time.

The code is not complete, please paste the complete code.

This you write this code or where did you get it from?

have a look at

Andy

Former Member
0 Kudos


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.

*
*

former_member186338
Active Contributor
0 Kudos

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

Former Member
0 Kudos

1) Use RUN_RSDRI_QUERY to capture data from CUBE to internal table LT_CONS_RESULT

2) Perform calculations on the  data in LT_CONS_RESULT

3) Write resulting data set from LT_CONS_RESULT  into CT_DATA ( or back to Cube)

former_member186338
Active Contributor
0 Kudos

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

Former Member
0 Kudos

Your solution worked up to a point where Reference structure is EMPTY, though CT_DATA shows data.....


<LT_CONS_RESULT>[] = CT_DATA[]

Former Member
0 Kudos

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

Former Member
0 Kudos

We want to know why The internal table below is EMPTY:

ET_DATA           = <LT_CONS_RESULT>

Former Member
0 Kudos

While you debug, what is filled in lv_environment_id and lv_application_id?

Use the variable passed into the badi.

i_appset and i_appl I think.

Former Member
0 Kudos

I get this error at debug.....The internal table is empty though the data sits in CT_DATA

Former Member
0 Kudos

What is lt_final now?

Was not in your code.

Did you change the lv_environment_id?

Former Member
0 Kudos

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

Former Member
0 Kudos

Do you understand ABAP?

Former Member
0 Kudos

What is wrong with the code?