Вы находитесь на странице: 1из 3

*&---------------------------------------------------------------------*

*& Report ZTEST_NP_EDIT_SALV


*& Overcome the restriction of the SALV model using the power of the
*& Object Oriented ABAP
*&---------------------------------------------------------------------*
REPORT ZTEST_NP_EDIT_SALV.
*----------------------------------------------------------------------*
* Define the Local class inheriting from the CL_SALV_MODEL_LIST
* to get an access of the model, controller and adapter which inturn
* provides the Grid Object
*----------------------------------------------------------------------*
CLASS LCL_SALV_MODEL DEFINITION INHERITING FROM CL_SALV_MODEL_LIST.
PUBLIC SECTION.
DATA: O_CONTROL TYPE REF TO CL_SALV_CONTROLLER_MODEL,
O_ADAPTER TYPE REF TO CL_SALV_ADAPTER.
METHODS:
GRABE_MODEL
IMPORTING
IO_MODEL TYPE REF TO CL_SALV_MODEL,
GRABE_CONTROLLER,
GRABE_ADAPTER.
PRIVATE SECTION.
DATA: LO_MODEL TYPE REF TO CL_SALV_MODEL.
ENDCLASS.
"LCL_SALV_MODEL DEFINITION
*----------------------------------------------------------------------*
* Event handler for the added buttons
*----------------------------------------------------------------------*
CLASS LCL_EVENT_HANDLER DEFINITION.
PUBLIC SECTION.
METHODS:
ON_USER_COMMAND FOR EVENT ADDED_FUNCTION OF CL_SALV_EVENTS
IMPORTING E_SALV_FUNCTION.
ENDCLASS.
"lcl_event_handler DEFINITION
*----------------------------------------------------------------------*
* Local Report class - Definition
*----------------------------------------------------------------------*
CLASS LCL_REPORT DEFINITION.
PUBLIC SECTION.
DATA: TABLENAME(15) TYPE C.
*
TABLENAME = 'ZUSAGE'.
TYPES: ty_t_sflights TYPE STANDARD TABLE OF sflights.
*
TYPES: TY_T_SFLIGHTS TYPE STANDARD TABLE OF ZUSAGE.
DATA: T_DATA TYPE TY_T_SFLIGHTS.
DATA: O_SALV
TYPE REF TO CL_SALV_TABLE.
DATA: O_SALV_MODEL TYPE REF TO LCL_SALV_MODEL.
METHODS:
GET_DATA,
GENERATE_OUTPUT.
ENDCLASS.
"lcl_report DEFINITION
*----------------------------------------------------------------------*
* Global data
*----------------------------------------------------------------------*
DATA: LO_REPORT TYPE REF TO LCL_REPORT.
*----------------------------------------------------------------------*
* Start of selection
*----------------------------------------------------------------------*
START-OF-SELECTION.
CREATE OBJECT LO_REPORT.
LO_REPORT->GET_DATA( ).

LO_REPORT->GENERATE_OUTPUT( ).
*----------------------------------------------------------------------*
* Local Report class - Implementation
*----------------------------------------------------------------------*
CLASS LCL_REPORT IMPLEMENTATION.
METHOD GET_DATA.
* test data
SELECT * FROM Sflights
INTO TABLE ME->T_DATA
UP TO 30 ROWS.
ENDMETHOD.
"get_data
METHOD GENERATE_OUTPUT.
*...New ALV Instance ...............................................
TRY.
CL_SALV_TABLE=>FACTORY(
EXPORTING
*
r_container
= w_alv1
LIST_DISPLAY = ABAP_FALSE
IMPORTING
R_SALV_TABLE = O_SALV
CHANGING
T_TABLE
= T_DATA ).
CATCH CX_SALV_MSG.
"#EC NO_HANDLER
ENDTRY.
*...PF Status.......................................................
* Add MYFUNCTION from the report SALV_DEMO_TABLE_EVENTS
O_SALV->SET_SCREEN_STATUS(
PFSTATUS
= 'SALV_STANDARD'
REPORT
= 'SALV_DEMO_TABLE_EVENTS'
SET_FUNCTIONS = O_SALV->C_FUNCTIONS_ALL ).
*...Event handler for the button.....................................
DATA: LO_EVENTS TYPE REF TO CL_SALV_EVENTS_TABLE,
LO_EVENT_H TYPE REF TO LCL_EVENT_HANDLER.
* event object
LO_EVENTS = O_SALV->GET_EVENT( ).
* event handler
CREATE OBJECT LO_EVENT_H.
* setting up the event handler
SET HANDLER LO_EVENT_H->ON_USER_COMMAND FOR LO_EVENTS.
*...Get Model Object ...............................................
DATA: LO_ALV_MOD TYPE REF TO CL_SALV_MODEL.
* Narrow casting
LO_ALV_MOD ?= O_SALV.
* object for the local inherited class from the CL_SALV_MODEL_LIST
CREATE OBJECT O_SALV_MODEL.
* grabe model to use it later
CALL METHOD O_SALV_MODEL->GRABE_MODEL
EXPORTING
IO_MODEL = LO_ALV_MOD.
*...Generate ALV output ...............................................
O_SALV->DISPLAY( ).
ENDMETHOD.
"generate_output
ENDCLASS.
"lcl_report IMPLEMENTATION
*----------------------------------------------------------------------*
* LCL_SALV_MODEL implementation
*----------------------------------------------------------------------*
CLASS LCL_SALV_MODEL IMPLEMENTATION.
METHOD GRABE_MODEL.
* save the model
LO_MODEL = IO_MODEL.

ENDMETHOD.
"grabe_model
METHOD GRABE_CONTROLLER.
* save the controller
O_CONTROL = LO_MODEL->R_CONTROLLER.
ENDMETHOD.
"grabe_controller
METHOD GRABE_ADAPTER.
* save the adapter from controller
O_ADAPTER ?= LO_MODEL->R_CONTROLLER->R_ADAPTER.
ENDMETHOD.
"grabe_adapter
ENDCLASS.
"LCL_SALV_MODEL IMPLEMENTATION
*----------------------------------------------------------------------*
* Event Handler for the SALV
*----------------------------------------------------------------------*
CLASS LCL_EVENT_HANDLER IMPLEMENTATION.
METHOD ON_USER_COMMAND.
DATA: LO_GRID TYPE REF TO CL_GUI_ALV_GRID,
LO_FULL_ADAP TYPE REF TO CL_SALV_FULLSCREEN_ADAPTER.
DATA: LS_LAYOUT TYPE LVC_S_LAYO.
CASE E_SALV_FUNCTION.
*
Make ALV as Editable ALV
WHEN 'MYFUNCTION'.
*
Contorller
CALL METHOD LO_REPORT->O_SALV_MODEL->GRABE_CONTROLLER.
*
Adapter
CALL METHOD LO_REPORT->O_SALV_MODEL->GRABE_ADAPTER.
*
Fullscreen Adapter (Down Casting)
LO_FULL_ADAP ?= LO_REPORT->O_SALV_MODEL->O_ADAPTER.
*
Get the Grid
LO_GRID = LO_FULL_ADAP->GET_GRID( ).
*
Got the Grid .. ?
IF LO_GRID IS BOUND.
*
Editable ALV
LS_LAYOUT-EDIT = 'X'.
*
Set the front layout of ALV
CALL METHOD LO_GRID->SET_FRONTEND_LAYOUT
EXPORTING
IS_LAYOUT = LS_LAYOUT.
*
refresh the table
CALL METHOD LO_GRID->REFRESH_TABLE_DISPLAY.
ENDIF.
ENDCASE.
ENDMETHOD.
"on_user_command
ENDCLASS.
"lcl_event_handler IMPLEMENTATION

Вам также может понравиться