通过RH_TYPE_STRUC_HELP构建搜索帮助返回多个值到屏幕select-option “部门”
HR模块中经常需要用“部门”即“组织单位”作为检索条件,要是构建一个搜索帮助,如下所示
实现代码如下:
"部门
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.