Hello Krishna,
1> How to add a extra save button to the alv grid display.??
For this you have to create a new PF status and create a custom Save button. Use the below sample to do it.
2> once the user clicks on that button how to retrieve those selected rows?/?
Once the user clicks on the custom save button by selecting the rwos from the ALV display, use SET PARAMETER ID and then update those values to the table.
In the below example I have added two new buttons to the ALV output and based on the button action I am performing the deletion of info records.
REPORT zbmm_zar4021.
*---------------------------------------------------------------------
* System Name : SAP R/3
* Category : MM
*---------------------------------------------------------------------
* Program Name : ZBMM_ZAR4021
*
* Outline : Deletion of Info records
*
* Transaction name : ZBMM_0462 - Deletion of Info records
*---------------------------------------------------------------------
* Type Pools
TYPE-POOLS: slis.
* Constant Declaration used as a flag
CONSTANTS: ct_gc_flag TYPE c VALUE'X'.
* Global tables
DATA: itab_gt_data TYPESTANDARDTABLEOF zbmm_s0324,
itab_gt_eina TYPESTANDARDTABLEOF eina,
itab_gt_eine TYPESTANDARDTABLEOF eine,
itab_gt_fieldcat TYPE slis_t_fieldcat_alv.
* Workarea
DATA: str_gs_eina TYPE eina,
str_gs_eine TYPE eine,
str_gs_layout TYPE slis_layout_alv.
*Selection screen
SELECTION-SCREENBEGINOFBLOCK b1 WITHFRAMETITLE text-001.
SELECT-OPTIONS: so_lifnr FOR str_gs_eina-lifnr NO INTERVALS,
so_matnr FOR str_gs_eina-matnr NO INTERVALS,
so_ekorg FOR str_gs_eine-ekorg NO INTERVALS,
so_werks FOR str_gs_eine-werks NO INTERVALS,
so_infnr FOR str_gs_eina-infnr NO INTERVALS,
so_erdat FOR str_gs_eina-erdat,
so_exprf FOR str_gs_eine-exprf NO INTERVALS,
so_inco1 FOR str_gs_eine-inco1 NO INTERVALS.
PARAMETERS: pa_poflg TYPE ILOEE,
pa_coflg TYPE ILOEA.
SELECTION-SCREENENDOFBLOCK b1.
INITIALIZATION.
*Create field catalog from dictionary structure or internal table
PERFORM fm_fieldcat_init.
START-OF-SELECTION.
* Check authorization on transaction
CALLFUNCTION'Z_ZBBC_AUTHORITY_TRANSACTION'
EXPORTING
i_tcode = 'ZBMM_0462'.
*Select data from tables
PERFORM fm_select_data.
END-OF-SELECTION.
IF itab_gt_data ISINITIAL.
* No data found for Selection Criteria
MESSAGE s999(zbmm_0001)WITH text-005.
ELSE.
* ALV Grid Display
PERFORM fm_alv_display.
ENDIF.
*&---------------------------------------------------------------------*
*& Form fm_fieldcat_init
*&---------------------------------------------------------------------*
* text: Used for defining the structure of the ALV
*----------------------------------------------------------------------*
FORM fm_fieldcat_init.
* Building field catalog
CALLFUNCTION'REUSE_ALV_FIELDCATALOG_MERGE'
EXPORTING
i_program_name = sy-repid
i_structure_name = 'ZBMM_S0324'
i_inclname = sy-repid
CHANGING
ct_fieldcat = itab_gt_fieldcat
EXCEPTIONS
inconsistent_interface = 1
program_error = 2
OTHERS = 3.
IF sy-subrc <>0.
MESSAGEID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
ENDFORM. "fm_fieldcat_init
*&---------------------------------------------------------------------*
*& Form fm_select_data
*&---------------------------------------------------------------------*
* text: Used for filling respective data from itab_gt_eine and itab_gt_eina table into itab_gt_data table
*----------------------------------------------------------------------*
FORM fm_select_data.
* Workarea
DATA: str_ls_data TYPE zbmm_s0324,
str_ls_eina TYPE eina,
str_ls_eine TYPE eine.
* the data is selected from eine into itab_gt_eine.
SELECT *
FROM eine
INTOTABLE itab_gt_eine
WHERE infnr IN so_infnr
AND ekorg IN so_ekorg
AND werks IN so_werks
AND loekz EQ pa_poflg
AND exprf IN so_exprf
AND inco1 IN so_inco1.
IF itab_gt_eine ISNOTINITIAL.
* the data is selected from eina into itab_gt_eina on the basis of info record number in
* internal table of eine(itab_gt_eine) and respective vendor a/c number, material number
* and creation dates.
SELECT *
FROM eina
INTOTABLE itab_gt_eina
FORALLENTRIESIN itab_gt_eine
WHERE infnr = itab_gt_eine-infnr
AND lifnr IN so_lifnr
AND matnr IN so_matnr
AND loekz EQ pa_coflg
AND erdat IN so_erdat.
ENDIF.
* the data is stored into an internal table itab_gt_data from itab_gt_eina and itab_gt_eine.
LOOPAT itab_gt_eina INTO str_ls_eina.
READTABLE itab_gt_eine INTO str_ls_eine
WITHKEY infnr = str_ls_eina-infnr.
IF sy-subrc EQ0.
MOVE: str_ls_eina-matnr TO str_ls_data-matnr,
str_ls_eina-lifnr TO str_ls_data-lifnr,
str_ls_eina-erdat TO str_ls_data-erdat,
str_ls_eina-meins TO str_ls_data-meins,
str_ls_eina-ernam TO str_ls_data-ernam,
str_ls_eina-loekz TO str_ls_data-loekz_eina,
str_ls_eina-infnr TO str_ls_data-infnr,
str_ls_eine-ekorg TO str_ls_data-ekorg,
str_ls_eine-werks TO str_ls_data-werks,
str_ls_eine-esokz TO str_ls_data-esokz,
str_ls_eine-loekz TO str_ls_data-loekz_eine,
str_ls_eine-ekgrp TO str_ls_data-ekgrp,
str_ls_eine-waers TO str_ls_data-waers,
str_ls_eine-netpr TO str_ls_data-netpr,
str_ls_eine-peinh TO str_ls_data-peinh,
str_ls_eine-exprf TO str_ls_data-exprf,
str_ls_eine-inco1 TO str_ls_data-inco1.
APPEND str_ls_data TO itab_gt_data.
CLEAR str_ls_data.
ENDIF.
ENDLOOP.
ENDFORM. "fm_select_data
*&---------------------------------------------------------------------*
*& Form fm_alv_display
*&---------------------------------------------------------------------*
* text: For displaying ALV by using table itab_gt_data and adding two buttons for deleting complete info record
* or deleting purchase view info record from eina or eine table respectively.
*----------------------------------------------------------------------*
FORM fm_alv_display .
* Workarea
DATA:str_ls_variant TYPE disvariant."for parameter IS_VARIANT
str_ls_variant-report = sy-repid.
PERFORM fm_populate_layout.
CALLFUNCTION'REUSE_ALV_GRID_DISPLAY'
EXPORTING
i_callback_program = sy-repid
i_callback_pf_status_set = 'FM_PFSTATUS'
i_callback_user_command = 'FM_USERCOMMAND'
* it_events = gt_events[]
is_layout = str_gs_layout
it_fieldcat = itab_gt_fieldcat[]
i_save = 'A'
is_variant = str_ls_variant
TABLES
t_outtab = itab_gt_data
EXCEPTIONS
program_error = 1
OTHERS = 2.
IF sy-subrc <>0.
MESSAGEID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
ENDFORM. "fm_alv_display
*&---------------------------------------------------------------------*
*& Form FM_PFSTATUS
*&---------------------------------------------------------------------*
* text: For declaring two buttons in GUI status for deleting complete info record
* or deleting purchase view info record from eina or eine table respectively.
*----------------------------------------------------------------------*
FORM fm_pfstatus USING rt_extab TYPE slis_t_extab.
SETPF-STATUS'ZBMM_ZAR4021'.
ENDFORM. "FM_PFSTATUS
*&---------------------------------------------------------------------*
*& Form FM_USERCOMMAND
*&---------------------------------------------------------------------*
* text: Form to react according to the user action.
*----------------------------------------------------------------------*
* -->LV_OKCODE text: used to capture the function code
* of the user-defined push-buttons
* -->L_SELFIELD text: Holding the lines that are selected.
*----------------------------------------------------------------------*
FORM fm_usercommand USING c_lv_okcode TYPE sy-ucomm str_ls_selfield TYPE slis_selfield.
* Workarea
DATA: str_ls_data TYPE zbmm_s0324,
str_ls_eina TYPE eina,
str_ls_eine TYPE eine,
str_ls_reg_eina TYPE eina,
str_ls_eina_old TYPE eina,
str_ls_eine_old TYPE eine,
c_lv_count TYPE integer.
CASE c_lv_okcode.
* when the info record is double clicked,
* then the transaction me12(change info record) will be called for that record
WHEN'&IC1'.
IF str_ls_selfield-fieldname = 'MATNR'.
READTABLE itab_gt_data INTO str_ls_data INDEX str_ls_selfield-tabindex.
IF sy-subrc EQ0.
SETPARAMETERID'LIF'field str_ls_data-lifnr.
SETPARAMETERID'MAT'field str_ls_data-matnr.
SETPARAMETERID'EKO'field str_ls_data-ekorg.
SETPARAMETERID'WRK'field str_ls_data-werks.
SETPARAMETERID'INF'field str_ls_data-infnr.
CALLTRANSACTION'ME12'ANDSKIPFIRSTSCREEN.
ENDIF.
ENDIF.
* when the button "Deleting Complete Info Record" is selected,
* the flag is created in LOEKZ feild of eina table for the respective info record number.
WHEN'DCIR'.
LOOPAT itab_gt_data INTO str_ls_data
WHERE chk = ct_gc_flag.
IF str_ls_data-loekz_eina EQ'X'.
MESSAGE i610(ZBMM_0001)WITH str_ls_data-infnr.
CONTINUE.
ENDIF.
* Read inforecord from eina
READTABLE itab_gt_eina INTO str_ls_eina
WITHKEY infnr = str_ls_data-infnr.
IF sy-subrc EQ0.
* Read inforecord from eine
READTABLE itab_gt_eine INTO str_ls_eine
WITHKEY infnr = str_ls_data-infnr.
IF sy-subrc EQ0.
MOVE str_ls_eina TO str_ls_eina_old.
str_ls_eina-loekz = ct_gc_flag.
ENDIF.
* Update LOEKZ field in eina
CALLFUNCTION'ME_UPDATE_INFORECORD'INUPDATE TASK
EXPORTING
xeina = str_ls_eina
xeine = str_ls_eine
yeina = str_ls_eina_old
yeine = str_ls_eine
reg_eina = str_ls_reg_eina.
ENDIF.
* docu: post conditions (RV_CONDITION_SAVE)
CALLFUNCTION'RV_CONDITION_SAVE'.
CALLFUNCTION'RV_CONDITION_RESET'
EXPORTING
free_memory = 'X'.
* docu: general (EINA-texts, COMMIT_TEXT)
CALLFUNCTION'COMMIT_TEXT'
EXPORTING
object = 'EINA'.
COMMITWORK.
IF sy-subrc EQ0AND str_ls_data-loekz_eina NE'X'.
MESSAGE i608(ZBMM_0001)WITH str_ls_data-infnr.
ENDIF.
ENDLOOP.
* when the button "Deleting Complete Purchase View Record" is selected,
* the flag is created in LOEKZ feild of eine table for the respective info record number.
WHEN'DPVIR'.
LOOPAT itab_gt_data INTO str_ls_data
WHERE chk = ct_gc_flag.
IF str_ls_data-loekz_eine EQ'X'.
MESSAGE i612(ZBMM_0001)WITH str_ls_data-infnr.
CONTINUE.
ENDIF.
* Read inforecord from eina
READTABLE itab_gt_eina INTO str_ls_eina
WITHKEY infnr = str_ls_data-infnr.
IF sy-subrc EQ0.
* Read inforecord from eine
READTABLE itab_gt_eine INTO str_ls_eine
WITHKEY infnr = str_ls_data-infnr.
IF sy-subrc EQ0.
MOVE str_ls_eine TO str_ls_eine_old.
str_ls_eine-loekz = ct_gc_flag.
ENDIF.
* Update LOEKZ field in eine
CALLFUNCTION'ME_UPDATE_INFORECORD'INUPDATE TASK
EXPORTING
xeina = str_ls_eina
xeine = str_ls_eine
yeina = str_ls_eina
yeine = str_ls_eine_old
reg_eina = str_ls_reg_eina.
ENDIF.
* docu: post conditions (RV_CONDITION_SAVE)
CALLFUNCTION'RV_CONDITION_SAVE'.
CALLFUNCTION'RV_CONDITION_RESET'
EXPORTING
free_memory = 'X'.
* docu: purchasing organization (EINE-texts, COMMIT_TEXT)
CALLFUNCTION'COMMIT_TEXT'
EXPORTING
object = 'EINE'.
COMMITWORK.
IF sy-subrc EQ0AND str_ls_data-loekz_eina NE'X'.
MESSAGE i609(ZBMM_0001)WITH str_ls_eine-infnr.
ENDIF.
ENDLOOP.
ENDCASE.
ENDFORM. "FM_USERCOMMAND
*&---------------------------------------------------------------------*
*& Form FM_POPULATE_LAYOUT
*&---------------------------------------------------------------------*
* text: For adding checkboxes in ALV to select multiple data.
*----------------------------------------------------------------------*
FORM fm_populate_layout .
str_gs_layout-box_fieldname = 'CHK'.
str_gs_layout-box_tabname = 'ITAB_GT_DATA'.
ENDFORM. " FM_POPULATE_LAYOUT
PF - STATUS
OUTPUT
Regards,
TP