10-06-2009 3:53 AM
Hi guru's,
i have created a ALV report with a check box in the output,i need to select multiple lines by checking 'X' in the check box
after that i need to do further validation..like updating etc..how to read the selected lines( check box = 'X' )from the output of the ALV report.Is there any function for that.plz help me with this regard.
Thanks & Regards,
Balaji.S
10-06-2009 4:11 AM
Hi Balaji,
Use additional parameter 'USER_COMMAND' like below.
For reading use, LOOP AT g_t_vekp INTO g_wa_vekp WHERE flag = 'X'. " 'Flag' is ur checkbox fieldname.
CALL FUNCTION 'REUSE_ALV_LIST_DISPLAY'
EXPORTING
i_callback_user_command = 'USER_COMMAND'.
FORM user_command USING l_r_ucomm LIKE sy-ucomm l_r_selfield TYPE slis_selfield.
CASE l_r_ucomm.
*Updating database when 'Save' is pressed
WHEN 'SAVE'.
LOOP AT g_t_vekp INTO g_wa_vekp WHERE flag = 'X'. " Only selected lines are looped through
SELECT SINGLE FOR UPDATE * FROM vekp " Exclusive lock on that particular record
WHERE venum = g_wa_vekp-venum.
IF sy-subrc = 0.
vekp-vpobjkey = g_wa_vekp-vpobjkey.
UPDATE vekp. " Updating VEKP table
ENDIF.
ENDLOOP.
ENDCASE.
l_r_selfield-refresh = 'X'.
ENDFORM. "user_command
Thanks
10-06-2009 4:20 AM
Hi,
thanks for the reply,but my issue is...the report has been displayed,iam checking 'X' from the output..but how this will be updated in the internal table(header)...is there any fuction to read the status of the ALV output?
10-06-2009 4:32 AM
Hi Balaji,
1. Declare 'Flag' as first field of internal table like below.
DATA: BEGIN OF g_t_vekp OCCURS 0,
flag(1) TYPE c, " Check box field name.
venum TYPE vekp-venum,
exidv TYPE vekp-exidv,
vbeln_gen TYPE vekp-vbeln_gen,
posnr_gen TYPE vekp-posnr_gen,
vpobj TYPE vekp-vpobj,
vpobjkey TYPE vekp-vpobjkey,
status TYPE vekp-status,
END OF g_t_vekp.
2. In layout do like below,
Data: g_wa_layout TYPE slis_layout_alv.
g_wa_layout-box_fieldname = 'FLAG'. " Check box field name.
3. In fieldcatalog make 'Flag' as first field like below,
g_wa_fieldcat-fieldname = 'FLAG'.
APPEND g_wa_fieldcat TO g_t_fieldcat.
CLEAR g_wa_fieldcat.
If u do all these field 'Flag' will be automatically updated for those records in internal table which are selected.
Then u can loop like below,
WHEN 'SAVE'.
LOOP AT g_t_vekp INTO g_wa_vekp WHERE flag = 'X'.
Thanks.
10-06-2009 4:54 AM
Hi Balaji,
Try this way.
<font color=blue><pre>
REPORT ztest_alv_row_selection.
DATA: BEGIN OF it_output OCCURS 0,
select TYPE c, "This variable stores the value when row selected.
bukrs TYPE t001-bukrs,
butxt TYPE t001-butxt,
END OF it_output.
TYPE-POOLS:slis.
DATA:it_events TYPE STANDARD TABLE OF slis_alv_event,
it_fieldcat TYPE STANDARD TABLE OF slis_fieldcat_alv,
wa_fieldcat TYPE slis_fieldcat_alv,
wa_events TYPE slis_alv_event,
wa_layout TYPE slis_layout_alv.
DATA:g_program TYPE sy-repid VALUE sy-repid.
START-OF-SELECTION.
SELECT * FROM t001 INTO CORRESPONDING FIELDS OF TABLE it_output UP TO 100 ROWS.
DEFINE fieldcatalog.
wa_fieldcat-fieldname = &1.
wa_fieldcat-tabname = &2.
wa_fieldcat-seltext_l = &3.
append wa_fieldcat to it_fieldcat.
clear wa_fieldcat.
END-OF-DEFINITION.
fieldcatalog: "Column table col text
'BUKRS' 'IT_OUTPUT' 'BUKRS',
'BUTXT' 'IT_OUTPUT' 'BUTXT'.
wa_layout-box_fieldname = 'SELECT'. "This has to be set to get selection
wa_layout-colwidth_optimize = 'X'.
wa_events-name = 'PF_STATUS_SET'.
wa_events-form = 'PF_STATUS_SET'.
APPEND wa_events TO it_events.
CLEAR wa_events.
wa_events-name = 'USER_COMMAND'.
wa_events-form = 'USER_COMMAND'.
APPEND wa_events TO it_events.
CLEAR wa_events.
CALL FUNCTION 'REUSE_ALV_LIST_DISPLAY'
EXPORTING
i_callback_program = g_program
is_layout = wa_layout
it_fieldcat = it_fieldcat
it_events = it_events
TABLES
t_outtab = it_output.
&----
*& Form PF_STATUS_SET
&----
FORM pf_status_set USING rt_extab TYPE slis_t_extab.
SET PF-STATUS 'ZTEST'.
1. When you set Pf status ZTEST, standard application tools will be removed.
2. Goto SE41 give program 'SAPLKKBL' and status 'STANDARD_FULLSCREEN'.
3. Copy the status from those to ZTEST of our program. Now you will see all standard functions.
ENDFORM. "PF_STATUS_SET
----
FORM USER_COMMAND *
----
FORM user_command USING r_ucomm LIKE sy-ucomm rs_selfield TYPE slis_selfield.
Check function code
CASE r_ucomm.
WHEN 'DISPLAY'. "user presses SAVE
LOOP AT it_output.
IF it_output-select EQ 'X'.
Process records that have been selected
WRITE:/ it_output.
ENDIF.
ENDLOOP.
ENDCASE.
ENDFORM. "user_command</pre></font>
Thanks
Venkat.O
10-06-2009 5:09 AM
Dear all,
Thanks for your contribution,now my issue is solved.
Thanks a lot
Regards,
Balaji.S