Un subscreen es una ventana que se carga dentro de otra ventana en un area que se ha determinado previamente en la ventana «padre». Como vimos antes el control tabstrip utilizar subscreen para mostrar el contenido de acuerdo a la pestaña en la que se hace clic, otro uso de los subscreen es reutilizar una pantalla en más de un dynpro, por ejemplo podemos tener un subscreen para mostrar datos de un cliente y mostrarlo en diferentes dynpros.

Para aprender a utilizar subscreen haremos un ejemplo en el que se mostrará una vista básica y al presionar un botón se mostrará una vista avanzada con más información. Comencemos creando dos dynrpros uno para la vista básica en la que añadiremos algunos cuantos objetos y otro dynpro con más objetos para la vista avanzada, ambos de tipo subscreen.

crear-subscreen

Ahora creemos un dynpro de tipo Normal e ingresamos en el layout para agregar un control de tipo Area subscreen, para este ejemplo lo vamos a nombrar VISTA y también agregamos un botón con el codigo de función CAMBIAR.

crear-area-subscreen

Para mostrar subscreen en un dynpro debemos agregar dos sentencias CALL SUBSCREEN en la pestaña Log.proceso del dynpro, como se muestra a continuación:

PROCESS BEFORE OUTPUT.
  MODULE STATUS_1002.
  call SUBSCREEN vista INCLUDING sy-repid mi_subscreen.

PROCESS AFTER INPUT.
  MODULE USER_COMMAND_1002.
  call SUBSCREEN vista.

En la primera sentencia se configura un programa (sy-repid) y un dynpro de tipo subscreen (variable mi_subscreen de tipo dynnr) para cargar en un control (para nuestro ejemplo anteriormente creamos un objeto llamado VISTA en un dynpro de tipo normal). En la segunda sentencia call subcreen se hace la llamada del subscreen.

Ahora debemos inicializar la variable mi_subscreen, para ello creemos un modulo llamado inicia_1002 en el evento process before output y agregamos este código:

MODULE INICIALIZA_1002 OUTPUT.
  IF mi_subscreen is INITIAL.
    mi_subscreen = '1000'. "cambiar por tu dynpro de vista basica
  ENDIF.
ENDMODULE.

Luego creemos un modulo para procesar las entradas y agregamos el siguiente código, cambiando los números de dynpro 1000 y 1001 por los que correspondan a nuestra vista basica y vista avanzada respectivamente.

MODULE USER_COMMAND_1002 INPUT.
  save_ok =  ok_code.
  clear ok_code.

  CASE save_ok.
    WHEN 'CAMBIAR'.
      IF MI_SUBSCREEN = '1000'.
        MI_SUBSCREEN = '1001'.
      ELSE.
        MI_SUBSCREEN = '1000'.
      ENDIF.
    WHEN OTHERS.
  ENDCASE.
ENDMODULE.

Ahora cuando ejecutamos nuestro programa al presionar el botón se alternará entre las vistas básica y avanzada. Debido que en el evento process before output configuramos el dynpro a cargar de forma dinámica (utilizando una variable), al modificar el valor de esta variable cambiamos el dynpro (subscreen) que se despliega como salida.