Inicio > ABAP/4 > Texto largo en DYNPRO (TEXTEDIT)

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.

  1. juan manuel
    28/08/2014 a las 00:04

    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

  1. No trackbacks yet.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: