Anuncio

Colapsar
No hay anuncio todavía.

¿Como habilitar y deshabilitar campos de una dynpro?

Colapsar
X
 
  • Filtrar
  • Tiempo
  • Mostrar
Limpiar Todo
nuevos mensajes

  • ¿Como habilitar y deshabilitar campos de una dynpro?

    Necesito poder habilitar y deshabilitar campos de una dynpro por medio de un botón. Si tienen alguna documentacion o sugerencia por favor haganmela saber. Gracias!

  • #2
    Hola!

    Puedes usar la tabla SCREEN para ello.
    Esta tabla no necesita ser declarada, ya está implícito en el programa y no tiene work area.
    Cuando creas un dynpro y colocas campos en él, le puedes asignar unos atributos como: sólo de salida, de entrada, resaltado, obligatorio...

    En tiempo de ejecución puedes cambiar estos atributos para cambiar el comportamiento de los campos según se requiera.

    Durante el PBO de tu DYNPRO, llama a un MODULE que haga un LOOP AT SCREEN y puedas manipular los campos en pantalla modificando sus atributos.

    LOOP AT SCREEN.
    Modificar campos de SCREEN.
    MODIFY SCREEN.
    ENDLOOP.

    Para activar un campo usa '1', para desactivarlo usa '0'. Si no tiene valor, usará el atributo que le pusiste al crear el dynpro.

    La estructura SCREEN tiene algunos campos como:
    NAME (Nombre del campo)
    GROUP1, GROUP2, GROUP3 y GROUP4 (Identifica grupos de campos)
    REQUIRED (Si tiene '1', se hará campo obligatorio)
    INPUT (Si tiene '1', será de entrada, '0' no lo será)
    INVISIBLE (Si tiene '1', se ocultará el campo, '0' será visible)
    ACTIVE (Si tiene '1' se habilitará, '0' se deshabilitará).

    Dependiendo de qué atributos le hayas asignado de manera estática a tus campos (cuando creaste el dynpro) tendrás que usar alguno de esos campo o una combinación de ellos.
    Por ejemplo, puede que usando ACTIVE = 1 no se muestre o active, tal vez tengas que usar INVISIBLE = 0 o viceversa... más o menos

    Si lo quieres hacer por un botón, ese botón debe tener un código de función. Digamos que su código de función es OCUL (de ocultar).
    Entonces, quedaría más o menos como:

    IF SY-UCOMM = 'OCUL'.
    LOOP AT SCREEN.
    " Digamos que quieres ocultar el campo que se llama WA_DATA-CENTRO:
    IF screen-name = 'WA_DATA-CENTRO'.
    screen-invisible = 1.
    MODIFY SCREEN.
    ENDIF.
    ENDLOOP.
    ENDIF.

    Puedes agrugar tus campos en el dynpro usando grupos (hasta cuatro grupos se pueden usar). Con ello afectarás a todos los campos que tengan el grupo. Los campos son GROUP1 a GROUP4.
    Así, en tu código del LOOP AT SCREEN validarías el grupo:

    LOOP AT SCREEN.
    IF screen-group1 = 'MOD'.
    screen-active = 0.
    MODIFY SCREEN.
    ENDIF.
    ENDLOOP.

    Más o menos sería así:

    PROCESS BEFORE OUTPUT.
    MODULE oculta_campos.

    MODULE OCULTA_CAMPOS OUTPUT.
    IF SY-UCOMM = 'MOD'.
    LOOP AT SCREEN.
    Modifica aquí los campos según requieras.
    MODIFY SCREEN.
    ENDLOOP.
    ENDIF.
    ENDMODULE.

    Es imperativo que sea en el PBO, ya que al inicio del PBO se copian los atributos estáticos y los campos regresan a la normalidad tal como fueron creados.
    Si lo hicieses en el PAI, el PBO sobreescribirá los atributos que le hayas asignado.

    Consulta la ayuda de MODIFY SCREEN para mayor información al respecto.

    Saludos!

    Comentario


    • #3
      Muchisimas Gracias!! Voy a probarlo

      Comentario

      Trabajando...
      X