Texto largo en DYNPRO (TEXTEDIT)
Caso: se requiere crear un POPUP en donde pueda agregar un texto largo, similar al texto libre usado en MM (ej: texto de cabecera en Solicitudes de Pedido, ME51n).
Solución: Usando la clase cl_gui_textedit, vamos a crear una DYNPRO como la de la figura siguiente, que contiene un Custom Container, un botón de volver y otro de grabar datos, además de unos botones estándar que contiene un importar/exportar texto y las funciones de copiar, pegar, etc.
1. Creamos la DYNPRO
Creamos en el Screen Painter una DYNPRO con un Control Custom Container llamado TEXTEDITOR1 y con un botón para volver a la pantalla anterior (VOLVER) y otro para grabar los datos (GRABAR).
2. Armamos el código asociado
CLASS cl_gui_cfw DEFINITION LOAD. DATA: g_editor TYPE REF TO cl_gui_textedit, g_editor_container TYPE REF TO cl_gui_custom_container, g_mytable(line_length) TYPE c OCCURS 0, g_mycontainer(30) TYPE c VALUE 'TEXTEDITOR1'. En la DYNPRO creada (la mía era la 0020): PROCESS BEFORE OUTPUT. MODULE pbo_0020. * PROCESS AFTER INPUT. MODULE user_command_0020. *&---------------------------------------------------------------------* *& Module PBO_0020 OUTPUT *&---------------------------------------------------------------------* MODULE pbo_0020 OUTPUT. IF g_editor IS INITIAL. * Crea el control container CREATE OBJECT g_editor_container EXPORTING container_name = g_mycontainer EXCEPTIONS cntl_error = 1 cntl_system_error = 2 create_error = 3 lifetime_error = 4 lifetime_dynpro_dynpro_link = 5. IF sy-subrc NE 0. * add your handling ENDIF. * TextEdit Control CREATE OBJECT g_editor EXPORTING parent = g_editor_container wordwrap_mode = * cl_gui_textedit=>wordwrap_off cl_gui_textedit=>wordwrap_at_fixed_position * cl_gui_textedit=>WORDWRAP_AT_WINDOWBORDER wordwrap_position = line_length wordwrap_to_linebreak_mode = cl_gui_textedit=>true. REFRESH g_mytable. " Para inicializar la tabla ENDIF. ENDMODULE. " PBO_0020 OUTPUT *&---------------------------------------------------------------------* *& Module PAI_0020 INPUT *&---------------------------------------------------------------------* module user_command_0020 input. g_okcode = sy-ucomm. CLEAR sy-ucomm. CASE g_okcode. WHEN 'BACK' OR 'CANCEL' OR 'EXIT' or 'VOLVER'. CLEAR g_okcode. LEAVE TO SCREEN 0. WHEN 'GRABAR'. * Obtengo la tabla desde el control CALL METHOD g_editor->get_text_as_r3table IMPORTING table = g_mytable. CALL METHOD cl_gui_cfw=>flush EXCEPTIONS OTHERS = 1. IF sy-subrc NE 0. * ENDIF. WHEN 'CARGAR'. * Devuelvo la tabla al control CALL METHOD g_editor->set_text_as_r3table EXPORTING table = g_mytable. ENDCASE. endmodule. " PAI_0020 INPUT
3. Grabamos y recuperamos la info a la base de datos.
En el GRABAR, la tabla con los resultados está en g_mytable, que es una tabla interna char de 256 (luego tendría que grabar eso en la base de datos), asimismo en el CARGAR vemos que levanto el texto para visualizarlo en pantalla.
Muy bueno, tengo una consulta al grabar eso en una base de datos como seria la tabla de la base de datos? seria la tabla de la base de datos
Hola, fijate si te orienta el post https://abapers.wordpress.com/2011/02/07/manejo-de-textos-en-sap/