如何给字段增加搜索帮助

这个问题只需要重定义字段的V方法就行。如果可选的值比较少,想换成下拉框的效果,可以在P方法里面这样写。

  METHOD get_p_<字段名>.
    CASE iv_property.
      WHEN if_bsp_wd_model_setter_getter=>fp_fieldtype.
        rv_value = cl_bsp_dlc_view_descriptor=>field_type_picklist.
    ENDCASE.
  ENDMETHOD.   


回到正题,V方法的模板见下面。


METHOD get_v_<字段名>.

  DATA:lv_str_index TYPE string,
       lv_fname_prefix TYPE string,
       lv_idx_string TYPE string.
  DATA: lt_inmap TYPE if_bsp_wd_valuehelp_f4descr=>gtype_param_mapping_tab,
        ls_map LIKE LINE OF lt_inmap,
 <span style="white-space:pre">	</span>lt_outmap TYPE if_bsp_wd_valuehelp_f4descr=>gtype_param_mapping_tab .
 
* determine prefix in case the F4 is called from a table view
  IF iv_index IS INITIAL.
    lv_fname_prefix = 'STRUCT'.                             "#EC NOTEXT
  ELSE.
    lv_idx_string = iv_index.
    CONDENSE lv_idx_string NO-GAPS.
    CONCATENATE 'TABLE[' lv_idx_string ']' INTO lv_fname_prefix. "#EC NOTEXT
  ENDIF.
 
  CONCATENATE lv_fname_prefix '<span style="font-family: Arial, Helvetica, sans-serif;"><字段名></span>' INTO ls_map-context_attr SEPARATED BY '.'. "#EC NOTEXT
  ls_map-f4_attr      = '<span style="font-family: Arial, Helvetica, sans-serif;"><另一字段名></span>'."实现页面字段取值联动
  APPEND ls_map TO:lt_outmap.
 
  CREATE OBJECT rv_valuehelp_descriptor TYPE cl_bsp_wd_valuehelp_f4descr
    EXPORTING
      iv_help_id        = '<搜索帮助名>'
      iv_help_id_kind   = if_bsp_wd_valuehelp_f4descr=>help_id_kind_comp
      iv_input_mapping  = lt_inmap
      iv_output_mapping = lt_outmap
      iv_object_ref     = me
      iv_trigger_submit = 'X'.

ENDMETHOD.

这个是标准的把SAP的搜索帮助搬到UI上面。系统标准UI组件一般不用担心,SAP已经把这一步做好。

对于自建的组件,如果没有建搜索帮助或者其他什么原因,还有更简单粗暴的办法,直接抓数据,如下面的示例。

METHOD get_v_<字段名>.
  DATA lt_ddlb  TYPE bsp_wd_dropdown_table.
  DATA ls_ddlb  LIKE LINE OF lt_ddlb.
  DATA lt_xxx TYPE TABLE OF xxx.
  DATA ls_xxx LIKE LINE OF lt_xxx.
  DATA lr_ddlb TYPE REF TO cl_crm_uiu_ddlb.
  CREATE OBJECT lr_ddlb
    EXPORTING
      iv_source_type = 'T'.
  ls_ddlb-key   = ''.
  ls_ddlb-value = ''.
  APPEND ls_ddlb TO lt_ddlb."空行可选
  SELECT * INTO CORRESPONDING FIELDS OF TABLE lt_xxx
     FROM xxx
     WHERE aaa = bbb.
  IF lt_xxx[] IS NOT INITIAL.
    SORT lt_xxx BY aaa.
  ENDIF.
  LOOP AT lt_xxx INTO ls_xxx.
    ls_ddlb-key   = ls_xxx-ccc.
    ls_ddlb-value = ls_xxx-ddd.
    APPEND ls_ddlb TO lt_ddlb.
  ENDLOOP.
  IF sy-subrc = 0.
    lr_ddlb->set_selection_table( it_selection_table = lt_ddlb ).
  ENDIF.
  rv_valuehelp_descriptor = lr_ddlb.
ENDMETHOD.



你可能感兴趣的:(UI,crm,SAP,字段,搜索帮助)