PDA

Ver la Versión Completa : Custom control en dynpro


yoabapyupi
21/07/09, 12:30:23
Hola compañeros,

He creado un “Custom control” en un dynpro para que el usuario pueda meter un texto largo. Lo he hecho mediante:

data: gcl_container type ref to cl_gui_custom_container.
data: gcl_editor type ref to cl_gui_textedit.

y “create_object”.

Además he dibujado un botón para visualizar el “custom control” y otro para ocultarlo y es aquí donde tengo problemas. He probado con el método “set_visible” pasándole el valor “0” y va bien para ocultarlo, pero cuando le paso “1” para volver a visualizarlo no funciona.

Otra prueba: El botón que muestra hace los “create object” y el que oculta “set visible”. Ocurre lo mismo, oculta y cuando quiero volver a verlo no funciona.

¿Sabe alguien como puedo hacerlo funcionar?

Muchas gracias.

DavidXD_XD
21/07/09, 16:26:30
Hola, wueno yo tbm he realizado eso pero no lo hice con esa clase, sino usando la interface: c_textedit_control, es muy facil de usar y manipular, te adjunto una parte del codigo, la clase local que he creado es lcl_textedit y hereda de esa clase para poder usar sus metodos, espero te pueda servir :D

yoabapyupi
22/07/09, 12:22:28
Te agradezco el esfuerzo David, pero creo que el código que me has pasado no es lo que estoy buscando. Si he entendido bien, lo que haces es ocultar campos. Yo lo que quiero es ocultar el "custom control" completo.

DavidXD_XD
22/07/09, 14:28:27
Holas, ahhh no entendi bien, si quieres ocultar el Custom Control debes jugar con el LOOP AT screen, el metodo set_visible es para dejar habilitado o inhabilitado a escritura el editor, mas o menos cuando quieres modificar y visualizar un programa ABAP

yoabapyupi
23/07/09, 06:25:31
Ya probé el "loop at screen", poniendo breakpoint y se ven todos los campos del dynpro excepto el "custom control" con lo que no puedo hacerlo invisible.
No se ..... igual me voy olvidando de florituras y lo dejo siempre visible.

ballan
23/07/09, 12:51:12
Para ocultar o mostrar un text edit (esto tambien seria aplicable a casi cualquier objeto) tienes que llamar al metodo set_visible

En tu codigo supongo que crearas el custom container y luego crearas tu editor de texto asociandolo al custom container, algo mas o menos asi

DATA: go_cc TYPE REF TO cl_gui_custom_container,
go_txt TYPE REF TO cl_gui_textedit.

CREATE OBJECT go_cc
EXPORTING
container_name = 'CONTAINER'.

CREATE OBJECT go_txt
EXPORTING
parent = go_cc.

para poder jugar y ocultar o mostrar el control text_edit tendrias que hacer lo siguiente

Con esto lo muestras
go_txt->set_visible( visible = go_txt->visible_true ).

Con esto lo ocultas
go_txt->set_visible( visible = go_txt->visible_false ).

yoabapyupi
24/07/09, 06:31:39
Exacto Ballan, creo el custom container y luego creo el editor de texto asociándolo al custom container como me dices.

Mi idea es presentar la dynpro con dos botones con uno de ellos visualizaría el "custom control" y con el otro lo ocultaría. Este código que me has pasado para visualizar y ocultar entiendo que debe ir en el PAI de la dynpro cada uno asociado a su botón correspondiente.

¿Donde debo poner el código para crear el custom container y el editor de texto asociado al custom container?

PabloGP
24/07/09, 06:55:11
Buenos días,
También tuve ese mismo problema y tras mirar en varios foros llegue a la conclusion q hace un LOOP AT SCREEN y ponerle el setvisible no funciona para los Custom Controls.

Yo consegui arreglaro con esto:

data:
* Create reference to the custom container
custom_container type ref to cl_gui_custom_container,
custom_container1 type ref to cl_gui_custom_container,
* Create reference to the TextEdit control
editor type ref to cl_gui_textedit,
editor2 type ref to cl_gui_textedit.

*.- Se ponen los costum_control de la descripción y la solución en modo lectura.

call method editor2->set_readonly_mode
exporting
readonly_mode = 1.

call method editor->set_readonly_mode
exporting
readonly_mode = 1.

Con esto no lo hago invisible, pero al menos no deja intruducir datos... Pruebalo e investiga si hay algun método similar para hacerlo invisible.

Un saludo

ballan
24/07/09, 13:46:04
El codigo donde creas el custom container y el control text edit debe ir en el PBO

tu PBO deberia quedar mas o menos asi (la definicion de las variables la pongo aqui pero deberia ir en el TOP)

DATA: go_cc TYPE REF TO cl_gui_custom_container,
go_txt TYPE REF TO cl_gui_textedit.

data: gv_visibilidad type char 1 value '1'. "Por defecto lo ponemos visible

if go_cc is initial.

CREATE OBJECT go_cc
EXPORTING
container_name = 'CONTAINER'.

endif.

if go_txt is initial.

CREATE OBJECT go_txt
EXPORTING
parent = go_cc.

endif.

go_txt->set_visible( visible = gv_visibilidad ).

Luego en el PAI deberias colocar el valor adecuado en la variable gv_visibilidad, despues de ejecutarse el PAI volveria a pasar por el PBO y ya
se mostraria o no dependiendo del boton que tocaran, el codigo del PAI seria algo mas o menos asi

case sy-ucomm.

when 'UCOMM_BOTON_MOSTRAR_TEXT_EDIT'.

gv_visibilidad = go_txt->visible_true.

when 'UCOMM_BOTON_OCULTAR_TEXT_EDIT'.

gv_visibilidad = go_txt->visible_false.

endcase.

yoabapyupi
27/07/09, 07:58:48
Si señor, ahora si que si. ¡¡¡Muchas gracias Ballan!!!

Sil12
24/06/10, 16:16:17
Hola!

Estoy haciendo lo mismo para que se ingrese un texto largo en una dynpro pero no se como obtener el texto que escribo en este custom control, y menos se como inicializar este control con un texto definido.

Agradecere mucho me ayuden.


Slds.