A continuación creamos una ayuda elemental basada en la tabla de ejemplo SPFLI, para el campo CARRID, en la que además se visualizará el campo CONNID, si deseasemos obtener los datos combinadaos con otras tablas podríamos basar la ayuda en una vista en lugar de una tabla.
Para seleccionar si queremos obtener los datos de tablas o de vistas, pulsaremos sobre "Método de selección", y elegiremos la opción deseada.
Si seleccionamos en "Tipo de diálogo" la opción D, se visualizarán directamente los datos al pulsar la ayuda, si marcamos la opción A se mostrará una ayuda que solicite valores para los campos, y en función de los valores introducidos, mostrará los datos correspondientes.
Las ayudas de búsqueda compuestas a partir de varias ayudas elementales se visualizarán en pestañas separadas.
Para utilizar la opción de vista, deberemos utilizar una existente o crearla previamente desde la SE11 como "Vista de ayuda". El nivel de personalización vendrá determinado por las propias limitaciones de una vista, tablas relacionadas por medio de claves, ... Para seleccionar de distintas tablas basándonos en diferentes criterios y uniéndolos como queramos, podemos crearnos una ayuda mediante código ABAP.
AYUDA DE BÚSQUEDA PARA CAMPOS DE UNA PANTALLA DE SELECCIÓN
Para asociar una ayuda de búsqueda con un campos de una pantalla de selección podemos usar el siguiente ejemplo:
SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME.
SELECT-OPTIONS: s_sel1 FOR tabla-campo MATCHCODE OBJECT zcarrid_f4.
SELECT-OPTIONS: s_sel2 FOR tabla-campo NO INTERVALS NO-EXTENSION
MATCHCODE OBJECT zhelp2.
SELECTION-SCREEN END OF BLOCK b1.
Para crear una ayuda de búsqueda personalizada en código, nos servimos de la función 'F4IF_INT_TABLE_VALUE_REQUEST', pero en este caso añadimos previamente una pantalla de selección personalizada, que nos permitirá introducir datos de selección para la ayuda :
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_param.
PERFORM f_popup_select CHANGING vg_ucomm.
PERFORM f_mostrar_matchcode USING vg_ucomm.
FORM f_popup_select CHANGING p_ucomm.
CLEAR vl_fields. REFRESH it_fields.
* CAMPO SELECCIÓN 1
CLEAR vl_fields.
vl_fields-tabname = 'TABLA_1'.
vl_fields-fieldname = 'CAMPO'.
vl_fields-field_attr = '01'. " 01 Entrada / 02 No Entrada / 04 Invisible
vl_fields-field_obl = ' '. " No Obligatorio
vl_fields-fieldtext = 'Campo tabla'. " Texto descriptivo
APPEND vl_fields TO it_fields.
...
* CAMPO SELECCIÓN N
CLEAR vl_fields.
vl_fields-tabname = 'TABLA_N'.
vl_fields-fieldname = 'CAMPO'.
vl_fields-field_attr = '01'. " 01 Entrada / 02 No Entrada / 04 Invisible
vl_fields-field_obl = ' '. " Campo no Obligatorio
vl_fields-fieldtext = 'Campo N'. " Texto descriptivo
APPEND vl_fields TO it_fields.
CALL FUNCTION 'POPUP_GET_VALUES' " Genera el Pop-up de campos con los matchcodes definidos en las tablas
EXPORTING
popup_title = 'Título'
TABLES
fields = it_fields.
p_ucomm = sy-ucomm.
ENDFORM. " F_POPUP_SELECT
FORM f_mostrar_matchcode USING param_ucomm.
IF param_ucomm NE 'CANC'.
PERFORM f_tratar_campos. " Tratamiento para SELECT. Ejem: Cambia '*' por '%' para usar LIKE.
PERFORM f_matchcode TABLES it_matchcode. " Seleccionamos como queramos, y almacenamos en it_matchcode
IF NOT it_matchcode[] IS INITIAL.
PERFORM f_mostrar TABLES it_matchcode " Tabla con los datos de la ayuda
USING 'CAMPO1' " Campo que se recoge como valor
'P_PARAM' " Parámetro pantalla selección donde se almacena el valor
'Título pop-up'.
ELSE.
MESSAGE i205(zses) WITH 'No se encontraron datos'.
ENDIF.
ENDIF.
ENDFORM. " F_MOSTRAR_MATCHCODE
FORM f_mostrar TABLES i_tabla
USING dl_retfield TYPE dfies-fieldname
dl_nom_campo TYPE help_info-dynprofld
dl_title TYPE c.
DATA: BEGIN OF i_return_tab OCCURS 0.
INCLUDE STRUCTURE ddshretval.
DATA: END OF i_return_tab.
CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
EXPORTING
retfield = dl_retfield
dynprofield = dl_nom_campo
window_title = dl_title
value_org = 'S'
multiple_choice = ' '
TABLES
value_tab = i_tabla
return_tab = i_return_tab
EXCEPTIONS
parameter_error = 1
no_values_found = 2
OTHERS = 3.
* Se carga el valor selecionado en el campo de pantalla
IF sy-subrc EQ 0.
READ TABLE i_return_tab INDEX 1.
MOVE i_return_tab-fieldval TO p_param.
ENDIF.
ENDFORM.
AYUDA DE BÚSQUEDA PARA CELDAS DE UN ALV
Para asociar una ayuda de búsqueda con una celda de un informe ALV de tipo cl_gui_alv_grid, podemos usar el siguiente ejemplo:
Editamos el catálogo de campos activando el campo wa_fieldcat-f4availabl = 'X'. Pero muy importante: no ponemos la tabla y campo de referencia en el ref_table y ref_field, ya que añadiremos el campo a través del método register_f4_for_field :
x_f4-fieldname = 'ZLSCH'.
x_f4-register = 'X'.
APPEND x_f4 TO t_f4.
* Función que activa la opción F4 en ALV
CALL METHOD grid->register_f4_for_fields
EXPORTING
it_f4 = t_f4.
* Adicionando evento ENTER
CALL METHOD grid->register_edit_event
EXPORTING
i_event_id = cl_gui_alv_grid=>mc_evt_enter.
* Evento que captura los cambios realizados
CALL METHOD grid->register_edit_event
EXPORTING
i_event_id = cl_gui_alv_grid=>mc_evt_modified.
...