How do I get my data to show up in my ALV?

Mike picture Mike · Sep 17, 2010 · Viewed 7k times · Source

I'm thinking that I'm probably missing an export parameter (from my Function Call POV).

In the REUSE_ALV_GRID_DISPLAY function call, the parameters I pass around are: Exporting:

   i_callback_program,
   i_callback_pf_status_set,
   i_callback_user_command,
   is_layout,
   it_fieldcat,
   i_save
Tables:
   t_outtab

And the exceptions plus handling.

I've checked that the internal table that I pass has data and it does.

I think the information I put up will suffice but if you really need to see the code, I'll do so.

I'm a noob and any help would be appreciated.

Thanx.

Answer

PATRY Guillaume picture PATRY Guillaume · Sep 17, 2010

There are several ways to use ALV, so we may indeed need more info on your code to help.

  • First Method is to use the function module REUSE_ALV_GRID_DISPLAY. This will directly display the table content in the output dynpro. If all you need is a display, then go for it, as this is the simpliest : If the table structure is in the dictionnary, this call can be as simple as the following (this will display all members of the struct as column)

myreport = sy-repid.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
      EXPORTING
          i_callback_program          = myreport
          it_excluding                = exclude_tab
       TABLES
          t_outtab                    = display_data
       EXCEPTIONS
          program_error               = 1
          OTHERS                      = 2.

If the structure is declared in the program, then you have to create a field catalog. the following code can serve as basis :

FORM fill_fieldcat CHANGING p_fieldcat   TYPE slis_t_fieldcat_alv.

* Data definition
  DATA ls_fieldcat  TYPE slis_fieldcat_alv.

* Macro definition
  DEFINE append_fieldcat.
    clear ls_fieldcat.

    ls_fieldcat-fieldname      = &1. * name of the field in struct
    ls_fieldcat-tabname        = &2. * name of the table
    ls_fieldcat-row_pos        = &3. * column
    ls_fieldcat-ref_fieldname  = &4. * field in ref table
    ls_fieldcat-ref_tabname    = &5. * ref table
    ls_fieldcat-outputlen      = &6. * size of output
    ls_fieldcat-seltext_m      = &7. * text (space if using the element typetext)
    ls_fieldcat-ddictxt        = 'M'.
    ls_fieldcat-key            = &8.  * is this a key field in table
    ls_fieldcat-emphasize      = &9.  * emphisze  column display

    append ls_fieldcat to p_fieldcat.
  END-OF-DEFINITION.

* Init.
  REFRESH p_fieldcat.

* Append fielcatalog for ALV
  append_fieldcat:
  'FORMATIONCODE' 'DISPLAY_TAB' 1 'SHORT' 'HRP1000' 12    'Code Stage'     space space,
  'FORMATIONTEXT' 'DISPLAY_TAB' 1 'STEXT' 'HRP1000' 20    'Libelle Stage'  space space,
  'SESSIONID'     'DISPLAY_TAB' 1 'OBJID' 'HRP1000' space 'Session'        space space,
  'BEGDA'         'DISPLAY_TAB' 1 'BEGDA' 'HRP1000' space 'Debut'          space space,
  'ENDDA'         'DISPLAY_TAB' 1 'BEGDA' 'HRP1000' space 'Fin'            space space,
ENDFORM.                    "fill_fieldCat

you then call the form to create the field catalog, and use it in the it_fieldcat parameter of the function call.

  • Second method is to use ABAP-Object. Use check se83 for exemples of this use. the basis is as follows :

In your Dynpro you declare a custom container with a given name ("ALV_CONT"). Then in then PBO of the dynpro you initialize the container and put an ALV objct inside :

* global variables :
DATA : delegationlist_table     TYPE REF TO cl_gui_alv_grid,
       delegationlist_container TYPE REF TO cl_gui_custom_container.
data : gs_layout   TYPE lvc_s_layo.

in PBO

  IF delegationlist_container IS INITIAL.
*   create a custom container control for our ALV Control
    CREATE OBJECT delegationlist_container
      EXPORTING
        container_name              = 'ALV_CONT'
      EXCEPTIONS
        cntl_error                  = 1
        cntl_system_error           = 2
        create_error                = 3
        lifetime_error              = 4
        lifetime_dynpro_dynpro_link = 5.

*   create an instance of alv control
    CREATE OBJECT delegationlist_table
      EXPORTING
        i_parent = delegationlist_container.

*   Set a titlebar for the grid control
    gs_layout-grid_title = 'Délégations'.
    gs_layout-sel_mode = 'A'.
    gs_layout-cwidth_opt ='X'.

*   set table as data source
*   the struct name *must* be uppercase
*   the table must have this struc
    CALL METHOD delegationlist_table->set_table_for_first_display
      EXPORTING
        i_structure_name = 'ZPRT_DELEGATIONLIST'
        is_layout        = gs_layout
      CHANGING
        it_outtab        = delegationlist.

  ENDIF.

Hopes this help,
Regards

Guillaume PATRY