Gyan Factory

Gyan Factory
SAP Technical Project Support

Wednesday, February 17, 2016

SALV Table 22 – Get Data Directly after SUBMIT



ABAP SALV model has some cool features. Getting the data table from the model, is one of them. Let’s explore the solution.

Problems analyzing LIST returned by LIST_FROM_MEMORY

SUBMIT is a great feature of ABAP. You can generate the report output, send LIST to the memory usingSUBMIT .. EXPORTING LIST TO MEMORY. You can get this list from the memory using the FM LIST_FROM_MEMORY and use that to write the list using WRITE_LIST .
Everything is good so far, but when you need to read the values from the list, things get messy. You would need to parse the data, remove the lines, formatting etc. This would be painful and not much fun.

Workaround

You can overcome this issues by a workaround:
  1. Export the list to the unique Memory ID from the submitted Program
  2. Import the list from the memory ID in the caller program
To be able to implement this workaround, you would need to modify the Submitted program in order to pass the data to the memory ID. Once you do that, caller program would be able to get it back after control is back in the main program.

Use SALV Model class CL_SALV_BS_RUNTIME_INFO

To overcome this limitation of the workaround, SALV model would be helpful. If the output of the submitted report is generated by the SALV Fullscreen model, the data can be easily retrieved back using the SALV model class CL_SALV_BS_RUNTIME_INFO. This class CL_SALV_BS_RUNTIME_INFO has few methods which can be really useful in this situation.
Let the model know, that you don’t want to generate the output, but interested in the data.

Instruct Model to get the data

 
cl_salv_bs_runtime_info=>set(
  EXPORTING
    display  = SPACE
    metadata = SPACE
    DATA     = ‘X’ 
).
 
Once the report is submitted, get the data from the runtime information

Retrieve Data

 
DATA lo_data TYPE REF TO DATA.
TRY.
    " get data from the SALV model
    cl_salv_bs_runtime_info=>get_data_ref(
          IMPORTING
            r_data = lo_data
    ).
  CATCH cx_salv_bs_sc_runtime_info.
    MESSAGE 'Unable to get data from SALV' TYPE 'I'.
ENDTRY.
 

Example

To show it in action, I’m submitting the report SALV_DEMO_TABLE_SIMPLE.

Demo Program

 
DATA: lt_outtab TYPE STANDARD TABLE OF alv_t_t2.
FIELD-SYMBOLS: <lt_outtab> LIKE lt_outtab.
DATA lo_data TYPE REF TO DATA.
 
" Let know the model
 cl_salv_bs_runtime_info=>set(
  EXPORTING
    display  = abap_false
    metadata = abap_false
    DATA     = abap_true
).
 
 
SUBMIT salv_demo_table_simple
  AND RETURN.
 
TRY.
    " get data from SALV model
    cl_salv_bs_runtime_info=>get_data_ref(
          IMPORTING
            r_data = lo_data
    ).
    ASSIGN lo_data->* to <lt_outtab>.
    BREAK-POINT.    
 
  CATCH cx_salv_bs_sc_runtime_info.
ENDTRY.
Note that,
  • Not sending the list to memory
  • No need to modify the submitted program to export the data to memory
  • No need to Import the data
These method does the same export and import but they are hidden from the caller.
Debugger shows that the data has been successfully retrieved from the model.
ABAP_SALV_GET_TABLE_FROM_SUBMIT

No comments:

Post a Comment