Quantcast
Channel: SCN: Message List
Viewing all articles
Browse latest Browse all 8372

Re: How to write a dynamic ALV report?

$
0
0

hello

 

I send you a report code recently i developed all dynamic of uploading the condition records to vk11

 

Here is the code snippet

 

 

 

*&---------------------------------------------------------------------*

*&  Include           ZSD_FIYAT_AKTARIM_DINAMIK_CL4

*&---------------------------------------------------------------------*

 

**Exception class

CLASS LCX_APPLICATION_ERROR DEFINITION

   INHERITING FROM CX_STATIC_CHECK.

ENDCLASS.

 

*CLASS LCL_HANDLE_EVENTS DEFINITION.

*  PUBLIC SECTION.

*    METHODS:

*      ON_ADDED_FUNCTION FOR EVENT ADDED_FUNCTION OF CL_SALV_EVENTS_TABLE

*        IMPORTING E_SALV_FUNCTION.

*ENDCLASS.                    "lcl_handle_events DEFINITION

*

*DATA GO_EVENTSL TYPE REF TO LCL_HANDLE_EVENTS.

*

**---------------------------------------------------------------------*

**       CLASS lcl_handle_events IMPLEMENTATION

**---------------------------------------------------------------------*

**

**---------------------------------------------------------------------*

*CLASS LCL_HANDLE_EVENTS IMPLEMENTATION.

*

*  METHOD ON_ADDED_FUNCTION.

*

*  ENDMETHOD.                    "on_added_function

*

*ENDCLASS.                    "lcl_handle_events IMPLEMENTATION

 

 

CLASS LCL_ALV DEFINITION CREATE PUBLIC.

   PUBLIC SECTION.

     CONSTANTS: C_GREEN  TYPE ICON-ID VALUE '@08@',

              C_YELLOW TYPE ICON-ID VALUE '@09@',

              C_RED    TYPE ICON-ID VALUE '@0A@'.

 

     DATA: GR_TABLE     TYPE REF TO CL_SALV_TABLE,

       GR_CONTAINER TYPE REF TO CL_GUI_CUSTOM_CONTAINER,

       GO_EVENTS   TYPE REF TO CL_SALV_EVENTS_TABLE,

       GO_FUNCTIONS TYPE REF TO CL_SALV_FUNCTIONS,

       GO_GRDSETT   TYPE REF TO CL_SALV_DISPLAY_SETTINGS,

       GO_FUNCTIONAL_SETTINGS  TYPE REF TO CL_SALV_FUNCTIONAL_SETTINGS,

       GO_TOOLTIPS             TYPE REF TO CL_SALV_TOOLTIPS,

       GO_COLUMNS              TYPE REF TO CL_SALV_COLUMNS

       .

     METHODS: CONSTRUCTOR.

     CLASS-METHODS: FREE.

     METHODS: GENERATE_ALV.

     METHODS: REFRESH_ALV.

     METHODS: CHECK_IF_NEED_REPROCESS.

     METHODS: POP_UP_REPROCESS RETURNING VALUE(RV_REPROCESS_FLAG) TYPE FLAG.

     METHODS: SET_SCREEN_POPUP CHANGING IT_TABLE TYPE ANY TABLE.

   PRIVATE SECTION.

     DATA: LO_MANAGER_OBJ TYPE REF TO LCL_MANAGER.

ENDCLASS.

 

CLASS LCL_ALV IMPLEMENTATION.

   METHOD CONSTRUCTOR.

 

     FIELD-SYMBOLS: <OUTPUT_TABLE> TYPE ANY TABLE.

 

**Create the object

     LO_MANAGER_OBJ = LCL_MANAGER=>GET_INSTANCE( ).

 

   ENDMETHOD.

   METHOD FREE.

*   free: gr_container, gr_table.

   ENDMETHOD.

   METHOD GENERATE_ALV.

     DATA:LO_COLUMN    TYPE REF TO CL_SALV_COLUMN_TABLE,

          LV_VALUE     TYPE LVC_VALUE.

     FIELD-SYMBOLS: <OUTPUT_TABLE> TYPE ANY TABLE.

 

     BREAK NILUFERA.

     INCLUDE: <ICON>.

 

     CHECK LO_MANAGER_OBJ IS BOUND.

 

**Get the output table

     ASSIGN LO_MANAGER_OBJ->LT_DYNAMIC_DREF_TAB->* TO <OUTPUT_TABLE>.

 

 

     IF GR_CONTAINER IS NOT BOUND.

 

* initial

       IF CL_SALV_TABLE=>IS_OFFLINE( ) EQ IF_SALV_C_BOOL_SAP=>FALSE.

         CREATE OBJECT GR_CONTAINER

           EXPORTING

             CONTAINER_NAME = 'CONTAINER'.

       ENDIF.

 

 

       TRY.

           CL_SALV_TABLE=>FACTORY(

             EXPORTING

               R_CONTAINER    = GR_CONTAINER

               CONTAINER_NAME = 'CONTAINER'

             IMPORTING

               R_SALV_TABLE   = GR_TABLE

             CHANGING

               T_TABLE        = <OUTPUT_TABLE> ).

         CATCH CX_SALV_MSG.

       ENDTRY.

 

* Functions

       GO_FUNCTIONS = GR_TABLE->GET_FUNCTIONS( ).

       GO_FUNCTIONS->SET_ALL( ABAP_TRUE ).

 

*... set the columns

       GO_COLUMNS = GR_TABLE->GET_COLUMNS( ).

       "lo_columns->set_optimize( abap_true ).

       TRY.

           LO_COLUMN ?= GO_COLUMNS->GET_COLUMN( 'ICON_D' ).

           LO_COLUMN->SET_ICON( IF_SALV_C_BOOL_SAP=>TRUE ).

           LO_COLUMN->SET_LONG_TEXT( 'Statü' ).

           LO_COLUMN->SET_ALIGNMENT( IF_SALV_C_ALIGNMENT=>CENTERED ).

           LO_COLUMN->SET_OUTPUT_LENGTH( 20 ).

         CATCH CX_SALV_NOT_FOUND.                        "#EC NO_HANDLER

       ENDTRY.

 

 

*...Tooltips

       GO_FUNCTIONAL_SETTINGS = GR_TABLE->GET_FUNCTIONAL_SETTINGS( ).

       GO_TOOLTIPS = GO_FUNCTIONAL_SETTINGS->GET_TOOLTIPS( ).

       TRY.

           LV_VALUE = ICON_GREEN_LIGHT.

           GO_TOOLTIPS->ADD_TOOLTIP(

             TYPE    = CL_SALV_TOOLTIP=>C_TYPE_ICON

             VALUE   = LV_VALUE

             TOOLTIP = TEXT-001 ).                           "#EC NOTEXT

         CATCH CX_SALV_EXISTING.                         "#EC NO_HANDLER

       ENDTRY.

       TRY.

           LV_VALUE = ICON_YELLOW_LIGHT.

           GO_TOOLTIPS->ADD_TOOLTIP(

             TYPE    = CL_SALV_TOOLTIP=>C_TYPE_ICON

             VALUE   = LV_VALUE

             TOOLTIP = TEXT-002 ).                           "#EC NOTEXT

         CATCH CX_SALV_EXISTING.                         "#EC NO_HANDLER

       ENDTRY.

       TRY.

           LV_VALUE = ICON_RED_LIGHT.

           GO_TOOLTIPS->ADD_TOOLTIP(

             TYPE    = CL_SALV_TOOLTIP=>C_TYPE_ICON

             VALUE   = LV_VALUE

             TOOLTIP = TEXT-003 ).                           "#EC NOTEXT

         CATCH CX_SALV_EXISTING.                         "#EC NO_HANDLER

       ENDTRY.

 

*    TRY.

*        CALL METHOD GO_FUNCTIONS->ADD_FUNCTION

*          EXPORTING

*            NAME     = 'REPROCESS'

*            ICON     = '@01@'

*            TEXT     = 'Yeniden İşle'

*            TOOLTIP  = 'Yeniden İşle'

*            POSITION = IF_SALV_C_FUNCTION_POSITION=>RIGHT_OF_SALV_FUNCTIONS.

*      CATCH CX_SALV_WRONG_CALL CX_SALV_EXISTING.

*    ENDTRY.

*

 

*

** events

*

*    GO_EVENTSG = GR_TABLE->GET_EVENT( ).

*

*    CREATE OBJECT GO_EVENTSL.

*

*    SET HANDLER GO_EVENTSL->ON_ADDED_FUNCTION FOR GO_EVENTSG.

 

* alv grid setting

       GO_GRDSETT = GR_TABLE->GET_DISPLAY_SETTINGS( ).

 

**if there is any error

       GO_GRDSETT->SET_LIST_HEADER( 'Fiyat Aktarma Logları!!' ).

 

       GR_TABLE->DISPLAY( ).

 

     ENDIF.

 

 

 

 

   ENDMETHOD.                    "generate_alv

   METHOD REFRESH_ALV.

     CHECK GR_TABLE IS BOUND.

     GR_TABLE->REFRESH( ).

   ENDMETHOD.

 

   METHOD SET_SCREEN_POPUP.

     BREAK NILUFERA.

     DATA: O_POPUP_ALV TYPE REF TO CL_SALV_TABLE.

     DATA: LO_FUNCTIONS TYPE REF TO CL_SALV_FUNCTIONS_LIST.

 

 

* ALV Object

     TRY.

         CL_SALV_TABLE=>FACTORY(

           IMPORTING

             R_SALV_TABLE = O_POPUP_ALV

           CHANGING

             T_TABLE      = IT_TABLE ).

       CATCH CX_SALV_MSG.                                "#EC NO_HANDLER

     ENDTRY.

 

* Functions

     LO_FUNCTIONS = O_POPUP_ALV->GET_FUNCTIONS( ).

     LO_FUNCTIONS->SET_ALL( ABAP_TRUE ).

 

 

     LO_FUNCTIONS->SET_DEFAULT( 'X' ).

*

* ALV as Popup

     O_POPUP_ALV->SET_SCREEN_POPUP(

       START_COLUMN = 80

       END_COLUMN   = 140

       START_LINE   = 3

       END_LINE     = 10 ).

 

* Display

     O_POPUP_ALV->DISPLAY( ).

 

 

   ENDMETHOD.

 

   METHOD CHECK_IF_NEED_REPROCESS.

     DATA: LT_NEW_DYNAMIC_DREF_TAB TYPE REF TO DATA,

           LS_NEW_DYNAMIC_DREF_LINE TYPE REF TO DATA.

 

     FIELD-SYMBOLS: <OUTPUT_TABLE> TYPE ANY TABLE,

                    <LFS_NEW_OUTPUT> TYPE ANY TABLE,

                    <LFS_NEW_LINE> TYPE ANY,

                    <LFS_LINE> TYPE ANY,

                    <LFS_ANY> TYPE ANY.

 

**Create the object

     BREAK NILUFERA.

 

 

**Display to be rereprocessed

     IF  POP_UP_REPROCESS( ) EQ ABAP_TRUE.

 

       CHECK LO_MANAGER_OBJ IS BOUND.

 

**Get the output table

       ASSIGN LO_MANAGER_OBJ->LT_DYNAMIC_DREF_TAB->* TO <OUTPUT_TABLE>.

 

**New output and line!!

**Generate new components!!

       CALL METHOD LO_MANAGER_OBJ->GENERATE_DYNAMIC_TABLE

         IMPORTING

           ET_DYNAMIC_DREF_TAB  = LT_NEW_DYNAMIC_DREF_TAB

           ES_DYNAMIC_DREF_LINE = LS_NEW_DYNAMIC_DREF_LINE.

 

 

       ASSIGN LT_NEW_DYNAMIC_DREF_TAB->* TO <LFS_NEW_OUTPUT>.

 

 

       LOOP AT <OUTPUT_TABLE> ASSIGNING <LFS_LINE>.

*is there any yello flag for overlap

         ASSIGN COMPONENT 'ICON_D' OF STRUCTURE <LFS_LINE> TO <LFS_ANY>.

         IF SY-SUBRC EQ 0 AND  <LFS_ANY> NE C_GREEN.

           ASSIGN COMPONENT 'BAPI_MSG' OF STRUCTURE <LFS_LINE> TO <LFS_ANY>.

           IF SY-SUBRC EQ 0 AND <LFS_ANY> IS NOT INITIAL.

             CLEAR <LFS_ANY>.

             INSERT <LFS_LINE> INTO TABLE <LFS_NEW_OUTPUT>.

           ENDIF.

         ENDIF.

       ENDLOOP.

 

***Update again

       CALL METHOD LO_MANAGER_OBJ->UPDATE_CONDITIONS

         EXPORTING

           IT_COMPONENTS    = LO_MANAGER_OBJ->LT_COMPONENTS

           IS_T685          = LO_MANAGER_OBJ->LS_T685

           IV_OVERRIDE_FLAG = 'X'

         CHANGING

           IT_DYNAMIC_TAB   = <LFS_NEW_OUTPUT>.

**Assign here

       <OUTPUT_TABLE> <LFS_NEW_OUTPUT>.

****Log here

       LO_MANAGER_OBJ->UPDATE_ZSD716_LOG_TABLE( ).

     ENDIF.

 

*** Call refresh here!!

     CALL METHOD REFRESH_ALV( ).

 

   ENDMETHOD.

 

   METHOD POP_UP_REPROCESS.

     DATA: LV_ANSWER.

     CALL FUNCTION 'POPUP_TO_CONFIRM'

       EXPORTING

         TITLEBAR              = 'Örtüşen Kayıtlar var!!'

         TEXT_QUESTION         = 'Yeniden İşlensinmi?'

         TEXT_BUTTON_1         = 'Yes'

         TEXT_BUTTON_2         = 'No'

         DEFAULT_BUTTON        = '2'

         DISPLAY_CANCEL_BUTTON = 'X'

         START_COLUMN          = 25

         START_ROW             = 6

       IMPORTING

         ANSWER                = LV_ANSWER.

     IF LV_ANSWER = '1'.

       RV_REPROCESS_FLAG = 'X'.

     ELSE.

       RV_REPROCESS_FLAG = ''.

     ENDIF.

   ENDMETHOD.

 

ENDCLASS.


Viewing all articles
Browse latest Browse all 8372

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>