‎2008 Aug 09 9:05 AM
hi experts,
i have generated one alv report, inthat one field column got ediatble. I created one button in application tool bar. If i click that button what are changes made in alv, should be saved in database. How can we do please guide me.
regards
raghu
‎2008 Aug 09 9:30 AM
‎2008 Aug 09 9:59 AM
Check out the following code
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
i_callback_program = sy-repid
i_callback_top_of_page = 'TOP-OF-PAGE'
i_callback_user_command = c_user_command
i_callback_pf_status_set = c_pf_status_set
it_fieldcat = fieldcatalog[]
i_save = 'X'
TABLES
t_outtab = it_zb17_bond_status_pending[]
EXCEPTIONS
program_error = 1
OTHERS = 2.
ENDFORM. "DISPLAY
----
Form set_pf_status
*----
Set status
----
FORM pf_status_set USING rt_extab TYPE slis_t_extab. "#EC CALLED
SET PF-STATUS 'ST_RECEIVED'.
ENDFORM. "PF_STATUS_SET
----
Form user_command
*----
*
----
FORM user_command USING lv_ucomm TYPE sy-ucomm
lv_selfield TYPE slis_selfield. "#EC CALLED
CASE lv_ucomm.
WHEN 'RECEIVED'.
LOOP AT it_bond_17_status INTO wa_bond_17_status.
*
ENDLOOP.
FREE MEMORY ID 'ZRECEIVED'.
EXPORT it_bond_17_status TO MEMORY ID 'ZRECEIVED'.
CALL TRANSACTION 'ZST_RECEIVED'.
WHEN '&DATA_SAVE'.
LOOP AT it_zb17_bond_status_pending INTO wa_bond_17_status.
IF NOT wa_bond_17_status-crdat IS INITIAL.
CALL FUNCTION 'CONVERT_DATE_TO_INTERNAL'
EXPORTING
date_external = wa_bond_17_status-crdat
ACCEPT_INITIAL_DATE =
IMPORTING
DATE_INTERNAL =
EXCEPTIONS
date_external_is_invalid = 1
OTHERS = 2
.
IF sy-subrc <> 0.
RAISE date_external_is_invalid.
ELSE.
CLEAR: wa_zb17_bond.
wa_zb17_bond-mblnr = wa_bond_17_status-mblnr.
wa_zb17_bond-mjahr = wa_bond_17_status-budat+0(4).
wa_zb17_bond-budat = wa_bond_17_status-budat.
wa_zb17_bond-crdat = wa_bond_17_status-crdat.
APPEND wa_zb17_bond to it_zb17_bond_update.
CLEAR: wa_bond_17_status.
ENDIF.
ENDIF.
ENDLOOP.
IF NOT it_zb17_bond_update[] IS INITIAL.
UPDATE zb17_bond FROM TABLE it_zb17_bond_update.
ENDIF.
IF sy-subrc = 0.
COMMIT WORK.
ENDIF.
call transaction 'ZST_PENDING'.
ENDCASE.
ENDFORM. "USER_COMMAND
‎2008 Aug 09 10:48 AM
You need use the Function moduel in the user command to update the internal table with the modified values.
GET_GLOBALS_FROM_SLVC_FULLSCR
follow the sample code.
REPORT ZTEST_ALV_CHECK MESSAGE-ID ZZ .
TYPE-POOLS: SLIS.
DATA: X_FIELDCAT TYPE SLIS_FIELDCAT_ALV,
IT_FIELDCAT TYPE SLIS_T_FIELDCAT_ALV,
L_LAYOUT TYPE SLIS_LAYOUT_ALV,
X_EVENTS TYPE SLIS_ALV_EVENT,
IT_EVENTS TYPE SLIS_T_EVENT.
DATA: BEGIN OF ITAB OCCURS 0,
VBELN LIKE VBAK-VBELN,
POSNR LIKE VBAP-POSNR,
CHK(10),
END OF ITAB.
SELECT VBELN
POSNR
FROM VBAP
UP TO 20 ROWS
INTO TABLE ITAB.
X_FIELDCAT-FIELDNAME = 'CHK'.
X_FIELDCAT-TABNAME = 'ITAB'.
X_FIELDCAT-COL_POS = 1.
X_FIELDCAT-INPUT = 'X'.
X_FIELDCAT-EDIT = 'X'.
APPEND X_FIELDCAT TO IT_FIELDCAT.
CLEAR X_FIELDCAT.
X_FIELDCAT-FIELDNAME = 'VBELN'.
X_FIELDCAT-SELTEXT_L = 'VBELN'.
X_FIELDCAT-HOTSPOT = 'X'.
X_FIELDCAT-TABNAME = 'ITAB'.
X_FIELDCAT-COL_POS = 2.
APPEND X_FIELDCAT TO IT_FIELDCAT.
CLEAR X_FIELDCAT.
X_FIELDCAT-FIELDNAME = 'POSNR'.
X_FIELDCAT-SELTEXT_L = 'POSNR'.
X_FIELDCAT-TABNAME = 'ITAB'.
X_FIELDCAT-COL_POS = 3.
APPEND X_FIELDCAT TO IT_FIELDCAT.
CLEAR X_FIELDCAT.
*L_LAYOUT-ZEBRA = 'X'.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
I_CALLBACK_PROGRAM = SY-REPID
IS_LAYOUT = L_LAYOUT
I_CALLBACK_PF_STATUS_SET = 'STATUS'
I_CALLBACK_USER_COMMAND = 'USER_COMMAND'
IT_FIELDCAT = IT_FIELDCAT
TABLES
T_OUTTAB = ITAB
EXCEPTIONS
PROGRAM_ERROR = 1
OTHERS = 2.
IF SY-SUBRC 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
FORM STATUS USING P_EXTAB TYPE SLIS_T_EXTAB.
"Set the Button using the staus
"Copy the Standard status from the program SAPLKKBL status
" STANDARD using SE41, and use that here.
"Pf status
SET PF-STATUS 'STATUS' EXCLUDING P_EXTAB.
ENDFORM. " STATUS
FORM USER_COMMAND USING R_UCOMM LIKE SY-UCOMM
RS_SELFIELD TYPE SLIS_SELFIELD.
DATA: GD_REPID LIKE SY-REPID, "Exists
REF_GRID TYPE REF TO CL_GUI_ALV_GRID.
IF REF_GRID IS INITIAL.
CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'
IMPORTING
E_GRID = REF_GRID.
ENDIF.
IF NOT REF_GRID IS INITIAL.
CALL METHOD REF_GRID->CHECK_CHANGED_DATA .
ENDIF.
CASE R_UCOMM.
WHEN 'SAVE'.
"Here you will get the data(along with modified rows)
"Filter the modified rows and update to DB.
ENDCASE.
RS_SELFIELD-refresh = 'X'.
break-point.
ENDFORM. "USER_COMMANDRegards
Vijay Babu Dudla