Lo primero que debemos hacer es crear un nuevo atributo en la clase de contexto que contiene nuestro campo. Este nuevo atributo debe ser del tipo de referencia CL_CRM_UIU_DDBL y protegido:
A continuación redefinimos el método GET_P del campo para indicar que es una lista desplegable:
CASE iv_property.
WHEN if_bsp_wd_model_setter_getter~fp_fieldtype.
rv_value = cl_bsp_dlc_view_descriptor=>field_type_picklist.
ENDCASE.
Ahora redefinimos el método GET_V para crear el objeto de lista desplegable y rellenarlo:
DATA:lt_ddlb TYPE bsp_wd_dropdown_table,
ls_ddlb TYPE bsp_wd_dropdown_line.
DATA: it_interna TYPE TABLE OF ztabla,
wa_estructura LIKE LINE OF it_interna.
IF gr_ddlb_canto IS NOT BOUND.
CREATE OBJECT gr_ddlb_atributo
EXPORTING
iv_source_type = 'T'.
REFRESH: it_canto.
* acabado
SELECT id descripcion INTO CORRESPONDING FIELDS OF TABLE it_interna
FROM ztabla
WHERE idioma = sy-langu.
LOOP AT it_interna INTO wa_estructura.
ls_ddlb-key = wa_estructura-id.
ls_ddlb-value = wa_estructura-descripcion.
APPEND ls_ddlb TO lt_ddlb.
ENDLOOP.
* Línea vacía de la Listbox:
INSERT INITIAL LINE INTO lt_ddlb INDEX 1.
IF sy-subrc = 0.
gr_ddlb_canto->set_selection_table( it_selection_table = lt_ddlb ).
ENDIF.
ENDIF.
rv_valuehelp_descriptor = gr_ddlb_atributo.
De esta forma ya tenemos los valores de la lista rellenos.