viernes, 6 de mayo de 2011

Campo por defecto en componente

Siguiendo el post anterior de ampliación de un componente del WebUI voy a contar como poner un campo por defecto en una página de CRM.
Obviamente debemos conocer el componente y la vista que queremos ampliar. Una vez que lo conozcamos ampliamos el componente y la vista y se redefine el método DO_VALIDATE_INPUT. Con este método vamos a poner un filtro por defecto y no va a ser modificable. Utilizando otros métodos es posible poner filtros que sean modificables por los usuarios.
Primero se obtiene el nodo de contexto:
lv_cnode = get_dquery_cnode( ).

El query del nodo:
lr_qs ?= lv_cnode->collection_wrapper->get_first( ).

Y los parámetros del filtro:
lr_col_params = lr_qs->get_selection_params( ).

Recorro los filtros hasta encontrar el que me interesa. Si el filtro tiene valores indicados y no son los que nos interesan los borro. Podríamos borrar directamente, pero así queda como más elegante ;-) :
lv_selection_parameter = lr_col_params->get_first( ).

WHILE lv_selection_parameter IS NOT INITIAL.
  lv_name ?= lv_selection_parameter->get_property( 'ATTR_NAME' ).
  IF lv_name->* = 'NOMBRE_DEL_ATRIBUTO'.
    CALL METHOD lv_selection_parameter->get_properties
      IMPORTING
        ES_ATTRIBUTES = atributes.
    IF control de valores.
      lr_col_params->remove( lv_selection_parameter ).
      lv_selection_parameter = lr_col_params->get_current( ).
      lv_control = 'X'.
    ELSE.
      lv_selection_parameter = lr_col_params->get_next( ).
    ENDIF.
  ELSE.
    lv_selection_parameter = lr_col_params->get_next( ).
  ENDIF.
ENDWHILE.

Ahora ponemos el valor que nos interesa.
IF lv_control = 'X'.
      new_selection_parameter =
          lr_qs->insert_selection_param( iv_attr_name = 'NOMBRE_DEL_ATRIBUTO'
          iv_sign = 'I'
          iv_option = 'EQ'
          iv_low = 'VALOR'
          iv_index = lv_index ).
ENDIF.

Por este método pasa siempre que presionemos al botón buscar por lo que cambie lo que se cambie en el filtro siempre pondrá los datos por defecto.

Por cierto, a partir de estas dos definiciones deberíais tener suficiente para sacar el resto y que el código compile:
DATA lv_cnode TYPE REF TO cl_bsp_wd_context_node_asp.
DATA atributes TYPE genilt_selection_parameter.

Y recordad de llamad al método superior para que todo funcione correctamente.

1 comentario:

  1. Por cierto, el desarrollo compila y es válido pero tiene un pequeño agujero que con unas pruebas es fácil de encontrar y de solucionar. ¿Alguien sabría decir cual es?

    Saludos

    ResponderEliminar