Vamos a crear un programa ejecutable implementamos el código fuente del patrón de diseño MVC creando las clases locales LCL_MODELO, LCL_VISTA y LCL_CONTROLADOR.
La clase modelo accede a la tabla de maestros de proveedores (LFA1) para obtener los datos.
Creamos un SELECT-OPTIONS para filtrar los datos por el campo LIFNR.
En la clase que representa la vista, utilizamos el módulo de funciones estándar REUSE_ALV_GRID_DISPLAY para pintar los datos.
En el evento START-OF-SELECTION probaremos todo el desarrollo.
- La solución en código fuente:This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode characters
DATA: gv_acreedor TYPE lifnr. SELECT-OPTIONS so_lifnr FOR gv_acreedor. *----------------------------------------------------------------------* * CLASS lcl_modelo DEFINITION *----------------------------------------------------------------------* * *----------------------------------------------------------------------* CLASS lcl_modelo DEFINITION. PUBLIC SECTION. METHODS: set_modelo, " IMPORTING acreedores LIKE gt_range_acreedor, get_modelo RETURNING VALUE(acreedores) TYPE bbp_lfa1_t. PRIVATE SECTION. DATA table_acreedores TYPE bbp_lfa1_t. ENDCLASS. "lcl_modelo DEFINITION *----------------------------------------------------------------------* * CLASS lcl_modelo IMPLEMENTATION *----------------------------------------------------------------------* * *----------------------------------------------------------------------* CLASS lcl_modelo IMPLEMENTATION. METHOD set_modelo. SELECT * FROM lfa1 INTO TABLE table_acreedores WHERE lifnr IN so_lifnr."acreedores. ENDMETHOD. "set_modelo METHOD get_modelo. acreedores = table_acreedores. ENDMETHOD. "get_modelo ENDCLASS. "lcl_modelo IMPLEMENTATION *----------------------------------------------------------------------* * CLASS lcl_vista DEFINITION *----------------------------------------------------------------------* * *----------------------------------------------------------------------* CLASS lcl_vista DEFINITION. PUBLIC SECTION. METHODS pintar_acreedores IMPORTING acreedores TYPE bbp_lfa1_t. ENDCLASS. "lcl_vista DEFINITION *----------------------------------------------------------------------* * CLASS lcl_vista IMPLEMENTATION *----------------------------------------------------------------------* * *----------------------------------------------------------------------* CLASS lcl_vista IMPLEMENTATION. METHOD pintar_acreedores. DATA lt_datos TYPE TABLE OF lfa1. lt_datos = acreedores. CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY' EXPORTING * I_INTERFACE_CHECK = ' ' * I_BYPASSING_BUFFER = ' ' * I_BUFFER_ACTIVE = ' ' * I_CALLBACK_PROGRAM = ' ' * I_CALLBACK_PF_STATUS_SET = ' ' * I_CALLBACK_USER_COMMAND = ' ' * I_CALLBACK_TOP_OF_PAGE = ' ' * I_CALLBACK_HTML_TOP_OF_PAGE = ' ' * I_CALLBACK_HTML_END_OF_LIST = ' ' i_structure_name = 'LFA1' * I_BACKGROUND_ID = ' ' * I_GRID_TITLE = * I_GRID_SETTINGS = * IS_LAYOUT = * it_fieldcat = lt_fieldcat * IT_EXCLUDING = * IT_SPECIAL_GROUPS = * IT_SORT = * IT_FILTER = * IS_SEL_HIDE = * I_DEFAULT = 'X' * I_SAVE = ' ' * IS_VARIANT = * IT_EVENTS = * IT_EVENT_EXIT = * IS_PRINT = * IS_REPREP_ID = * I_SCREEN_START_COLUMN = 0 * I_SCREEN_START_LINE = 0 * I_SCREEN_END_COLUMN = 0 * I_SCREEN_END_LINE = 0 * I_HTML_HEIGHT_TOP = 0 * I_HTML_HEIGHT_END = 0 * IT_ALV_GRAPHICS = * IT_HYPERLINK = * IT_ADD_FIELDCAT = * IT_EXCEPT_QINFO = * IR_SALV_FULLSCREEN_ADAPTER = * IMPORTING * E_EXIT_CAUSED_BY_CALLER = * ES_EXIT_CAUSED_BY_USER = TABLES t_outtab = lt_datos 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. ENDMETHOD. "pintar_acreedores ENDCLASS. "lcl_vista IMPLEMENTATION *----------------------------------------------------------------------* * CLASS lcl_controlador DEFINITION *----------------------------------------------------------------------* * *----------------------------------------------------------------------* CLASS lcl_controlador DEFINITION. PUBLIC SECTION. METHODS: set_modelo IMPORTING modelo TYPE REF TO lcl_modelo, get_modelo EXPORTING modelo TYPE REF TO lcl_modelo, set_vista IMPORTING vista TYPE REF TO lcl_vista, get_vista EXPORTING vista TYPE REF TO lcl_vista. PRIVATE SECTION. DATA: modelo TYPE REF TO lcl_modelo, vista TYPE REF TO lcl_vista. ENDCLASS. "lcl_controlador DEFINITION *----------------------------------------------------------------------* * CLASS lcl_controlador IMPLEMENTATION *----------------------------------------------------------------------* * *----------------------------------------------------------------------* CLASS lcl_controlador IMPLEMENTATION. METHOD set_modelo. me->modelo = modelo. ENDMETHOD. "set_modelo METHOD get_modelo. modelo = me->modelo. ENDMETHOD. "get_modelo METHOD set_vista. me->vista = vista. me->vista->pintar_acreedores( acreedores = me->modelo->get_modelo( ) ). ENDMETHOD. "set_vista METHOD get_vista. vista = me->vista. ENDMETHOD. "get_vista ENDCLASS. "lcl_controlador IMPLEMENTATION START-OF-SELECTION. DATA: gr_vista TYPE REF TO lcl_vista, gr_modelo TYPE REF TO lcl_modelo, gr_controlador TYPE REF TO lcl_controlador. CREATE OBJECT: gr_vista, gr_modelo, gr_controlador. gr_modelo->set_modelo( ). gr_controlador->set_modelo( modelo = gr_modelo ). gr_controlador->set_vista( vista = gr_vista ). - La pantalla de selección de nuestro programa ejecutable:
- Los resultados obtenidos:
Buenos días, estoy estudiando este modelo MVC, lo copie tal cual y me genera este error.
Clase ZLCL_CONTROLADOR,Método SET_VISTA
Field “GET_MODELO(” is unknown. It is neither in one of the specified
tables nor defined by a “DATA” statement . . . . . . . . . .
agradezco vuestra ayuda
Hola Guillermo,
En la clase lcl_modelo el método get_modelo debería de estar definido en la encapsulación pública tal como se observa el la línea 15 de la primera clase lcl_modelo.
Un saludo.