Domingo, 14 Septiembre 2014 00:00

Ayudas de búsqueda personalizadas en SAP

Escrito por
Valora este artículo
(4 votos)

Para crear ayudas de búsqueda en SAP, podremos hacerlas a través de la transacción SE11, si queremos que forme parte del diccionario de datos, o podemos crear una ayuda personalizada en tiempo de ejecución. En este artículo veremos varios tipos de ayudas de diccionario de datos, y un ejemplo de una ayuda de búsqueda totalmente personalizada a través de código ABAP.

Para crear la ayuda de búsqueda de diccionario de datos podemos elegir crear una ayuda de búsqueda elemental, a partir de una tabla o a partir de una vista, o podemos crear una ayuda de búsqueda compuesta formada por varias ayudas elementales.

Si nuestro objetivo es personalizar más la ayuda, mostrando casillas de selección para distintos campos de diferentes tablas, y combinar la selección de datos según nuestros criterios podemos usar el ejemplo de código que se muestra en el artículo.

 

 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(zsesWITH '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.

  DATABEGIN OF i_return_tab OCCURS 0.
          INCLUDE STRUCTURE ddshretval.
  DATAEND 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.
...
Visto 1140519 veces Modificado por última vez en Martes, 05 Abril 2016 15:31