Skip to Content
author's profile photo Former Member
Former Member

regarding ALV OOPs

I am using ALV OOPs. I defined PF status. I am getting output. But the problem is Application tool bar buttons are not working. can anybody send sample code or suggest where exactly I need to pass this.

Regards,

naseer.

Add a comment
10|10000 characters needed characters exceeded

Assigned Tags

Related questions

3 Answers

  • author's profile photo Former Member
    Former Member
    Posted on Dec 04, 2007 at 07:42 AM

    Hi Naseer,

    For this you have to use events concepts.

    Here is the code..It will surely work out.

    Sample programs on ALV Grid

    report zbnstest.

  • TABLES AND DATA DECLARATION.

    *TABLES: mara,makt.",marc.

    data syrepid like sy-repid.

    data sydatum(10). " LIKE sy-datum.

    data sypagno(3) type n.

    • WHEN USING MORE THAN ONE TABLE IN ALV WE NEEED TO DECLARE THE TYPE

    • GROUP (TYPE-POOLS--------->SLIS)

    type-pools : slis.

  • INTERNAL TABLE DECLARATION.

  • INTERNAL TABLE TO HOLD THE VALUES FROM THE MARA TABLE

  • data: begin of t_mara occurs 0,

    matnr like mara-matnr,

    meins like mara-meins,

    mtart like mara-mtart,

    matkl like mara-matkl,

    end of t_mara.

    • INTERNAL TABLE TO HOLD THE CONTENTS FROM THE EKKO TABLE

    data : begin of t_marc occurs 0,

    matnr like mara-matnr,

    werks like marc-werks,

    minbe like marc-minbe.

    data: end of t_marc.

    • INTERNAL TABLE TO HOLD THE VALUES FROM MAKT TABLE.

    data : begin of t_makt occurs 0,

    matnr like mara-matnr,

    maktx like makt-maktx,

    spras like makt-spras,

    end of t_makt.

    • INTERNAL TABLE WHICH ACTUALLY MERGES ALL THE OTHER INTERNAL TABLES.

    data: begin of itab1 occurs 0,

    matnr like mara-matnr,

    meins like mara-meins,

    maktx like makt-maktx,

    spras like makt-spras,

    werks like marc-werks,

    minbe like marc-minbe,

    end of itab1.

    • THE FOLLOWING DECLARATION IS USED FOR DEFINING THE FIELDCAT

    • AND THE LAYOUT FOR THE ALV.

    • HERE AS slis_t_fieldcat_alv IS A INTERNAL TABLE WITHOUT A HEADER LINE

    • WE EXPLICITELY DEFINE AN INTERNAL TABLE OF THE SAME STRUCTURE AS THAT

    • OF slis_t_fieldcat_alv BUT WITH A HEADER LINE IN THE DEFINITION.

    • THIS IS DONE TO MAKE THE CODE SIMPLER.

    • OTHERWISE WE MAY HAVE TO DEFINE THE STRUCTURE AS IN THE NORMAL SAP

    • PROGRAMS.

    • IN THE FIELDCATALOG TABLE WE ACTUALLY PASS THE FIELDS FROM ONE OR

    • MORE TABLES AND CREATE A STRUCTURE

    • IN THE LAYOUT STRUCTURE WE BASICALLY DEFINE THE FORMATTING OPTIONS

    • LIKE DISPLAY IN THE ZEBRA PATTERN ,THE HOTSPOT OPTIONS ETC.

    data: fieldcatalog type slis_t_fieldcat_alv with header line,

    fieldlayout type slis_layout_alv.

    • DECLARING THE EVENTTABLE INTERNL TABLE FOR USING EVENTS LIKE

    • TOP-OF-PAGE ETC.

    data : eventstab type slis_t_event with header line.

    • DECLARING AN INTERNAL TABLE TO HOLD THE DATA FOR THE TOP-OF-PAGE

    data : heading type slis_t_listheader with header line.

    data : heading1 type slis_t_listheader with header line.

    data : heading2 type slis_t_listheader with header line.

    data : heading3 type slis_t_listheader with header line.

    data : heading4 type slis_t_listheader with header line.

    data : heading5 type slis_t_listheader with header line.

    data : heading6 type slis_t_listheader with header line.

    data : heading7 type slis_t_listheader with header line.

    data : heading8 type slis_t_listheader with header line.

    • STRUCTURE TO PASS THE COLOR ATTRIBUTES FOR DISPLAY.

    data : colorstruct type slis_coltypes.

  • INITIALIZATION. *

    initialization.

    syrepid = sy-repid.

    sypagno = sy-pagno.

    clear fieldcatalog.

  • START-OF-SELECTION. *

    start-of-selection.

    • SUBROUTINE TO POPULATE THE COLORSTRUCT

    perform fill_colorstruct using colorstruct.

    • SUBROUTINE TO POPULATE THE FIELDS OF THE FIELD CATALOGUE

    perform populate_fieldcatalog.

    • SUBROUTINE TO SELECT DATA FROM VARIOUS TABLES AND POPULATE IT IN THE

    • INTERNAL TABLE.

    perform selectdata_and_sort.

    • SUBROUTINE TO POPULATE THE LAYOUT STRUCTURE.

    perform populate_layout using fieldlayout.

    • SUBROUTINE TO CALL THE FUNCTION MERGE TO ENSURE PROPER DISPLAY.

    perform merge_fieldcatalog.

    • SUBROUTINE TO POPULATE THE EVENTSTAB.

    perform fill_eventstab tables eventstab.

    • SUBROUTINE TO POPULATE THE HEADING TABLES.

    perform fill_headingtable tables heading using 'HEADING'.

    perform fill_headingtable tables heading1 using 'HEADING1'.

    perform fill_headingtable tables heading2 using 'HEADING2'.

    perform fill_headingtable tables heading3 using 'HEADING3'.

    perform fill_headingtable tables heading4 using 'HEADING4'.

    perform fill_headingtable tables heading5 using 'HEADING5'.

    perform fill_headingtable tables heading6 using 'HEADING6'.

    perform fill_headingtable tables heading7 using 'HEADING7'.

    perform fill_headingtable tables heading8 using 'HEADING8'.

    • SUBROUTINE TO DISPLAY THE LIST.

    perform display_alv_list.

  • FORMS

  • IN THIS SUBROUTINE WE POPULATE THE FIELDCATALOG TABLE WITH THE NAMES

  • OF THE TABLE,FIELDNAME,WHETHER IT IS KEY FIELD OR NOT,HEADING AND

  • COLUMN JUSTIFICATION.

  • form populate_fieldcatalog.

    perform fill_fields_of_fieldcatalog tables fieldcatalog

    using 'ITAB1' 'MATNR' 'X' .

    perform fill_fields_of_fieldcatalog tables fieldcatalog

    using 'ITAB1' 'MEINS' ' '.

    perform fill_fields_of_fieldcatalog tables fieldcatalog

    using 'ITAB1' 'MAKTX' ' ' .

    perform fill_fields_of_fieldcatalog tables fieldcatalog

    using 'ITAB1' 'MTART' ' ' .

    perform fill_fields_of_fieldcatalog tables fieldcatalog

    using 'ITAB1' 'MATKL' ' ' .

    perform fill_fields_of_fieldcatalog tables fieldcatalog

    using 'ITAB1' 'SPRAS' ' ' .

    perform fill_fields_of_fieldcatalog tables fieldcatalog

    using 'ITAB1' 'WERKS' ' ' .

    perform fill_fields_of_fieldcatalog tables fieldcatalog

    using 'ITAB1' 'MINBE' ' ' .

    endform. " POPULATE_FIELDCATALOG

    ----


    • FORM FILL_FIELDS_OF_FIELDCATALOG *

    ----


    • ........ *

    ----


    • --> FIELDCATALOG *

    • --> P_TABNAME *

    • --> P_FIELDNAME *

    • --> P_KEY *

    • --> P_KEY *

    ----


    form fill_fields_of_fieldcatalog tables fieldcatalog

    structure fieldcatalog

    using p_tabname

    p_fieldname

    p_key.

    • p_no_out.

    fieldcatalog-tabname = p_tabname.

    fieldcatalog-fieldname = p_fieldname.

    fieldcatalog-key = p_key.

    fieldcatalog-emphasize = '1234'.

    *fieldcatalog-no_out = p_no_out.

    append fieldcatalog.

    endform. " FILL_FIELDSOFFIELDCATALOG

    ----


    • FORM POPULATE_LAYOUT *

    ----


    • ........ *

    ----


    • --> FIELDLAYOUT *

    ----


    form populate_layout using fieldlayout type slis_layout_alv.

    fieldlayout-f2code = '&ETA' .

    fieldlayout-zebra = 'X'.

    • FOR THE WINDOW TITLE.

    fieldlayout-window_titlebar = 'ALV with Events'.

    fieldlayout-colwidth_optimize = 'X'.

    fieldlayout-no_vline = ' '.

    *fieldlayout-no_input = 'X'.

    fieldlayout-confirmation_prompt = ''.

    fieldlayout-key_hotspot = 'X'.

    • This removes the column headings if the flag is set to 'X'

    fieldlayout-no_colhead = ' '.

    *fieldlayout-hotspot_fieldname = 'MAKTX'.

    fieldlayout-detail_popup = 'X'.

    • fieldlayout-coltab_fieldname = 'X'.

    endform. " POPULATE_LAYOUT

    ----


    • FORM SELECTDATA_AND_SORT *

    ----


    • ........ *

    ----


    form selectdata_and_sort.

    select matnr meins mtart matkl from mara

    into corresponding fields of t_mara

    up to 500 rows .

    select matnr maktx spras from makt

    into corresponding fields of t_makt

    where matnr = t_mara-matnr and

    spras = sy-langu.

    select matnr werks minbe from marc

    into corresponding fields of t_marc

    where matnr = t_mara-matnr.

    append t_marc.

    endselect.

    append t_makt.

    endselect.

    append t_mara.

    endselect.

    perform populate_itab1.

    sort itab1 by matnr.

    endform. " SELECTDATA_AND_SORT

    ----


    • FORM MERGE_FIELDCATALOG *

    ----


    • ........ *

    ----


    form merge_fieldcatalog.

    call function 'REUSE_ALV_FIELDCATALOG_MERGE'

    exporting

    i_program_name = syrepid

    i_internal_tabname = 'ITAB1'

    • i_structure_name = 'COLORSTRUCT'

    • I_CLIENT_NEVER_DISPLAY = 'X'

    i_inclname = syrepid

    changing

    ct_fieldcat = fieldcatalog[]

    exceptions

    inconsistent_interface = 1

    program_error = 2

    others = 3.

    endform. " MERGE_FIELDCATALOG

    • IN THIS FUNCTION THE MINIMUM PARAMETERS THAT WE NEED TO PASS IS AS

    • FOLLOWS:-

    • i_callback_program --> CALLING PROGRAM NAME

    • i_structure_name --> STRUCTURE NAME.

    • is_layout --> LAYOUT NAME.

    • it_fieldcat ---> BODY OF THE FIELD CATALOGUE INTERNAL TABLE

    form display_alv_list.

    call function 'REUSE_ALV_LIST_DISPLAY'

    exporting

    • I_INTERFACE_CHECK = ' '

    i_callback_program = syrepid

    • I_CALLBACK_PF_STATUS_SET = ' '

    • I_CALLBACK_USER_COMMAND = ' '

    i_structure_name = 'ITAB1'

    is_layout = fieldlayout

    it_fieldcat = fieldcatalog[]

    • IT_EXCLUDING =

    • IT_SPECIAL_GROUPS =

    • IT_SORT =

    • IT_FILTER =

    • IS_SEL_HIDE =

    • I_DEFAULT = 'X'

    • THE FOLLOWING PARAMETER IS SET AS 'A' INORDER TO DISPLAY THE STANDARD

    • TOOL BAR

    i_save = 'A'

    • IS_VARIANT = ' '

    it_events = eventstab[]

    • IT_EVENT_EXIT =

    • IS_PRINT =

    • I_SCREEN_START_COLUMN = 0

    • I_SCREEN_START_LINE = 0

    • I_SCREEN_END_COLUMN = 0

    • I_SCREEN_END_LINE = 0

    • IMPORTING

    • E_EXIT_CAUSED_BY_CALLER =

    • ES_EXIT_CAUSED_BY_USER =

    tables

    t_outtab = itab1

    exceptions

    program_error = 1

    others = 2.

    endform. " DISPLAY_ALV_LIST

    &----


    *& Form POPULATE_ITAB1

    &----


    • text

    ----


    • --> p1 text

    • <-- p2 text

    ----


    form populate_itab1.

    loop at t_mara.

    loop at t_makt where matnr = t_mara-matnr.

    loop at t_marc where matnr = t_mara-matnr.

    move-corresponding t_mara to itab1.

    move-corresponding t_makt to itab1.

    move-corresponding t_marc to itab1.

    append itab1.

    endloop.

    endloop.

    endloop.

    endform. " POPULATE_ITAB1

    &----


    *& Form FILL_EVENTSTAB

    &----


    • text

    ----


    • -->P_EVENTSTAB text *

    ----


    form fill_eventstab tables p_eventstab structure eventstab.

    • WHEN THE FOLLOWING FUNCTION IS CALLED THE SYSTEM POPULATES THE

    • INTERNAL TABLE EVENTSTAB WITH A LIST OF EVENTS NAME.

    • AS SHOWN BELOW WHEN USING I_LIST_TYPE = 0 THE FUNCTION RETURNS 14

    • EVENTS NAME.

    call function 'REUSE_ALV_EVENTS_GET'

    exporting

    i_list_type = 0

    importing

    et_events = p_eventstab[]

    exceptions

    list_type_wrong = 1

    others = 2.

    • BY CALLING THE ABOVE FUNCTION WE FIRST POPULATE THE EVENTSTAB WITH

    • THE PREDEFINED EVENTS AND THEN WE MOVE THE FORM NAME AS SHOWN BELOW.

    • WE ASSIGN A FORM NAME TO THE EVENT AS REQUIRED BY THE USER.

    • FORM NAME CAN BE ANYTHING.THE PERFORM STATEMENT FOR THIS FORM

    • IS DYNAMICALY CALLED.

    read table p_eventstab with key name = slis_ev_top_of_page.

    if sy-subrc = 0 .

    move 'TOP_OF_PAGE' to p_eventstab-form.

    append p_eventstab.

    endif.

    read table p_eventstab with key name = slis_ev_top_of_coverpage.

    if sy-subrc = 0 .

    move 'TOP_OF_COVERPAGE' to p_eventstab-form.

    append p_eventstab.

    endif.

    read table p_eventstab with key name = slis_ev_end_of_coverpage .

    if sy-subrc = 0 .

    move 'END_OF_COVERPAGE' to p_eventstab-form.

    append p_eventstab.

    endif.

    read table p_eventstab with key name = slis_ev_foreign_top_of_page.

    if sy-subrc = 0 .

    move 'FOREIGN_TOP_OF_PAGE' to p_eventstab-form.

    append p_eventstab.

    endif.

    read table p_eventstab with key name = slis_ev_foreign_end_of_page.

    if sy-subrc = 0 .

    move 'FOREIGN_END_OF_PAGE' to p_eventstab-form.

    append p_eventstab.

    endif.

    read table p_eventstab with key name = slis_ev_list_modify.

    if sy-subrc = 0 .

    move 'LIST_MODIFY' to p_eventstab-form.

    append p_eventstab.

    endif.

    read table p_eventstab with key name = slis_ev_top_of_list.

    if sy-subrc = 0 .

    move 'TOP_OF_LIST' to p_eventstab-form.

    append p_eventstab.

    endif.

    read table p_eventstab with key name = slis_ev_end_of_page.

    if sy-subrc = 0 .

    move 'END_OF_PAGE' to p_eventstab-form.

    append p_eventstab.

    endif.

    read table p_eventstab with key name = slis_ev_end_of_list .

    if sy-subrc = 0 .

    move 'END_OF_LIST' to p_eventstab-form.

    append p_eventstab.

    endif.

    endform. " FILL_EVENTSTAB

    &----


    *& Form FILL_HEADINGTABLE

    &----


    • text

    ----


    • -->P_HEADING text *

    ----


    form fill_headingtable tables p_heading structure heading

    using tablename.

    case tablename.

    when 'HEADING'.

    p_heading-typ = 'H'.

    concatenate

    ' REPORT NAME:-' syrepid

    ' ABB Industry Pte Ltd' into p_heading-info.

    append p_heading.

    write sy-datum using edit mask '__/__/____' to sydatum.

    concatenate

    ' DATE:-' sydatum ' USER: ' sy-uname 'PAGE NO:' sypagno

    into p_heading-info.

    append p_heading.

    when 'HEADING1'.

    p_heading-typ = 'H'.

    p_heading-info = 'TOP-OF-COVER-PAGE'.

    append p_heading.

    when 'HEADING2'.

    p_heading-typ = 'H'.

    p_heading-info = 'END-OF-COVER-PAGE'.

    append p_heading.

    when 'HEADING3'.

    p_heading-typ = 'H'.

    p_heading-info = 'FOREIGN-TOP-OF-PAGE'.

    append p_heading.

    when 'HEADING4'.

    p_heading-typ = 'H'.

    p_heading-info = 'FOREIGN-END-OF-PAGE'.

    append p_heading.

    • WHEN 'HEADING5'.

    • P_HEADING-TYP = 'H'.

    • P_HEADING-INFO = 'LIST-MODIFY'.

    • APPEND P_HEADING.

    when 'HEADING6'.

    p_heading-typ = 'H'.

    p_heading-info = 'END-OF-PAGE'.

    append p_heading.

    when 'HEADING7'.

    p_heading-typ = 'H'.

    p_heading-info = 'END-OF-LIST'.

    append p_heading.

    when 'HEADING8'.

    p_heading-typ = 'H'.

    p_heading-info = 'TOP-OF-LIST'.

    append p_heading.

    endcase.

    endform. " FILL_HEADINGTABLE

    ----


    • FORM TOP_OF_PAGE *

    ----


    • ........ *

    ----


    form top_of_page.

    call function 'REUSE_ALV_COMMENTARY_WRITE'

    exporting

    it_list_commentary = heading[]

    exceptions

    others = 1.

    endform.

    &----


    *& Form FILL_COLORSTRUCT

    &----


    • text

    ----


    • -->P_COLORSTRUCT text *

    ----


    form fill_colorstruct using p_colorstruct type slis_coltypes .

    p_colorstruct-heacolfir-col = 6.

    p_colorstruct-heacolfir-int = 1.

    p_colorstruct-heacolfir-inv = 1.

    endform. " FILL_COLORSTRUCT

    ----


    • FORM TOP_OF_COVERPAGE *

    ----


    • ........ *

    ----


    form top_of_coverpage.

    call function 'REUSE_ALV_COMMENTARY_WRITE'

    exporting

    it_list_commentary = heading1[]

    exceptions

    others = 1.

    endform.

    ----


    • FORM END_OF_COVERPAGE *

    ----


    • ........ *

    ----


    form end_of_coverpage.

    call function 'REUSE_ALV_COMMENTARY_WRITE'

    exporting

    it_list_commentary = heading2[]

    exceptions

    others = 1.

    endform.

    ----


    • FORM FOREIGN_TOP_OF_PAGE *

    ----


    • ........ *

    ----


    form foreign_top_of_page.

    call function 'REUSE_ALV_COMMENTARY_WRITE'

    exporting

    it_list_commentary = heading3[]

    exceptions

    others = 1.

    endform.

    ----


    • FORM FOREIGN_END_OF_PAGE *

    ----


    • ........ *

    ----


    form foreign_end_of_page.

    call function 'REUSE_ALV_COMMENTARY_WRITE'

    exporting

    it_list_commentary = heading4[]

    exceptions

    others = 1.

    endform.

    ----


    • FORM LIST_MODIFY *

    ----


    • ........ *

    ----


    *FORM LIST_MODIFY.

    • CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE'

    • EXPORTING

    • IT_LIST_COMMENTARY = HEADING5[]

    • EXCEPTIONS

    • OTHERS = 1.

    *ENDFORM.

    ----


    • FORM END_OF_PAGE *

    ----


    • ........ *

    ----


    form end_of_page.

    call function 'REUSE_ALV_COMMENTARY_WRITE'

    exporting

    it_list_commentary = heading6[]

    exceptions

    others = 1.

    endform.

    ----


    • FORM END_OF_LIST *

    ----


    • ........ *

    ----


    form end_of_list.

    call function 'REUSE_ALV_COMMENTARY_WRITE'

    exporting

    it_list_commentary = heading7[]

    exceptions

    others = 1.

    endform.

    ----


    • FORM TOP_OF_LIST *

    ----


    • ........ *

    ----


    form top_of_list.

    call function 'REUSE_ALV_COMMENTARY_WRITE'

    exporting

    it_list_commentary = heading8[]

    exceptions

    others = 1.

    endform.

    *--- End of Program

    If you need any other help in this please let me know.

    Thanks & Regards,

    Dipika

Add a comment
10|10000 characters needed characters exceeded

  • author's profile photo Former Member
    Former Member
    Posted on Dec 04, 2007 at 07:44 AM

    Hi Naseer,

    Check this program for your reference

    REPORT  ZTEST1234_ALV_TOP    MESSAGE-ID ZZ                           .
    DATA: G_GRID TYPE REF TO CL_GUI_ALV_GRID.
    DATA: L_VALID TYPE C,
          V_FLAG,
          V_DATA_CHANGE,
          V_ROW TYPE LVC_S_ROW,
          V_COLUMN TYPE LVC_S_COL,
          V_ROW_NUM TYPE LVC_S_ROID.
    "The Below Definitions Must.....
    DATA:
    * Reference to document
           DG_DYNDOC_ID       TYPE REF TO CL_DD_DOCUMENT,
    * Reference to split container
           DG_SPLITTER          TYPE REF TO CL_GUI_SPLITTER_CONTAINER,
    * Reference to grid container
           DG_PARENT_GRID     TYPE REF TO CL_GUI_CONTAINER,
    * Reference to html container
           DG_HTML_CNTRL        TYPE REF TO CL_GUI_HTML_VIEWER,
    * Reference to html container
           DG_PARENT_HTML     TYPE REF TO CL_GUI_CONTAINER.
    "up to here
    *---------------------------------------------------------------------*
    *       CLASS lcl_event_handler DEFINITION
    *---------------------------------------------------------------------*
    CLASS LCL_EVENT_HANDLER DEFINITION .
      PUBLIC SECTION .
        METHODS:
    **Hot spot Handler
        HANDLE_HOTSPOT_CLICK FOR EVENT HOTSPOT_CLICK OF CL_GUI_ALV_GRID
                          IMPORTING E_ROW_ID E_COLUMN_ID ES_ROW_NO,
    **Double Click Handler
        HANDLE_DOUBLE_CLICK FOR EVENT DOUBLE_CLICK OF CL_GUI_ALV_GRID
                                         IMPORTING E_ROW E_COLUMN ES_ROW_NO,
     
        TOP_OF_PAGE FOR EVENT TOP_OF_PAGE              "event handler
                             OF CL_GUI_ALV_GRID
                             IMPORTING E_DYNDOC_ID.
     
    ENDCLASS.                    "lcl_event_handler DEFINITION
    *---------------------------------------------------------------------*
    *       CLASS lcl_event_handler IMPLEMENTATION
    *---------------------------------------------------------------------*
    CLASS LCL_EVENT_HANDLER IMPLEMENTATION.
    *Handle Hotspot Click
      METHOD HANDLE_HOTSPOT_CLICK .
        CLEAR: V_ROW,V_COLUMN,V_ROW_NUM.
        V_ROW  = E_ROW_ID.
        V_COLUMN = E_COLUMN_ID.
        V_ROW_NUM = ES_ROW_NO.
        MESSAGE I000 WITH V_ROW 'clicked'.
      ENDMETHOD.                    "lcl_event_handler
     
    *Handle Double Click
      METHOD  HANDLE_DOUBLE_CLICK.
     
      ENDMETHOD.                    "handle_double_click
     
      METHOD TOP_OF_PAGE.                   "implementation
    * Top-of-page event
        PERFORM EVENT_TOP_OF_PAGE USING DG_DYNDOC_ID.
      ENDMETHOD.                            "top_of_page
    ENDCLASS.                    "LCL_EVENT_HANDLER IMPLEMENTATION
     
    *&---------------------------------------------------------------------*
    *&             Global Definitions
    *&---------------------------------------------------------------------*
    DATA:      G_CUSTOM_CONTAINER TYPE REF TO CL_GUI_CUSTOM_CONTAINER,"Container1
                G_HANDLER TYPE REF TO LCL_EVENT_HANDLER. "handler
     
    DATA: OK_CODE LIKE SY-UCOMM,
          SAVE_OK LIKE SY-UCOMM,
          G_CONTAINER1 TYPE SCRFNAME VALUE 'TEST',
          GS_LAYOUT TYPE LVC_S_LAYO.
     
     
    *- Fieldcatalog for First and second Report
    DATA: IT_FIELDCAT  TYPE  LVC_T_FCAT,
          X_FIELDCAT TYPE LVC_S_FCAT,
          LS_VARI  TYPE DISVARIANT.
     
    *---------------------------------------------------------------------
    *                START-OF_SELECTION
    *---------------------------------------------------------------------
    START-OF-SELECTION.
      DATA:BEGIN OF  ITAB OCCURS 0,
           VBELN LIKE LIKP-VBELN,
           POSNR LIKE LIPS-POSNR,
           CELLCOLOR TYPE LVC_T_SCOL, "required for color
           DROP(10),
           END OF ITAB.
      SELECT VBELN
             POSNR
             FROM LIPS
             UP TO 20 ROWS
             INTO CORRESPONDING FIELDS OF TABLE ITAB.
     
    END-OF-SELECTION.
      IF NOT ITAB[] IS INITIAL.
        CALL SCREEN 100.
      ELSE.
        MESSAGE I002 WITH 'NO DATA FOR THE SELECTION'(004).
      ENDIF.
    *&---------------------------------------------------------------------*
    *&      Form  CREATE_AND_INIT_ALV
    *&---------------------------------------------------------------------*
    *       text
    *----------------------------------------------------------------------*
    FORM CREATE_AND_INIT_ALV .
      DATA: LT_EXCLUDE TYPE UI_FUNCTIONS.
      "attention.....from here
      "split your container here...into two parts
     
      "create the container
      CREATE OBJECT G_CUSTOM_CONTAINER
               EXPORTING CONTAINER_NAME = G_CONTAINER1.
      "this is for top of page
    * Create TOP-Document
      CREATE OBJECT DG_DYNDOC_ID
                       EXPORTING STYLE = 'ALV_GRID'.
    * Create Splitter for custom_container
      CREATE OBJECT DG_SPLITTER
                 EXPORTING PARENT  = G_CUSTOM_CONTAINER
                           ROWS    = 2
                           COLUMNS = 1.
    * Split the custom_container to two containers and move the reference
    * to receiving containers g_parent_html and g_parent_grid
      "i am allocating the space for grid and top of page
      CALL METHOD DG_SPLITTER->GET_CONTAINER
        EXPORTING
          ROW       = 1
          COLUMN    = 1
        RECEIVING
          CONTAINER = DG_PARENT_HTML.
      CALL METHOD DG_SPLITTER->GET_CONTAINER
        EXPORTING
          ROW       = 2
          COLUMN    = 1
        RECEIVING
          CONTAINER = DG_PARENT_GRID.
     
      "you can set the height of it
    * Set height for g_parent_html
      CALL METHOD DG_SPLITTER->SET_ROW_HEIGHT
        EXPORTING
          ID     = 1
          HEIGHT = 5.
      "from here as usual..you need to specify parent as splitter part
      "which we alloted for grid
      CREATE OBJECT G_GRID
             EXPORTING I_PARENT = DG_PARENT_GRID.
    * Set a titlebar for the grid control
      CLEAR GS_LAYOUT.
      GS_LAYOUT-GRID_TITLE = TEXT-003.
      GS_LAYOUT-ZEBRA = SPACE.
      GS_LAYOUT-CWIDTH_OPT = 'X'.
      GS_LAYOUT-NO_ROWMARK = 'X'.
      GS_LAYOUT-CTAB_FNAME = 'CELLCOLOR'.
      CALL METHOD G_GRID->REGISTER_EDIT_EVENT
        EXPORTING
          I_EVENT_ID = CL_GUI_ALV_GRID=>MC_EVT_ENTER.
     
      CREATE OBJECT G_HANDLER.
      SET HANDLER G_HANDLER->HANDLE_DOUBLE_CLICK FOR G_GRID.
      SET HANDLER G_HANDLER->HANDLE_HOTSPOT_CLICK FOR G_GRID.
      SET HANDLER G_HANDLER->TOP_OF_PAGE FOR G_GRID.
      DATA: LS_CELLCOLOR TYPE LVC_S_SCOL. "required for color
      DATA: L_INDEX TYPE SY-TABIX.
      "Here i am changing the color of line 1,5,10...
      "so you can change the color of font conditionally
      LOOP AT ITAB.
        L_INDEX = SY-TABIX.
        IF L_INDEX = 1 OR L_INDEX = 5 OR L_INDEX = 10.
          LS_CELLCOLOR-FNAME = 'VBELN'.
          LS_CELLCOLOR-COLOR-COL = '6'.
          LS_CELLCOLOR-COLOR-INT = '0'.
          LS_CELLCOLOR-COLOR-INV = '1'.
          APPEND LS_CELLCOLOR TO ITAB-CELLCOLOR.
          MODIFY ITAB INDEX L_INDEX TRANSPORTING CELLCOLOR.
          LS_CELLCOLOR-FNAME = 'POSNR'.
          LS_CELLCOLOR-COLOR-COL = '6'.
          LS_CELLCOLOR-COLOR-INT = '0'.
          LS_CELLCOLOR-COLOR-INV = '1'.
          APPEND LS_CELLCOLOR TO ITAB-CELLCOLOR.
          MODIFY ITAB INDEX L_INDEX TRANSPORTING CELLCOLOR.
        ENDIF.
      ENDLOOP.
     
    * setting focus for created grid control
      CALL METHOD CL_GUI_CONTROL=>SET_FOCUS
        EXPORTING
          CONTROL = G_GRID.
    * Build fieldcat and set editable for date and reason code
    * edit enabled. Assign a handle for the dropdown listbox.
      PERFORM BUILD_FIELDCAT.
      PERFORM  SET_DRDN_TABLE.
    * Optionally restrict generic functions to 'change only'.
    *   (The user shall not be able to add new lines).
      PERFORM EXCLUDE_TB_FUNCTIONS CHANGING LT_EXCLUDE.
    **Vaiant to save the layout
      LS_VARI-REPORT      = SY-REPID.
      LS_VARI-HANDLE      = SPACE.
      LS_VARI-LOG_GROUP   = SPACE.
      LS_VARI-USERNAME    = SPACE.
      LS_VARI-VARIANT     = SPACE.
      LS_VARI-TEXT        = SPACE.
      LS_VARI-DEPENDVARS  = SPACE.
     
    **Calling the Method for ALV output
      CALL METHOD G_GRID->SET_TABLE_FOR_FIRST_DISPLAY
        EXPORTING
          IT_TOOLBAR_EXCLUDING = LT_EXCLUDE
          IS_VARIANT           = LS_VARI
          IS_LAYOUT            = GS_LAYOUT
          I_SAVE               = 'A'
        CHANGING
          IT_FIELDCATALOG      = IT_FIELDCAT
          IT_OUTTAB            = ITAB[].
      "do these..{
    * Initializing document
      CALL METHOD DG_DYNDOC_ID->INITIALIZE_DOCUMENT.
     
    * Processing events
      CALL METHOD G_GRID->LIST_PROCESSING_EVENTS
        EXPORTING
          I_EVENT_NAME = 'TOP_OF_PAGE'
          I_DYNDOC_ID  = DG_DYNDOC_ID.
      "end }
    * Set editable cells to ready for input initially
      CALL METHOD G_GRID->SET_READY_FOR_INPUT
        EXPORTING
          I_READY_FOR_INPUT = 1.
     
    ENDFORM.                               "CREATE_AND_INIT_ALV
    *&---------------------------------------------------------------------*
    *&      Form  EXCLUDE_TB_FUNCTIONS
    *&---------------------------------------------------------------------*
    *       text
    *----------------------------------------------------------------------*
    *      -->PT_EXCLUDE text
    *----------------------------------------------------------------------*
    FORM EXCLUDE_TB_FUNCTIONS CHANGING PT_EXCLUDE TYPE UI_FUNCTIONS.
    * Only allow to change data not to create new entries (exclude
    * generic functions).
      DATA LS_EXCLUDE TYPE UI_FUNC.
     
      LS_EXCLUDE = CL_GUI_ALV_GRID=>MC_FC_LOC_COPY_ROW.
      APPEND LS_EXCLUDE TO PT_EXCLUDE.
      LS_EXCLUDE = CL_GUI_ALV_GRID=>MC_FC_LOC_DELETE_ROW.
      APPEND LS_EXCLUDE TO PT_EXCLUDE.
      LS_EXCLUDE = CL_GUI_ALV_GRID=>MC_FC_LOC_APPEND_ROW.
      APPEND LS_EXCLUDE TO PT_EXCLUDE.
      LS_EXCLUDE = CL_GUI_ALV_GRID=>MC_FC_LOC_INSERT_ROW.
      APPEND LS_EXCLUDE TO PT_EXCLUDE.
      LS_EXCLUDE = CL_GUI_ALV_GRID=>MC_FC_LOC_MOVE_ROW.
      APPEND LS_EXCLUDE TO PT_EXCLUDE.
      LS_EXCLUDE = CL_GUI_ALV_GRID=>MC_FC_LOC_COPY.
      APPEND LS_EXCLUDE TO PT_EXCLUDE.
      LS_EXCLUDE = CL_GUI_ALV_GRID=>MC_FC_LOC_CUT.
      APPEND LS_EXCLUDE TO PT_EXCLUDE.
      LS_EXCLUDE = CL_GUI_ALV_GRID=>MC_FC_LOC_PASTE.
      APPEND LS_EXCLUDE TO PT_EXCLUDE.
      LS_EXCLUDE = CL_GUI_ALV_GRID=>MC_FC_LOC_PASTE_NEW_ROW.
      APPEND LS_EXCLUDE TO PT_EXCLUDE.
      LS_EXCLUDE = CL_GUI_ALV_GRID=>MC_FC_LOC_UNDO.
      APPEND LS_EXCLUDE TO PT_EXCLUDE.
    ENDFORM.                               " EXCLUDE_TB_FUNCTIONS
    *&---------------------------------------------------------------------*
    *&      Form  build_fieldcat
    *&---------------------------------------------------------------------*
    *       Fieldcatalog
    *----------------------------------------------------------------------*
    FORM BUILD_FIELDCAT .
      DATA: L_POS TYPE I.
      L_POS = L_POS + 1.
     
     
      X_FIELDCAT-SCRTEXT_M = 'Delivery'(024).
      X_FIELDCAT-FIELDNAME = 'VBELN'.
      X_FIELDCAT-TABNAME = 'IT_FINAL'.
      X_FIELDCAT-COL_POS    = L_POS.
      X_FIELDCAT-NO_ZERO    = 'X'.
      X_FIELDCAT-OUTPUTLEN = '10'.
      X_FIELDCAT-HOTSPOT = 'X'.
     
      APPEND X_FIELDCAT TO IT_FIELDCAT.
      CLEAR X_FIELDCAT.
      L_POS = L_POS + 1.
     
      X_FIELDCAT-SCRTEXT_M = 'Item'(025).
      X_FIELDCAT-FIELDNAME = 'POSNR'.
      X_FIELDCAT-TABNAME = 'IT_FINAL'.
      X_FIELDCAT-COL_POS    = L_POS.
      X_FIELDCAT-OUTPUTLEN = '5'.
      APPEND X_FIELDCAT TO IT_FIELDCAT.
      CLEAR X_FIELDCAT.
      L_POS = L_POS + 1.
     
     
      X_FIELDCAT-SCRTEXT_M = 'Drop'(025).
      X_FIELDCAT-FIELDNAME = 'DROP'.
      X_FIELDCAT-TABNAME = 'IT_FINAL'.
      X_FIELDCAT-COL_POS    = L_POS.
      X_FIELDCAT-OUTPUTLEN = '5'.
      X_FIELDCAT-EDIT = 'X'.
      X_FIELDCAT-DRDN_HNDL = '1'.
      X_FIELDCAT-DRDN_ALIAS = 'X'.
      APPEND X_FIELDCAT TO IT_FIELDCAT.
      CLEAR X_FIELDCAT.
     
    ENDFORM.                    " build_fieldcat
    *&---------------------------------------------------------------------*
    *&      Module  STATUS_0100  OUTPUT
    *&---------------------------------------------------------------------*
    *       text
    *----------------------------------------------------------------------*
    MODULE STATUS_0100 OUTPUT.
      SET PF-STATUS 'MAIN100'.
      SET TITLEBAR 'MAIN100'.
      IF G_CUSTOM_CONTAINER IS INITIAL.
    **Initializing the grid and calling the fm to Display the O/P
        PERFORM CREATE_AND_INIT_ALV.
      ENDIF.
    ENDMODULE.                 " STATUS_0100  OUTPUT
    *&---------------------------------------------------------------------*
    *&      Module  USER_COMMAND_0100  INPUT
    *&---------------------------------------------------------------------*
    *       text
    *----------------------------------------------------------------------*
    MODULE USER_COMMAND_0100 INPUT.
      CASE SY-UCOMM.
        WHEN 'BACK'.
          LEAVE TO SCREEN 0.
      ENDCASE.
    ENDMODULE.                 " USER_COMMAND_0100  INPUT
     
    *&---------------------------------------------------------------------*
    *&      Form  SET_DRDN_TABLE
    *&---------------------------------------------------------------------*
    *       text
    *----------------------------------------------------------------------*
    FORM SET_DRDN_TABLE.
     
      DATA:LT_DRAL TYPE LVC_T_DRAL,
            LS_DRAL TYPE LVC_S_DRAL.
      LOOP AT ITAB .
    * First listbox (handle '1').
        IF SY-INDEX = 1.
          LS_DRAL-HANDLE = '1'.
          LS_DRAL-VALUE =  ' '.
          LS_DRAL-INT_VALUE =  ' '.
        ELSE.
          LS_DRAL-HANDLE = '1'.
          LS_DRAL-VALUE =  ITAB-POSNR.
          LS_DRAL-INT_VALUE =  ITAB-POSNR.
        ENDIF.
        APPEND LS_DRAL TO LT_DRAL.
      ENDLOOP.
    **Setting the Drop down table for Reason Code
      CALL METHOD G_GRID->SET_DROP_DOWN_TABLE
        EXPORTING
          IT_DROP_DOWN_ALIAS = LT_DRAL.
    ENDFORM.                               " set_drdn_table
    *&---------------------------------------------------------------------*
    *&      Form  EVENT_TOP_OF_PAGE
    *&---------------------------------------------------------------------*
    *       text
    *----------------------------------------------------------------------*
    *      -->DG_DYNDOC_ID  text
    *----------------------------------------------------------------------*
    FORM EVENT_TOP_OF_PAGE USING   DG_DYNDOC_ID TYPE REF TO CL_DD_DOCUMENT.
      "this is more clear.....check it
      "first add text, then pass it to comentry write fm
      DATA : DL_TEXT(255) TYPE C.  "Text
    * Populating header to top-of-page
      CALL METHOD DG_DYNDOC_ID->ADD_TEXT
        EXPORTING
          TEXT      = 'Test Report'
          SAP_STYLE = CL_DD_AREA=>HEADING.
    * Add new-line
      CALL METHOD DG_DYNDOC_ID->NEW_LINE.
     
      CLEAR : DL_TEXT.
    * Move program ID
      CONCATENATE 'Program Name :' SY-REPID
             INTO DL_TEXT SEPARATED BY SPACE.
    * Add Program Name to Document
      PERFORM ADD_TEXT USING DL_TEXT.
    * Add new-line
      CALL METHOD DG_DYNDOC_ID->NEW_LINE.
     
      CLEAR : DL_TEXT.
    * Move User ID
      CONCATENATE 'User ID :' SY-UNAME INTO DL_TEXT SEPARATED BY SPACE
    .
    * Add User ID to Document
      PERFORM ADD_TEXT USING DL_TEXT.
    * Add new-line
      CALL METHOD DG_DYNDOC_ID->NEW_LINE.
     
      CLEAR : DL_TEXT.
    * Move Client
      CONCATENATE 'Client :' SY-MANDT INTO DL_TEXT SEPARATED BY SPACE.
    * Add Client to Document
      PERFORM ADD_TEXT USING DL_TEXT.
    * Add new-line
      CALL METHOD DG_DYNDOC_ID->NEW_LINE.
     
      CLEAR : DL_TEXT.
    * Move date
      WRITE SY-DATUM TO DL_TEXT.
      CONCATENATE 'Date :' DL_TEXT INTO DL_TEXT SEPARATED BY SPACE.
    * Add Date to Document
      PERFORM ADD_TEXT USING DL_TEXT.
    * Add new-line
      CALL METHOD DG_DYNDOC_ID->NEW_LINE.
     
      CLEAR : DL_TEXT.
    * Move time
      WRITE SY-UZEIT TO DL_TEXT.
      CONCATENATE 'Time :' DL_TEXT INTO DL_TEXT SEPARATED BY SPACE.
    * Add Time to Document
      PERFORM ADD_TEXT USING DL_TEXT.
    * Add new-line
      CALL METHOD DG_DYNDOC_ID->NEW_LINE.
    * Populating data to html control
      PERFORM HTML.
     
    ENDFORM.                    " EVENT_TOP_OF_PAGE
    *&---------------------------------------------------------------------*
    *&      Form  ADD_TEXT
    *&---------------------------------------------------------------------*
    *       To add Text
    *----------------------------------------------------------------------*
    FORM ADD_TEXT USING P_TEXT TYPE SDYDO_TEXT_ELEMENT.
    * Adding text
      CALL METHOD DG_DYNDOC_ID->ADD_TEXT
        EXPORTING
          TEXT         = P_TEXT
          SAP_EMPHASIS = CL_DD_AREA=>HEADING.
    ENDFORM.                    " ADD_TEXT
    *&---------------------------------------------------------------------*
    *&      Form  HTML
    *&---------------------------------------------------------------------*
    *       text
    *----------------------------------------------------------------------*
    FORM HTML.
      DATA : DL_LENGTH  TYPE I,                           " Length
             DL_BACKGROUND_ID TYPE SDYDO_KEY VALUE SPACE. " Background_id
    * Creating html control
      IF DG_HTML_CNTRL IS INITIAL.
        CREATE OBJECT DG_HTML_CNTRL
             EXPORTING
                  PARENT    = DG_PARENT_HTML.
      ENDIF.
    * Reuse_alv_grid_commentary_set
      CALL FUNCTION 'REUSE_ALV_GRID_COMMENTARY_SET'
        EXPORTING
          DOCUMENT = DG_DYNDOC_ID
          BOTTOM   = SPACE
        IMPORTING
          LENGTH   = DL_LENGTH.
    * Get TOP->HTML_TABLE ready
      CALL METHOD DG_DYNDOC_ID->MERGE_DOCUMENT.
    * Set wallpaper
      CALL METHOD DG_DYNDOC_ID->SET_DOCUMENT_BACKGROUND
        EXPORTING
          PICTURE_ID = DL_BACKGROUND_ID.
    * Connect TOP document to HTML-Control
      DG_DYNDOC_ID->HTML_CONTROL = DG_HTML_CNTRL.
    * Display TOP document
      CALL METHOD DG_DYNDOC_ID->DISPLAY_DOCUMENT
        EXPORTING
          REUSE_CONTROL      = 'X'
          PARENT             = DG_PARENT_HTML
        EXCEPTIONS
          HTML_DISPLAY_ERROR = 1.
      IF SY-SUBRC NE 0.
        MESSAGE I999 WITH 'Error in displaying top-of-page'(036).
      ENDIF.
     
    ENDFORM.                    " HTML

    Regards,

    Satish

    Add a comment
    10|10000 characters needed characters exceeded

  • author's profile photo Former Member
    Former Member
    Posted on Dec 04, 2007 at 09:13 AM

    Hi Nazeer,

    Please see the code below and u will understand how to do it for application tool bar buttons.Copy paste and run it.

    Please do reward uf useful.

    Thankx.

    report zakalv_oops.

    data: it_mara type standard table of mara.

    data : container type ref to cl_gui_custom_container,

    grid type ref to cl_gui_alv_grid.

    data: ok_code like sy-ucomm,

    g_repid like sy-repid.

    data: x_save, "for Parameter I_SAVE

    gs_layout type disvariant. "for parameter IS_VARIANT

    parameters: p_def default 'X' as checkbox. "set: default layout allowed

    selection-screen begin of block vari with frame title text-002.

    parameters: save_u radiobutton group save,

    save_x radiobutton group save,

    save_a radiobutton group save,

    save_n radiobutton group save.

    selection-screen end of block vari.

    start-of-selection.

    select * from mara into table it_mara up to 10 rows.

    end-of-selection.

    clear gs_layout.

    • 'gs_layout' must at least contain the report-id to allow

    • saving a layout.

    g_repid = sy-repid.

    • § 2.At least field REPORT of this structure has to be filled!

    gs_layout-report = g_repid.

    • § 3.Determine saving options.

    if save_a = 'X'.

    x_save = 'A'. "The user may save all types of a layout

    endif.

    if save_x = 'X'.

    x_save = 'X'. "a layout can only be saved as spanned one ('global')

    endif.

    if save_n = 'X'.

    x_save = space. "no saving of a layout possible!

    endif.

    if save_u = 'X'.

    x_save = 'U'. "a layout can only be saved as user specific one

    endif.

    call screen 100.

    *----


    *

    • MODULE pbo_100 OUTPUT

    *----


    *

    *

    *----


    *

    module pbo_100 output.

    set pf-status 'MAIN100'.

    set titlebar 'MAIN100'.

    if container is initial.

    create object container

    exporting

    • PARENT =

    container_name = 'CONTAINER'

    • STYLE =

    • LIFETIME = lifetime_default

    • REPID =

    • DYNNR =

    • NO_AUTODEF_PROGID_DYNNR =

    exceptions

    cntl_error = 1

    cntl_system_error = 2

    create_error = 3

    lifetime_error = 4

    lifetime_dynpro_dynpro_link = 5

    others = 6

    .

    if sy-subrc <> 0.

    • MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO

    • WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.

    call function 'POPUP_TO_INFORM'

    exporting

    titel = g_repid

    txt2 = sy-subrc

    txt1 = 'The control could not be created'(510).

    endif.

    create object grid

    exporting

    • I_SHELLSTYLE = 0

    • I_LIFETIME =

    i_parent = container

    • I_APPL_EVENTS = space

    • I_PARENTDBG =

    • I_APPLOGPARENT =

    • I_GRAPHICSPARENT =

    • I_NAME =

    • I_FCAT_COMPLETE = SPACE

    • EXCEPTIONS

    • ERROR_CNTL_CREATE = 1

    • ERROR_CNTL_INIT = 2

    • ERROR_CNTL_LINK = 3

    • ERROR_DP_CREATE = 4

    • others = 5

    .

    if sy-subrc <> 0.

    • MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO

    • WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.

    endif.

    call method grid->set_table_for_first_display

    exporting

    • I_BUFFER_ACTIVE =

    • I_BYPASSING_BUFFER =

    • I_CONSISTENCY_CHECK =

    i_structure_name = 'MARA'

    is_variant = gs_layout

    i_save = x_save

    i_default = p_def

    • IS_LAYOUT =

    • IS_PRINT =

    • IT_SPECIAL_GROUPS =

    • IT_TOOLBAR_EXCLUDING =

    • IT_HYPERLINK =

    • IT_ALV_GRAPHICS =

    • IT_EXCEPT_QINFO =

    • IR_SALV_ADAPTER =

    changing

    it_outtab = it_mara

    • IT_FIELDCATALOG =

    • IT_SORT =

    • IT_FILTER =

    • EXCEPTIONS

    • INVALID_PARAMETER_COMBINATION = 1

    • PROGRAM_ERROR = 2

    • TOO_MANY_LINES = 3

    • others = 4

    .

    if sy-subrc <> 0.

    • MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO

    • WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.

    endif.

    endif.

    endmodule. "pbo_100 OUTPUT

    *----


    *

    • MODULE user_command_0100 INPUT

    *----


    *

    *

    *----


    *

    module pai_100 input.

    case ok_code.

    when 'TO_EXIT'.

    perform exit_program.

    endcase.

    clear ok_code.

    endmodule. "PAI_100 INPUT

    *&----


    *

    *& Form exit_program

    *&----


    *

    • text

    *----


    *

    form exit_program.

    call method container->free.

    • leave program.

    leave to screen 0.

    endform. "exit_program

    Add a comment
    10|10000 characters needed characters exceeded

  • Before answering

    You should only submit an answer when you are proposing a solution to the poster's problem. If you want the poster to clarify the question or provide more information, please leave a comment instead, requesting additional details. When answering, please include specifics, such as step-by-step instructions, context for the solution, and links to useful resources. Also, please make sure that you answer complies with our Rules of Engagement.
    You must be Logged in to submit an answer.

    Up to 10 attachments (including images) can be used with a maximum of 1.0 MB each and 10.5 MB total.