05-02-2006 4:29 PM
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
05-02-2006 4:32 PM
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
05-02-2006 4:32 PM
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
05-02-2006 4:35 PM
Hi
Iam not using abap objects. So is there anyway with just using the reports.
Vicky
05-02-2006 4:40 PM
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
05-02-2006 4:47 PM
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
05-02-2006 6:51 PM
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
05-02-2006 8:37 PM
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'.
05-02-2006 8:54 PM
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.
05-02-2006 9:57 PM
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.
05-03-2006 8:19 PM
Please award the points and close the thread if it solved your problem.
05-02-2006 7:53 PM