objeto de texto para DYNPRO O ALV

Colapsar
X
 
  • Tiempo
  • Mostrar
Limpiar Todo
nuevos mensajes
  • romario2
    Senior Member
    • abr
    • 233

    #1

    objeto de texto para DYNPRO O ALV

    Hola,

    necesitaría saber como usar el custom control para que usuario pueda escribir un texto largo en él. Un objeto para editar y grabar información. Se que se puede hacer también con TEXT EDIT .
    Otra posibilidad es hacerlo por ALV.

    Alguien me puede hechar una mano?

    Saludos
  • Garces
    Senior Member
    • ago
    • 321

    #2
    Acá tienes un ejemplo

    Si lo que buscas es ingresar textos largos, lo más recomendable es que que utilices la clase CL_GUI_TEXTEDIT y lo deposites en un custom control en la dynpro....

    Te envío un ejemplo que espero te sirva...
    NOTA: Ten en cuenta que el nombre de los comandos que estoy tomando en cuenta corresponden a mi barra de status personal....
    Tú deberías crear la tuya propia y asignarle los comandos que gustes....
    Saludos...
    Archivos Adjuntos
    Miguel Ángel Garcés Ramírez

    Comentario

    • DavidXD_XD
      Moderator
      • ago
      • 1255

      #3
      Hola, puedes ver el ejemplo DEMO de sap RSDEMO_DRAG_DROP_EDIT_TREE, esta se encuentra en la transaccion DWDM, aunq el ejemplo de Garces es tbm claro y preciso .... nos cuentas como te fue
      David Carballido Córdova

      Comentario

      • romario2
        Senior Member
        • abr
        • 233

        #4
        gracias

        Muchas gracias Garcés,

        de momento parece que tiene buena pinta tu código.

        Una pregunta, esta variable v_modif : cómo la defines?

        Gracias por vuestra atención

        Comentario

        • Garces
          Senior Member
          • ago
          • 321

          #5
          Originalmente publicado por romario2
          Muchas gracias Garcés,

          de momento parece que tiene buena pinta tu código.

          Una pregunta, esta variable v_modif : cómo la defines?

          Gracias por vuestra atención
          Uy! me olvidé de ponerlo en el código... jejeje
          v_modif es un entero (Type I) con valor cero....
          Sorry y saludos.....
          Miguel Ángel Garcés Ramírez

          Comentario

          • romario2
            Senior Member
            • abr
            • 233

            #6
            guardar texto en container de dynpro

            Hola,

            el código que me proporcionaste va muy bien, ahora quiero incorporarle una función, quiero que el mensaje de texto se pueda guardar en SAP.
            Partimos de un container de Dynpro

            Saludos,

            Comentario

            • chivi82
              Member
              • mar
              • 64

              #7
              Tendrás que utilizar el módulo de función SAVE_TEXT y el COMMIT_TEXT.

              Comentario

              • Garces
                Senior Member
                • ago
                • 321

                #8
                Originalmente publicado por romario2
                Hola,

                el código que me proporcionaste va muy bien, ahora quiero incorporarle una función, quiero que el mensaje de texto se pueda guardar en SAP.
                Partimos de un container de Dynpro

                Saludos,
                Fíjate que en el código que te proporcioné hay un form que se llama 'imprimir_texto' el cual estoy llamando en el PAI con el 'MODULE user_command_100'.
                En este form tienes unallamada al método 'gcl_editor->get_text_as_r3table', cuyos parámetros puedes ver también en el código....

                Si ya tienes el texto en una tabla interna, lo único que tienes que hacer es volcarla a la BD con sentencias INSERT o UPDATE según sea el caso en la tabla correspondiente (que me imagino que sería una 'Z')...

                Espero haberte ayudado
                Saludos
                Miguel Ángel Garcés Ramírez

                Comentario

                • romario2
                  Senior Member
                  • abr
                  • 233

                  #9
                  no pasa datos a tabla

                  Hola,

                  debugando veo que no se rellena ninguna tabla o variable del código que me has proporcionado.

                  Una pregunta, por donde relaciono el container del texto con tu código?

                  Saludos y gracias

                  Comentario

                  • Garces
                    Senior Member
                    • ago
                    • 321

                    #10
                    Ésta sería la manera

                    Originalmente publicado por romario2
                    Hola,

                    debugando veo que no se rellena ninguna tabla o variable del código que me has proporcionado.

                    Una pregunta, por donde relaciono el container del texto con tu código?

                    Saludos y gracias
                    Primero instancias el container en un módulo PBO de la dynpro, pasándole como parámetro 'container_name' el nombre que le pusiste a tu custom_control en la misma dynpro.

                    Luego, el objeto container se pasa como parámetro 'parent' al editor de texto en su constructor al instanciarlo...

                    Código:
                    [FONT=Courier New]DATA: gcl_container TYPE REF TO cl_gui_custom_container.
                    DATA: gcl_editor    TYPE REF TO cl_gui_textedit.
                    [/FONT]
                    [FONT=Courier New]* Instancio el container[/FONT]
                    [FONT=Courier New]CREATE OBJECT gcl_container
                      EXPORTING
                        container_name              = 'V_TEXTO'
                      EXCEPTIONS
                        cntl_error                  = 1
                        cntl_system_error           = 2
                        create_error                = 3
                        lifetime_error              = 4
                        lifetime_dynpro_dynpro_link = 5
                        others                      = 6.[/FONT]
                    [FONT=Courier New][/FONT] 
                    [FONT=Courier New]IF sy-subrc NE 0.
                      MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
                              WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
                    ENDIF.[/FONT]
                    [FONT=Courier New][/FONT] 
                    [FONT=Courier New]* Intancio el editor de texto con el contenedor como 'parent'[/FONT]
                    [FONT=Courier New]CREATE OBJECT gcl_editor
                      EXPORTING
                        parent                      = gcl_container
                        wordwrap_mode               = 2         
                        wordwrap_position           = 228       
                      EXCEPTIONS
                        error_cntl_create           = 1
                        error_cntl_init             = 2
                        error_cntl_link             = 3
                        error_dp_create             = 4
                        gui_type_not_supported      = 5
                        others                      = 6.[/FONT]
                    [FONT=Courier New][/FONT] 
                    [FONT=Courier New]IF sy-subrc NE 0.
                      MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
                              WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
                    ENDIF.[/FONT]
                    Luego en un módulo PAI deberás llamar al método que te indiqué en el post anterior.

                    Código:
                    [FONT=Courier New]DATA: t_texto TYPE LINE OCCURS 0.
                    DATA: w_texto TYPE LINE.[/FONT]
                    [FONT=Courier New][/FONT] 
                    [FONT=Courier New]* Obtengo los datos introducidos en la tabla[/FONT][FONT=Courier New] 't_texto'[/FONT]
                    [FONT=Courier New]CALL METHOD gcl_editor->get_text_as_r3table
                      IMPORTING
                        table                  = t_texto
                        is_modified            = v_modif
                      EXCEPTIONS
                        error_dp               = 1
                        error_cntl_call_method = 2
                        error_dp_create        = 3
                        potential_data_loss    = 4
                        others                 = 5.[/FONT]
                    [FONT=Courier New]IF sy-subrc NE 0.
                      MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
                              WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
                    ENDIF.[/FONT]
                    [FONT=Courier New][/FONT] 
                    [FONT=Courier New]* En este punto deberías tener en la tabla 't_texto' lo que[/FONT]
                    [FONT=Courier New]* has ingresado en el [/FONT][FONT=Courier New]text_editor. Cada entrada de la tabla[/FONT]
                    [FONT=Courier New]* representa una línea ingresada en el text_editor.[/FONT]
                    [FONT=Courier New][/FONT] 
                    [FONT=Courier New]* Finalmente, libero los recursos del objeto editor.[/FONT]
                    [FONT=Courier New]CALL METHOD gcl_editor->free
                      EXCEPTIONS
                        cntl_error        = 1
                        cntl_system_error = 2.[/FONT]
                    [FONT=Courier New][/FONT] 
                    [FONT=Courier New]IF sy-subrc NE 0.
                       MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
                               WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
                    ENDIF.[/FONT]
                    Espero haber podido ser de utilidad...
                    Saludos...
                    Miguel Ángel Garcés Ramírez

                    Comentario

                    • romario2
                      Senior Member
                      • abr
                      • 233

                      #11
                      sigue sin cargar datos

                      Hola Miguel Ángel,

                      te agradezco de antemano tu valiosa ayuda.

                      De tu última nota extraigo
                      CALL METHOD gcl_editor->free
                      EXCEPTIONS
                      cntl_error = 1
                      cntl_system_error = 2.

                      Éste método no lo tenía.

                      El 1er código lo puse en PBO y el 2o en el PAI tal como dices.
                      El del PAI lo puse en el caso de salvar o guardar.

                      WHEN 'SAVE'.

                      SIGUE SIN CARGAR DATOS, quizás sea porque tengo q creo el container de nuevo otra vez y hacerlo en primer paso, no lo sé.

                      Saludos y muchas gracias

                      Comentario

                      • Garces
                        Senior Member
                        • ago
                        • 321

                        #12
                        Puedes postear tu código para revisarlo y verificar en dónde está tu error???
                        Miguel Ángel Garcés Ramírez

                        Comentario

                        • romario2
                          Senior Member
                          • abr
                          • 233

                          #13
                          código

                          *&---------------------------------------------------------------------*
                          *& Module STATUS_1000 OUTPUT
                          *&---------------------------------------------------------------------*
                          * text
                          *----------------------------------------------------------------------*
                          MODULE status_1000 OUTPUT.

                          SET TITLEBAR 'TITLE'.
                          SET PF-STATUS 'STATUS_1000'.

                          DATA: gcl_container TYPE REF TO cl_gui_custom_container.
                          DATA: gcl_editor TYPE REF TO cl_gui_textedit.

                          * Instancio el container
                          CREATE OBJECT gcl_container
                          EXPORTING
                          container_name = 'TXTAREA_CABECERA'
                          EXCEPTIONS
                          cntl_error = 1
                          cntl_system_error = 2
                          create_error = 3
                          lifetime_error = 4
                          lifetime_dynpro_dynpro_link = 5
                          others = 6.

                          IF sy-subrc NE 0.
                          MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
                          WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
                          ENDIF.

                          * Intancio el editor de texto con el contenedor como 'parent'
                          CREATE OBJECT gcl_editor
                          EXPORTING
                          parent = gcl_container
                          wordwrap_mode = 2
                          wordwrap_position = 228
                          EXCEPTIONS
                          error_cntl_create = 1
                          error_cntl_init = 2
                          error_cntl_link = 3
                          error_dp_create = 4
                          gui_type_not_supported = 5
                          others = 6.

                          IF sy-subrc NE 0.
                          MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
                          WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
                          ENDIF.

                          ENDMODULE. " STATUS_1000 OUTPUT

                          ******************

                          MODULE user_command_1000 INPUT.

                          CASE sy-ucomm.

                          WHEN 'CAN' OR 'FIN' OR 'BACK' OR 'EXIT'.
                          CLEAR sy-ucomm.
                          SET SCREEN 0.
                          LEAVE PROGRAM.

                          WHEN 'SAVE'.



                          DATA: t_texto TYPE line OCCURS 0.
                          DATA: w_texto TYPE line.
                          DATA: v_modif TYPE i.


                          * Obtengo los datos introducidos en la tabla 't_texto'
                          CALL METHOD gcl_editor->get_text_as_r3table
                          IMPORTING
                          table = t_texto
                          is_modified = v_modif
                          EXCEPTIONS
                          error_dp = 1
                          error_cntl_call_method = 2
                          error_dp_create = 3
                          potential_data_loss = 4
                          others = 5.
                          IF sy-subrc NE 0.
                          MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
                          WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
                          ENDIF.

                          * En este punto deberías tener en la tabla 't_texto' lo que
                          * has ingresado en el text_editor. Cada entrada de la tabla
                          * representa una línea ingresada en el text_editor.

                          * Finalmente, libero los recursos del objeto editor.
                          CALL METHOD gcl_editor->free
                          EXCEPTIONS
                          cntl_error = 1
                          cntl_system_error = 2.

                          IF sy-subrc NE 0.
                          MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
                          WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
                          ENDIF.

                          Comentario

                          Trabajando...