通过RH_TYPE_STRUC_HELP构建搜索帮助返回多个值到屏幕select-option “部门”

HR模块中经常需要用“部门”即“组织单位”作为检索条件,要是构建一个搜索帮助,如下所示

通过RH_TYPE_STRUC_HELP构建搜索帮助返回多个值到屏幕select-option “部门”

通过RH_TYPE_STRUC_HELP构建搜索帮助返回多个值到屏幕select-option “部门”

实现代码如下:

"部门
SELECT-OPTIONS:s_orgeh FOR pa0001-orgeh NO INTERVALS.

INITIALIZATION.
  
AT SELECTION-SCREEN ON VALUE-REQUEST FOR s_orgeh-low.
  PERFORM frm_sh_orgeh USING 'S_ORGEH'.


*&---------------------------------------------------------------------*
*& Form FRM_SH_ORGEH
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*&      --> P_
*&---------------------------------------------------------------------*
FORM frm_sh_orgeh USING VALUE(pv_dynprofield).

  DATA:lt_hrsobid TYPE STANDARD TABLE OF hrsobid,
       lv_objid   TYPE objec-realo,
       lv_so_tab  TYPE char20,
       lv_so_wa   TYPE char20.
*       lv_field   TYPE char20.

  RANGES rn_orgeh FOR pa0001-orgeh.

  CALL FUNCTION 'RH_TYPE_STRUC_HELP'
    EXPORTING
      act_search_otype         = 'O'
*     ACT_SEARCH_WEGID         =
*     ACT_SEARCH_SVECT         = '1'
      set_mode                 = 'X'
*     ACT_ROOT_OT              =
*     ACT_ROOT_ID              =
*     ACT_PLVAR                =
*     ACT_SEARCH_BEGDA         = SY-DATUM
*     ACT_SEARCH_ENDDA         = SY-DATUM
*     NO_SEARK                 = 'X'
*     ACT_LIST_TYPE            =
*     ACT_INT_WEGID            =
*     SELECTED_OBJ_APPEND      =
*     CHANGE_SEARCH_TYPE       =
*     RESTRICT_CALLBACK        =
    IMPORTING
*     SELECTED_PLVAR           =
*     SELECTED_OTYPE           =
      selected_objid           = lv_objid
*     CHANGED_FLAG             =
*     LAST_OK_CODE             =
    TABLES
      selected_objects         = lt_hrsobid
    EXCEPTIONS
      no_active_plvar          = 1
      no_object_selected       = 2
      no_struc_search_possible = 3
      OTHERS                   = 4.
  CHECK lt_hrsobid IS NOT INITIAL.

  SORT lt_hrsobid BY sobid.

  LOOP AT lt_hrsobid INTO DATA(ls_hrsobid).
    rn_orgeh = 'IEQ'.
    rn_orgeh-low = ls_hrsobid-sobid.
    rn_orgeh-high = 0.
    APPEND rn_orgeh.
  ENDLOOP.

  READ TABLE lt_hrsobid INTO ls_hrsobid INDEX 1.
  IF sy-subrc = 0.
    rn_orgeh = 'IEQ'.
    rn_orgeh-low = ls_hrsobid-sobid.
    rn_orgeh-high = 0.
  ENDIF.

*  SPLIT pv_dynprofield AT '-' INTO lv_so_wa lv_field.
  lv_so_wa = pv_dynprofield.
  lv_so_tab = lv_so_wa && '[]'.
  ASSIGN:(lv_so_wa) TO FIELD-SYMBOL(<fs_orgeh>),
         (lv_so_tab) TO FIELD-SYMBOL(<fs_orgeh_tab>).
  CHECK <fs_orgeh> IS ASSIGNED AND <fs_orgeh_tab> IS ASSIGNED.

  <fs_orgeh> = rn_orgeh.
  <fs_orgeh_tab> = rn_orgeh[].

  UNASSIGN:<fs_orgeh>,
           <fs_orgeh_tab>.

*  ASSIGN (pv_dynprofield) TO FIELD-SYMBOL(<fd_f4>).
*  CHECK <fd_f4> IS ASSIGNED.
*  <fd_f4> = lv_objid.

ENDFORM.