Los match code son las ventanas que muestran una lista de valores posibles para un campo al presionar la tecla F4, en este articulo veremos algunas opciones para agregar estos match code en nuestros dynpros,

Utilizando un match code existente

Lo primero que haremos será buscar un match ya creado, luego agregamos un texto en nuestro dynpro y hacemos doble clic sobre él para agregar un match code existente y listo.

dynpro-agregar-matchcode

Definiendo un match code dinámico

Si no encontramos un match code que nos guste podemos definir uno en forma dinámica para nuestro programa usando el evento on value-request, como se muestra en esta imagen. Después de la sentencia field se coloca el nombre del objeto de texto que en este caso se llama MATNR1, luego se crea un modulo (en este caso f4_matnr, pero podemos usar cualquier nombre) para procesar los datos a mostrar en el match code.

value-request

En el modulo que creamos (f4_matnr) ingresamos el siguiente código:

MODULE F4_MATNR INPUT.

  types: begin of type_MATNR,
               MATNR  type MATNR,
               MAKTX  type MAKTX,
         end of type_MATNR.

  data iT_MATNR type standard table of type_MATNR.

  refresh iT_MATNR.

  select MATNR
         MAKTX
         UP TO 50 ROWS "En este caso solo recuperamos algunas filas
  into table IT_MATNR
  from MAKT
  where SPRAS = SY-LANGU.

  CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
    EXPORTING
      retfield        = 'MATNR'
      value_org       = 'S'
      dynpprog        = sy-repid
      dynpnr          = sy-dynnr
      dynprofield     = 'MATNR1'
    TABLES
      value_tab       = it_MATNR
    EXCEPTIONS
      parameter_error = 1
      no_values_found = 2
      others          = 3.
  if sy-subrc <> 0.
    ...
  endif.
ENDMODULE.

Donde básicamente llenamos una tabla interna con valores y luego utilizamos la función F4IF_INT_TABLE_VALUE_REQUEST para mostrar el match code.