Application Development Discussions
Join the discussions or start your own on all things application development, including tools and APIs, programming models, and keeping your skills sharp.
cancel
Showing results for 
Search instead for 
Did you mean: 

ALV grid Controls

Former Member
0 Kudos

Hi

I want to add a custom button to the alv grid. iam at present using reuse_alv_grid_display. I want to add a 'forward' button to the grid. This should be the add on button to the buttons available in the grid. How do i do that? Thanks In Advance

Vicky

1 ACCEPTED SOLUTION

former_member181966
Active Contributor
0 Kudos

Sample program BCALV_GRID_05 shows how to add a custom button to an ALV grid located in a custom object in a dialog screen using class lcl_event_receiver and call method grid2->set_toolbar_interactive where grid2 is the custom control on the dialog screen.

pl..award the points

Thanks

Saquib

Message was edited by: Saquib Khan

10 REPLIES 10

former_member181966
Active Contributor
0 Kudos

Sample program BCALV_GRID_05 shows how to add a custom button to an ALV grid located in a custom object in a dialog screen using class lcl_event_receiver and call method grid2->set_toolbar_interactive where grid2 is the custom control on the dialog screen.

pl..award the points

Thanks

Saquib

Message was edited by: Saquib Khan

0 Kudos

Hi

Iam not using abap objects. So is there anyway with just using the reports.

Vicky

0 Kudos

Checkout these !!

/people/ravikumar.allampallam/blog/2005/12/07/need-a-way-to-add-custom-buttons-to-standard-alv-report-toolbar--part-ii

http://www.sapgenie.com/abap/controls/alvgrid.htm#Customize%20the%20appearence%20of%20the%20grid

http://www.abap4.it/download/ALV.pdf

also if you search on SDN , you`ll find lots of post with code!!

Thanks

Saquib

Message was edited by: Saquib Khan

Former Member
0 Kudos

Hi,

chek the following program for adding new buttons to alv grid display.

&----


*& Report Z_515_ALV_TEST1 *

*& *

&----


*& *

*& *

&----


REPORT Z_515_ALV_TEST1

LINE-SIZE 200

LINE-COUNT 25.

TABLES:VBAK.

TYPE-POOLS:SLIS.

DATA:G_FIELDCAT TYPE SLIS_T_FIELDCAT_ALV.

DATA:G_FIELDCAT1 TYPE SLIS_T_FIELDCAT_ALV.

DATA:G_REPID TYPE SY-REPID.

G_REPID = SY-REPID.

DATA:G_EVENTS TYPE SLIS_T_EVENT.

DATA:BEGIN OF ITAB OCCURS 0,

VBELN TYPE VBAK-VBELN,

ERDAT TYPE VBAK-ERDAT,

VBTYP TYPE VBAK-VBTYP,

MATNR TYPE VBAP-MATNR,

NETPR TYPE VBAP-NETPR,

POSNR TYPE VBAP-POSNR,

END OF ITAB.

DATA:BEGIN OF ITAB3 OCCURS 0,

MATNR TYPE MARA-MATNR,

MTART TYPE MARA-MTART,

END OF ITAB3.

DATA:ITAB1 TYPE SLIS_TABNAME.

ITAB1 = 'ITAB'.

DATA:ITAB31 TYPE SLIS_TABNAME.

ITAB31 = 'ITAB3'.

data:f1 type string,

v1 type string,

l1 type i.

DATA:I_LIST_COMMENTS TYPE SLIS_T_LISTHEADER.

DATA:I1_LIST_COMMENTS TYPE SLIS_T_LISTHEADER.

SELECT-OPTIONS:S_VBELN FOR VBAK-VBELN.

SELECT V~VBELN

V~ERDAT

V~VBTYP

VP~MATNR

VP~NETPR

VP~POSNR

FROM VBAK AS V

INNER JOIN VBAP AS VP

ON VVBELN = VPVBELN

INTO CORRESPONDING

FIELDS OF TABLE ITAB

WHERE V~VBELN IN S_VBELN.

IF NOT ITAB[] IS INITIAL.

SELECT MATNR

MTART

FROM MARA INTO CORRESPONDING FIELDS OF TABLE ITAB3

FOR ALL ENTRIES IN ITAB

WHERE MATNR = ITAB-MATNR.

ENDIF.

END-OF-SELECTION.

PERFORM FIELDCAT_MERGE USING G_FIELDCAT G_FIELDCAT1.

PERFORM GET_EVENTS.

PERFORM GRID_DISPLAY.

&----


*& Form filedcat_merge

&----


  • text

----


  • -->P_G_FIELDCAT text

----


FORM FIELDCAT_MERGE USING P_G_FIELDCAT TYPE SLIS_T_FIELDCAT_ALV

P_G_FIELDCAT1 TYPE SLIS_T_FIELDCAT_ALV.

DATA:L_G_FIELDCAT TYPE SLIS_FIELDCAT_ALV.

DATA:COL TYPE I VALUE 1.

L_G_FIELDCAT-FIELDNAME = 'VBELN'.

L_G_FIELDCAT-TABNAME = ITAB.

L_G_FIELDCAT-REF_TABNAME = 'VBAK'.

L_G_FIELDCAT-SELTEXT_M = 'Sales Document'.

L_G_FIELDCAT-COL_POS = COL.

COL = COL + 1.

APPEND L_G_FIELDCAT TO P_G_FIELDCAT.

CLEAR L_G_FIELDCAT.

L_G_FIELDCAT-FIELDNAME = 'ERDAT'.

L_G_FIELDCAT-TABNAME = ITAB.

L_G_FIELDCAT-REF_TABNAME = 'VBAK'.

L_G_FIELDCAT-SELTEXT_M = 'Document CRAETION DATE'.

L_G_FIELDCAT-COL_POS = COL.

COL = COL + 1.

APPEND L_G_FIELDCAT TO P_G_FIELDCAT.

CLEAR L_G_FIELDCAT.

L_G_FIELDCAT-FIELDNAME = 'VBTYP'.

L_G_FIELDCAT-TABNAME = ITAB.

L_G_FIELDCAT-REF_TABNAME = 'VBAK'.

L_G_FIELDCAT-SELTEXT_M = 'Document Type'.

L_G_FIELDCAT-COL_POS = COL.

COL = COL + 1.

APPEND L_G_FIELDCAT TO P_G_FIELDCAT.

CLEAR L_G_FIELDCAT.

L_G_FIELDCAT-FIELDNAME = 'MATNR'.

L_G_FIELDCAT-TABNAME = ITAB.

L_G_FIELDCAT-REF_TABNAME = 'VBAP'.

L_G_FIELDCAT-SELTEXT_M = 'MATERIAL NUMBER'.

L_G_FIELDCAT-COL_POS = COL.

COL = COL + 1.

APPEND L_G_FIELDCAT TO P_G_FIELDCAT.

CLEAR L_G_FIELDCAT.

L_G_FIELDCAT-FIELDNAME = 'NETPR'.

L_G_FIELDCAT-TABNAME = ITAB.

L_G_FIELDCAT-REF_TABNAME = 'VBAP'.

L_G_FIELDCAT-SELTEXT_M = 'PRICE OF ITEM'.

L_G_FIELDCAT-COL_POS = COL.

COL = COL + 1.

APPEND L_G_FIELDCAT TO P_G_FIELDCAT.

CLEAR L_G_FIELDCAT.

L_G_FIELDCAT-FIELDNAME = 'POSNR'.

L_G_FIELDCAT-TABNAME = ITAB.

L_G_FIELDCAT-REF_TABNAME = 'VBAP'.

L_G_FIELDCAT-SELTEXT_M = 'ITEM NUMBER'.

L_G_FIELDCAT-COL_POS = COL.

COL = COL + 1.

APPEND L_G_FIELDCAT TO P_G_FIELDCAT.

CLEAR L_G_FIELDCAT.

COL = 1.

L_G_FIELDCAT-FIELDNAME = 'MATNR'.

L_G_FIELDCAT-TABNAME = ITAB3.

L_G_FIELDCAT-REF_TABNAME = 'MARA'.

L_G_FIELDCAT-SELTEXT_M = 'MATERIAL NUMBER'.

L_G_FIELDCAT-COL_POS = COL.

COL = COL + 1.

APPEND L_G_FIELDCAT TO P_G_FIELDCAT1.

CLEAR L_G_FIELDCAT.

L_G_FIELDCAT-FIELDNAME = 'MTART'.

L_G_FIELDCAT-TABNAME = ITAB3.

L_G_FIELDCAT-REF_TABNAME = 'MARA'.

L_G_FIELDCAT-SELTEXT_M = 'MATERIAL TYPE'.

L_G_FIELDCAT-COL_POS = COL.

COL = COL + 1.

APPEND L_G_FIELDCAT TO P_G_FIELDCAT1.

CLEAR L_G_FIELDCAT.

ENDFORM. " filedcat_merge

&----


*& Form grid_display

&----


  • text

----


  • --> p1 text

  • <-- p2 text

----


FORM GRID_DISPLAY .

CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'

EXPORTING

I_CALLBACK_PROGRAM = G_REPID

I_CALLBACK_PF_STATUS_SET = 'SET_PF_STATUS'

I_CALLBACK_USER_COMMAND = 'USER_COMMAND'

IT_FIELDCAT = G_FIELDCAT[]

IT_EVENTS = G_EVENTS

TABLES

T_OUTTAB = ITAB

EXCEPTIONS

PROGRAM_ERROR = 1

OTHERS = 2.

IF SY-SUBRC <> 0.

ENDIF.

ENDFORM. " grid_display

&----


*& Form get_events

&----


  • text

----


  • --> p1 text

  • <-- p2 text

----


FORM GET_EVENTS .

DATA:W_EVENTS LIKE LINE OF G_EVENTS.

CALL FUNCTION 'REUSE_ALV_EVENTS_GET'

EXPORTING

I_LIST_TYPE = 0

IMPORTING

ET_EVENTS = G_EVENTS

EXCEPTIONS

LIST_TYPE_WRONG = 1

OTHERS = 2.

IF SY-SUBRC <> 0.

ENDIF.

READ TABLE G_EVENTS

WITH KEY NAME = 'TOP_OF_PAGE'

INTO W_EVENTS.

IF SY-SUBRC = 0.

MOVE 'TOP_OF_PAGE' TO W_EVENTS-FORM.

MODIFY G_EVENTS FROM W_EVENTS INDEX SY-TABIX.

ENDIF.

READ TABLE G_EVENTS

WITH KEY NAME = 'PF_STATUS_SET'

INTO W_EVENTS.

IF SY-SUBRC = 0.

MOVE 'SET_PF_STATUS' TO W_EVENTS-FORM.

MODIFY G_EVENTS FROM W_EVENTS INDEX SY-TABIX.

ENDIF.

READ TABLE G_EVENTS

WITH KEY NAME = 'USER_COMMAND'

INTO W_EVENTS.

IF SY-SUBRC = 0.

MOVE 'USER_COMMAND' TO W_EVENTS-FORM.

MODIFY G_EVENTS FROM W_EVENTS INDEX SY-TABIX.

ENDIF.

READ TABLE G_EVENTS

WITH KEY NAME = 'END_OF_LIST'

INTO W_EVENTS.

IF SY-SUBRC = 0.

MOVE 'ALV_END_OF_LIST' TO W_EVENTS-FORM.

MODIFY G_EVENTS FROM W_EVENTS INDEX SY-TABIX.

ENDIF.

READ TABLE G_EVENTS

WITH KEY NAME = 'END_OF_PAGE'

INTO W_EVENTS.

IF SY-SUBRC = 0.

MOVE 'ALV_END_OF_PAGE' TO W_EVENTS-FORM.

MODIFY G_EVENTS FROM W_EVENTS INDEX SY-TABIX.

ENDIF.

ENDFORM. "get_events

&----


*& Form TOP_OF_PAGE

&----


  • text

----


FORM TOP_OF_PAGE.

*WRITE:/ 'INTELLIGROUP ASIA PVT,LTD.'.

*WRITE:/ 'HYDERABAD'.

DATA:W_LIST_COMMENTS LIKE LINE OF I_LIST_COMMENTS.

CLEAR: I_LIST_COMMENTS[].

W_LIST_COMMENTS-TYP = 'H'.

W_LIST_COMMENTS-KEY = ''.

W_LIST_COMMENTS-INFO = 'Sales details'.

APPEND W_LIST_COMMENTS TO I_LIST_COMMENTS.

W_LIST_COMMENTS-TYP = 'A'.

W_LIST_COMMENTS-KEY = ''.

W_LIST_COMMENTS-INFO = 'Intelligroup asia pvt,ltd.'.

APPEND W_LIST_COMMENTS TO I_LIST_COMMENTS.

W_LIST_COMMENTS-TYP = 'A'.

W_LIST_COMMENTS-KEY = ''.

W_LIST_COMMENTS-INFO = 'Mana Sarovar Complex'.

APPEND W_LIST_COMMENTS TO I_LIST_COMMENTS.

W_LIST_COMMENTS-TYP = 'A'.

W_LIST_COMMENTS-KEY = ''.

W_LIST_COMMENTS-INFO = 'Hyderabad'.

APPEND W_LIST_COMMENTS TO I_LIST_COMMENTS.

CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE'

EXPORTING

IT_LIST_COMMENTARY = I_LIST_COMMENTS

I_LOGO = 'ENJOYSAP_LOGO'

  • I_END_OF_LIST_GRID =

.

ENDFORM. "TOP_OF_PAGE

*& Form USER_COMMAND

&----


  • text

----


FORM USER_COMMAND USING R_UCOMM LIKE SY-UCOMM

RS_SELFIELD TYPE SLIS_SELFIELD..

CASE R_UCOMM.

WHEN 'DISP'.

get cursor FIELD f1 value v1 line l1.

CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'

EXPORTING

I_CALLBACK_PROGRAM = G_REPID

IT_FIELDCAT = G_FIELDCAT1[]

TABLES

T_OUTTAB = ITAB3

EXCEPTIONS

PROGRAM_ERROR = 1

OTHERS = 2.

IF SY-SUBRC <> 0.

ENDIF.

WHEN 'BACK'.

LEAVE SCREEN.

ENDCASE.

ENDFORM. "USER_COMMAND

&----


*& Form SET_PF_STATUS

&----


  • text

----


  • -->EXTAB text

----


FORM SET_PF_STATUS USING EXTAB TYPE SLIS_T_EXTAB.

SET PF-STATUS 'ZSUNIL4' EXCLUDING EXTAB.

ENDFORM. "SET_PF_STATUS

&----


*& Form alv_end_of_list

&----


  • text

----


FORM ALV_END_OF_LIST.

DATA:W_LIST_COMMENTS LIKE LINE OF I_LIST_COMMENTS.

CLEAR: I_LIST_COMMENTS[].

W_LIST_COMMENTS-TYP = 'A'.

W_LIST_COMMENTS-KEY = ''.

W_LIST_COMMENTS-INFO = 'End of list'.

APPEND W_LIST_COMMENTS TO I_LIST_COMMENTS.

W_LIST_COMMENTS-TYP = 'A'.

W_LIST_COMMENTS-KEY = ''.

W_LIST_COMMENTS-INFO = 'pagno'.

APPEND W_LIST_COMMENTS TO I_LIST_COMMENTS.

W_LIST_COMMENTS-TYP = 'A'.

W_LIST_COMMENTS-KEY = ''.

W_LIST_COMMENTS-INFO = sy-pagno.

APPEND W_LIST_COMMENTS TO I_LIST_COMMENTS.

CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE'

EXPORTING

IT_LIST_COMMENTARY = I_LIST_COMMENTS

I_LOGO = 'ZMYOBJECTKEY'

I_END_OF_LIST_GRID = 'X'.

ENDFORM. "alv_end_of_list

FORM ALV_END_OF_PAGE.

DATA:W1_LIST_COMMENTS LIKE LINE OF I1_LIST_COMMENTS.

CLEAR: I1_LIST_COMMENTS[].

W1_LIST_COMMENTS-TYP = 'A'.

W1_LIST_COMMENTS-KEY = ''.

W1_LIST_COMMENTS-INFO = 'pagno'.

APPEND W1_LIST_COMMENTS TO I1_LIST_COMMENTS.

W1_LIST_COMMENTS-TYP = 'A'.

W1_LIST_COMMENTS-KEY = ''.

W1_LIST_COMMENTS-INFO = sy-pagno.

APPEND W1_LIST_COMMENTS TO I1_LIST_COMMENTS.

CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE'

EXPORTING

IT_LIST_COMMENTARY = I1_LIST_COMMENTS

I_LOGO = 'ZMYOBJECTKEY'

I_END_OF_LIST_GRID = 'X'.

ENDFORM.

regards,

Sunil

0 Kudos

Hi Sunil,

Thanks For the program..But the thing is I got to add only one custom button(forward) to my grid. So how do i do this and how do i write an user command function to this button. This is just an additional to the standard buttons that are available in the application bar of the grid. So how do i do this ..Please reply me asap.. Thanks In Advance.

Vicky

0 Kudos

Try the following steps:

1. Copy the standrad PF status from any ALV program (e.g.BCALV_GRID_01) to your program

and add the button as you want to.

2. Create a subroutine like the following:

&----


  • Sets the PF status

----


FORM pf_status_set USING gt_extab TYPE slis_t_extab.

SET PF-STATUS <PF status name>.

ENDFORM.

3. Create another subroutine:

&----


*& Form user_command

&----


  • Takes the User command and acts accordingly

----


FORM user_command USING r_ucomm LIKE sy-ucomm

rs_selfield TYPE slis_selfield.

<Here your control comes when user clicks on the button;

r_ucomm contains the user-command value>

ENDFORM.

4. Pass the 2 subroutine names while calling the ALV function module

e.g. CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'

EXPORTING

<with other parameters>

i_callback_pf_status_set = 'SET_PF_STATUS'

i_callback_user_command = 'USER_COMMAND'.

0 Kudos

Hi Sandp I did this but still i cudnt able to see all the buttons. I could just see blank screen with alv grid.Here is my code....

REPORT ZZZZ .

&----


*& Report ZZZZ

*&

&----


*&

*&

&----


type-pools: slis.

  • Data to be displayed

data: gt_wrkpool type table of zte_wrkpool.

data: gs_wrkpool like line of gt_wrkpool.

data: gs_layout type slis_layout_alv.

DATA:G_REPID TYPE SY-REPID.

----


  • Selection

select * from zte_wrkpool into corresponding fields of table gt_wrkpool.

  • Eingabebereit

gs_layout-edit = 'X'.

start-of-selection.

select * from zte_wrkpool into corresponding fields of table gt_wrkpool.

G_REPID = sy-repid.

end-of-selection.

  • Call ABAP List Viewer (ALV)

call function 'REUSE_ALV_GRID_DISPLAY'

exporting

I_CALLBACK_PROGRAM = G_REPID

I_CALLBACK_USER_COMMAND = '&FWD'

I_CALLBACK_PF_STATUS_SET = 'STANDARD'

i_structure_name = 'zte_wrkpool'

is_layout = gs_layout

  • IT_SORT = SORT[]

  • IT_EVENTS = events[]

tables

t_outtab = gt_wrkpool.

*FORM PF_STATUS_SET USING RT_EXTAB TYPE SLIS_T_EXTAB.

*SET PF-STATUS 'STANDARD' EXCLUDING RT_EXTAB.

*ENDFORM.

FORM pf_status_set USING rt_extab TYPE slis_t_extab.

SET PF-STATUS 'STANDARD' EXCLUDING rt_extab.

ENDFORM.

end-of-selection.

FORM user_command USING r_ucomm LIKE sy-ucomm

rs_selfield TYPE slis_selfield.

CASE 'r_ucomm'.

WHEN '&FWD'.

CALL FUNCTION 'SWL_WI_FORWARD'

EXPORTING

  • ACTUAL_AGENT = SY-UNAME

WI_ID = gs_wrkpool-wrkplid

  • DO_COMMIT = 'X'

  • CHANGING

  • WORKITEM =

  • EXCEPTIONS

  • FORWARD_FAILED = 1

  • NO_RECIPIENT_SELECTED = 2

  • RESERVATION_FAILED = 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.

ENDCASE.

ENDFORM.

0 Kudos

Vicky,

In the ALV function module, pass the subroutine names, not the PF status name and user commands.

call function 'REUSE_ALV_GRID_DISPLAY'

exporting

I_CALLBACK_PROGRAM = G_REPID

I_CALLBACK_USER_COMMAND = <u><b>'USER_COMMAND'</b></u>

I_CALLBACK_PF_STATUS_SET = <u><b>'PF_STATUS_SET'</b></u>

i_structure_name = 'zte_wrkpool'

is_layout = gs_layout

  • IT_SORT = SORT[]

  • IT_EVENTS = events[]

tables

t_outtab = gt_wrkpool.

0 Kudos

Please award the points and close the thread if it solved your problem.

Former Member
0 Kudos

Vicky

just check these threads u may get some idea

Regards

Naveen