Skip to content

Instantly share code, notes, and snippets.

@fanian
Last active September 27, 2023 11:26
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save fanian/5e6ebd0762cb76cdbaeda71065af3391 to your computer and use it in GitHub Desktop.
Save fanian/5e6ebd0762cb76cdbaeda71065af3391 to your computer and use it in GitHub Desktop.
ABAP MVC
*&---------------------------------------------------------------------*
*& Report YGDF_REPORT_MVC
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*
REPORT YGDF_REPORT_MVC.
INCLUDE: ygdf_report_mvc_scr,
ygdf_report_mvc_model,
ygdf_report_mvc_view,
ygdf_report_mvc_controller
.
DATA: gc_controller TYPE REF TO report_controller.
INITIALIZATION.
CREATE OBJECT gc_controller.
gc_controller->initialization( ).
AT SELECTION-SCREEN OUTPUT.
gc_controller->selection_screen_o( ).
AT SELECTION-SCREEN.
gc_controller->selection_screen( ).
START-OF-SELECTION.
gc_controller->start_of_selection( ).
END-OF-SELECTION.
gc_controller->end_of_selection( ).
TABLES: ytsd_cab_pedido.
SELECTION-SCREEN BEGIN OF SCREEN 110 AS SUBSCREEN. " Filtros
SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text-001.
SELECT-OPTIONS: fil_num FOR ytsd_cab_pedido-numero_pedido,
fil_data FOR ytsd_cab_pedido-data_pedido.
SELECTION-SCREEN END OF BLOCK b1.
SELECTION-SCREEN END OF SCREEN 110.
SELECTION-SCREEN BEGIN OF SCREEN 120 AS SUBSCREEN. " Modificação
SELECTION-SCREEN BEGIN OF BLOCK b2 WITH FRAME TITLE text-001.
PARAMETERS: mod_num TYPE ytsd_cab_pedido-numero_pedido,
mod_data TYPE ytsd_cab_pedido-data_pedido,
mod_canc AS CHECKBOX DEFAULT ''.
SELECTION-SCREEN END OF BLOCK b2.
SELECTION-SCREEN PUSHBUTTON 1(15) mod_btn USER-COMMAND modif_reg.
SELECTION-SCREEN END OF SCREEN 120.
SELECTION-SCREEN BEGIN OF TABBED BLOCK tab_screen FOR 8 lines.
SELECTION-SCREEN TAB (20) filt USER-COMMAND filter_evt DEFAULT SCREEN 110.
SELECTION-SCREEN TAB (20) modi USER-COMMAND modify_evt DEFAULT SCREEN 120.
SELECTION-SCREEN END OF BLOCK tab_screen.
CLASS report_controller DEFINITION.
PUBLIC SECTION.
DATA: view TYPE REF TO report_view,
model TYPE REF TO report_model.
METHODS: constructor,
initialization,
selection_screen_o,
selection_screen,
start_of_selection,
end_of_selection.
ENDCLASS.
CLASS report_controller IMPLEMENTATION.
METHOD constructor.
CREATE OBJECT view.
CREATE OBJECT model.
ENDMETHOD.
METHOD initialization.
me->view->initialization( ).
ENDMETHOD.
METHOD selection_screen_o.
me->view->selection_screen_o( ).
ENDMETHOD.
METHOD selection_screen.
me->view->selection_screen( model ).
ENDMETHOD.
METHOD start_of_selection.
me->model->start_of_selection( ).
ENDMETHOD.
METHOD end_of_selection.
me->view->end_of_selection( me->model ).
ENDMETHOD.
ENDCLASS.
CLASS report_model DEFINITION.
PUBLIC SECTION.
DATA: t_cab_pedido TYPE TABLE OF ytsd_cab_pedido,
s_cab_pedido TYPE ytsd_cab_pedido.
METHODS: start_of_selection,
get_cab_pedido,
init_modify_ped,
validate_screen_modify,
modify_reg.
ENDCLASS.
CLASS report_model IMPLEMENTATION.
METHOD start_of_selection.
me->get_cab_pedido( ).
ENDMETHOD.
METHOD get_cab_pedido.
* DO 5 TIMES.
* s_cab_pedido-numero_pedido = sy-index.
* s_cab_pedido-data_pedido = sy-datum.
* s_cab_pedido-cancelado = 'X'.
* MODIFY ytsd_cab_pedido FROM s_cab_pedido.
* ENDDO.
SELECT *
FROM ytsd_cab_pedido
INTO TABLE t_cab_pedido
WHERE numero_pedido IN fil_num
AND data_pedido IN fil_data.
ENDMETHOD.
METHOD init_modify_ped.
me->validate_screen_modify( ).
me->modify_reg( ).
ENDMETHOD.
METHOD validate_screen_modify.
IF mod_num IS INITIAL.
MESSAGE 'Numero Pedido obrigatório' TYPE 'E'.
ENDIF.
IF mod_data IS INITIAL.
MESSAGE 'Data Pedido obrigatória' TYPE 'E'.
ENDIF.
ENDMETHOD.
METHOD modify_reg.
DATA: pedido_cab TYPE ytsd_cab_pedido,
msg TYPE string.
pedido_cab-numero_pedido = mod_num.
pedido_cab-data_pedido = mod_data.
pedido_cab-cancelado = mod_canc.
MODIFY ytsd_cab_pedido FROM pedido_cab.
msg = mod_num.
CONCATENATE 'Pedido' msg 'salvo com sucesso' INTO msg SEPARATED BY space.
MESSAGE msg TYPE 'S'.
ENDMETHOD.
ENDCLASS.
CLASS report_view DEFINITION.
PUBLIC SECTION.
DATA: salv_alv TYPE REF TO cl_salv_table.
METHODS: initialization,
selection_screen_o,
selection_screen IMPORTING model TYPE REF TO report_model,
end_of_selection IMPORTING model TYPE REF TO report_model,
display_alv IMPORTING model TYPE REF TO report_model,
set_toolbar,
set_fieldcat,
set_text IMPORTING
name TYPE lvc_fname
short TYPE scrtext_s
long TYPE scrtext_l
columns TYPE REF TO cl_salv_columns_table
.
ENDCLASS.
CLASS report_view IMPLEMENTATION.
METHOD initialization.
filt = '@4G@ Filtros'.
modi = '@17@ Criação/Modificação'.
mod_btn = '@2L@ Salvar'.
ENDMETHOD.
METHOD selection_screen_o.
ENDMETHOD.
METHOD selection_screen.
CASE sy-ucomm.
WHEN 'MODIF_REG'.
model->init_modify_ped( ).
WHEN OTHERS.
ENDCASE.
ENDMETHOD.
METHOD end_of_selection.
me->display_alv( model ).
ENDMETHOD.
METHOD display_alv.
cl_salv_table=>factory(
IMPORTING r_salv_table = salv_alv
CHANGING t_table = model->t_cab_pedido
).
me->set_toolbar( ).
me->set_fieldcat( ).
salv_alv->display( ).
ENDMETHOD.
METHOD set_toolbar.
DATA: functions TYPE REF TO cl_salv_functions_list.
functions = salv_alv->get_functions( ).
functions->set_all( ).
ENDMETHOD.
METHOD set_fieldcat.
DATA: columns TYPE REF TO cl_salv_columns_table,
column TYPE REF TO cl_salv_column.
columns = salv_alv->get_columns( ).
* columns->set_optimize( abap_true ).
column = columns->get_column( 'MANDT' ).
column->set_visible( abap_false ).
me->set_text( EXPORTING name = 'NUMERO_PEDIDO' short = 'N Pedido' long = 'Número Pedido' columns = columns ).
me->set_text( EXPORTING name = 'DATA_PEDIDO' short = 'D Pedido' long = 'Data Pedido' columns = columns ).
ENDMETHOD.
METHOD set_text.
DATA: column TYPE REF TO cl_salv_column.
column = columns->get_column( name ).
column->set_short_text( short ).
column->set_long_text( long ).
ENDMETHOD.
ENDCLASS.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment