乐趣区

关于前端:如何在-WebClient-UI-里创建-Value-Help

咱们先看一下依照本文介绍的步骤实现之后,实现的成果如何。

下图 BusinessPartner ID 字段右侧,有一个正方形小图标,暗示着这个字段调配了一个 F4 Value help.

点击 F4 快捷键或者点击正方形图标,会看到一个弹出的 Value Help 窗口,咱们能够依据各种搜寻条件,查问 Business Partner 数据,而不必去记忆 Business Partner 的 ID.

比方依据 First Name 或者 Last Name 进行搜寻。

如上图所示,咱们选中搜寻后果里第一条记录,则其 id 120 就会主动填写到触发 Value Help 的 BusinessPartner ID 字段下来。

具体实现步骤

(1) 实现 GET_P 办法。

代码如下:

CASE iv_property.
     WHEN if_bsp_wd_model_setter_getter=>fp_fieldtype.
       rv_value = cl_bsp_dlc_view_descriptor=>field_type_input.
  ENDCASE.

下面代码的语义是将 BusinessPartner ID 的类型 (fieldtype),指定为枚举值 cl_bsp_dlc_view_descriptor=>field_type_input.

实现 GET_V 办法:

create object rv_valuehelp_descriptor type cl_bsp_wd_valuehelp_navdescr
       exporting
          iv_outbound_plug = 'OP_PARTNER_SEARCH'.

给 BusinessPartner ID 字段绑定一个 outbound plug,取名 OP_PARTNER_SEARCH.

(2) 创立一个同名的 outbound plug:OP_PARTNER_SEARCH

在视图控制器里定义一个 private attribute, 名叫 mv_popup,类型为 TYPE REF TO if_bsp_wd_popup.

实现如下 ABAP 代码:

DATA: lv_node  TYPE REF TO cl_bsp_wd_context_node.
DATA: lv_title TYPE string.

lv_title = cl_wd_utilities=>get_otr_text_by_alias('CRM_UIU_PROD_CUST/SEARCH_CUSTOMER').
mv_popup = comp_controller->window_manager->create_popup(
  iv_interface_view_name = 'SearchHelpWindow'
  iv_usage_name          = 'BPSearch'
  iv_title               = lv_title ).
mv_popup->set_display_mode(if_bsp_wd_popup=>c_display_mode_surrounded).
mv_popup->set_on_close_event(iv_view = me iv_event_name = 'CLOSEPOPUP').
mv_popup->open('CLEAR_ALL').​

(3) 上一步骤的 ABAP 代码里,咱们试图关上定义在名叫 BPSearch 的 Component Usage 里的 Popup window,因而这一步,咱们须要在 runtime repository 里定义一个 Component usage:

当 value help 窗口敞开时,event CLOSEPOPUP 会触发。

will be triggered. So we create this event handler and implement it:

因而咱们为 CLOSEPOPUP 事件创立 event handler. 在事件处理函数的实现逻辑里,咱们从 Component BP_HEAD_SEARCHcontext node PARTNER 获取用户从搜寻后果里抉择的 BusinessPartner 记录的内容,存储到咱们本人定义的字段 BusinessPartner IDEmployee Name 里。

method EH_ONCLOSEPOPUP.

DATA: lv_target_node TYPE REF TO cl_bsp_wd_context_node.
DATA: lr_node      TYPE REF TO cl_bsp_wd_context_node,
             lr_entity    TYPE REF TO if_bol_bo_property_access,
             lr_entity_bp TYPE REF TO if_bol_bo_property_access,
             lv_fullname TYPE BU_DESCRIP,
             lv_bp_id    TYPE bu_partner.

  lr_entity ?= me->typed_context->bpinfo->collection_wrapper->get_current( ).
  ASSERT lr_entity IS NOT INITIAL.
  lr_node = mv_popup->get_context_node('PARTNER').
  CHECK lr_node IS BOUND.

  lr_entity_bp = lr_node->collection_wrapper->get_current( ).
  CHECK lr_entity IS BOUND AND lr_entity_bp IS BOUND.
  lv_bp_id = lr_entity_bp->get_property_as_string('BP_NUMBER').
  CHECK lv_bp_id IS NOT INITIAL.

  lr_entity->set_property(iv_attr_name = 'BP_ID' iv_value     = lv_bp_id).
  CALL FUNCTION 'CRM_BUPA_DESCRIPTION_READ'
      EXPORTING
         iv_partner          = lv_bp_id
      IMPORTING
         ev_description_name = lv_fullname
      EXCEPTIONS
         no_partner_specified  = 1
         no_valid_record_found = 2
         OTHERS                = 3.
   lr_entity->set_property(iv_attr_name = 'BP_NAME' iv_value     = lv_fullname).

第二步创立 outbound plug OP_PARTNER_SEARCH 时,创立的办法默认是 protected 的,咱们须要手动将其更改成 Public.

如果省去这一步,运行时咱们会遇到异样 CX_BSP_WD_INCORRECT_IMPLEMENT,因为 BSP 框架无奈调用一个类的 protected 办法。

退出移动版