Web Dynpro-Select_Options

  • Select_Options的引用
  1. 在使用 SELECT_OPTIONS 组件时应先在程序内先引用 WDR_SELECT_OPTIONS 组件
  2. 在视图中创建 ViewContainerUIElement 控件
  3. 创建相应窗口,在 Properties 中,点击 Create Controller Usage 将组件引用过来,随后在相应窗口的视图的ViewContainerUIElement 控件下进行 嵌套视图 的操作。

        Select options 由此引入到相应的窗口-视图-控件内,接下来要进行Select_Options的初始化。

        为便捷操作,通常会在 COMPONENTCONTROLLER 中 Attributes 创建 IF_WD_SELECT_OPTIONS IWCI_WDR_SELECT_OPTIONS 类型的 Attribute。此例中创建 M_HANDLER RefTo IF_WD_SELECT_OPTIONS 以及 M_WD_SELECT_OPTIONS RefTo IWCI_WDR_SELECT_OPTIONS。注意,记得勾选Public哦!

  • Select_Options的初始化

        为简便代码,可以将新建选择屏幕元素改成 DEFINE ... END-OF-DEFINITION.但会有一些局限性,所以就不举例了。 Parameter初始化赋值。

DATA: RT_RANGE_TABLE TYPE REF TO DATA,
      LV_TOOLTIP TYPE STRING VALUE 'SEARCH FOR ID',
      LR_CMP_USAGE TYPE REF TO IF_WD_COMPONENT_USAGE.
LR_CMP_USAGE = WD_THIS->WD_CPUSE_SELECT_OPTIONS( ).
IF LR_CMP_USAGE->HAS_ACTIVE_COMPONENT( ) IS INITIAL.
    LR_CMP_USAGE->CREATE_COMPONENT( ).
ENDIF.

DATA: LR_VALUE TYPE REF TO DATA.            "用于设置初始值"
FIELD-SYMBOLS <VALUE> TYOE DATA.
DATA LV_VALUE TYPE STRING.

WD_THIS->M_WD_SELECT_OPTIONS = WD_THIS->WD_CPFIC_SELECT_OPTIONS( ).
WD_THIS->M_HANDLER = WD_THIS->M_WD_SELECT_OPTIONS->INIT_SELECTION_SCREEN( ).
WD_THIS->M_HANDLER->REMOVE_ALL_SEL_SCREEN_ITEMS( ). "用于清空选择界面上的全部元素,通常情况下可以不进行该操作"

****** 设置有 初始化值 的元素举例 ADD_PARAMETER_FIELD*******  
****** I_VALUE 为 DATA 类型,因此需要进行一下类型转换 使用 FIELD-SYMBOLS *******
SELECT SINGLE ZDOC_ID INTO LV_VALUE FROM YAST_LOG WHERE ZCZR = SY-UNAME.
CREATE DATA LR_VALUE TYPE ZDOC_ID.
ASSIGN LR_VALUE->* TO <VALUE>.
<VALUE> = LV_VALUE.

WD_THIS->M_HANDLER->ADD_PARAMETER_FIELD(
    I_ID = 'S_ID'   "自定义元素名称  后续获取数值时会用到"
    I_DESCRIPTION = '文档分类'
    I_VALUE = LR_VALUE    "通常情况下不用"
    I_TOOLTIP = LV_TOOLTIP
    I_AS_DROPDOWN = ABAP_TRUE    "设置是否为下拉列表形式"
    I_VALUE_HELP_TYPE = IF_WD_VALUE_HELP_HANDLER=>CO_PREFIX_OVS
"其他详细PARAMETER可以通过 ADD_PARAMETER_FIELD 查看"
).

*****设置 常用 选择屏幕元素 *****
RT_RANGE_TABLE = WD_THIS->M_HANDLER->CREATE_RANGE_TABLE( I_TYPENAME = 'ZDOC_PXH' )."类型"
WD_THIS->M_HANDLER->ADD_SELECTION_FIELD(
    I_ID = 'S_PXH'
    I_DESCRIPTION = '文档号'
    I_OBLIGATORY = ABAP_FALSE
    IT_RESULT = RT_RANGE_TABLE
    I_TOOLTIP = LV_TOOLTIP
    I_VALUE_HELP_TYPE = IF_WD_VALUE_HELP_HANDLER=>CO_PREFIX_OVS
).

***** 隐藏 一堆 乱七八糟的 按钮 *****
WD_THIS->M_HANDLER->SET_GLOBAL_OPTIONS(
    I_DISPLAY_BTN_CANCEL = ABAP_FALSE
    I_DISPLAY_BTN_CHECK = ABAP_FALSE
    I_DISPLAY_BTN_RESET = ABAP_FALSE
    I_DISPLAY_BTN_EXECUTE = ABAP_FALSE
).
  •  Select_Options的获取界面输入数据
***** 对应的两种取值 *****

DATA: RT_RANGE_TABLE TYPE REF TO DATA,
      P_ID TYPE REF TO ZDOC_ID,
      LR_PXH TYPE RANGE OF ZDOC_PXH,
      LS_PXH LIKE LINE OF LR_PXH.

DATA: GDY_LINE TYPE REF TO DATA.
FIELD-SYMBOLS: <GDYN_TABLE> TYPE STANDARD TABLE,
               <GDYN_LINE> TYPE ANY.

***** ADD_PARAMETER_FIELD *****
P_ID ?= WD_THIS->M_HANDLER->GET_VALUE_OF_PARAMETER_FIELD( I_ID = 'S_ID' ).
LS_ID-OPTION = 'EQ'.
LS_ID-SIGN = 'I'.
LS_ID-LOW = P_ID->*.
APPEND LS_ID TO LR_ID.

***** ADD_SELECTION_FIELD *****
RT_RANGE_TABLE = WD_THIS->M_HANDLER->GET_RANGE_TABLE_OF_SEL_FIELD( I_ID = 'S_PXH' ).
IF RT_RANGE_TABLE IS NOT INITIAL.
    ASSIGN RT_RANGE_TABLE->* TO <GDYN_TABLE>.
    CREATE DATA GDY_LINE LIKE LINE OF <GDYN_TABLE>.
    ASSIGN GDY_LINE->* TO <GDYN_LINE>.
    LOOP AT <GDYN_TABLE> ASSIGNING <GDYN_LINE>.
        MOVE <GDYN_LINE> TO LS_PXH.
        APPEND LS_PXH TO LR_PXH.
        CLEAR LS_PXH.
    ENDLOOP.
ENDIF.

         当然,通常情况下,选择屏幕不止一个 SELECT-OPTIONS ,所以可以通过 FIELD-SYMBOLS 的方式巧妙的封装一下。

CRD_TT_BP_RANGE_WD & CRD_S_BP_RANGE_WD  是比较好用的 RANGE 表类型和 RANGE 结构。

        注意:SELECT-OPTIONS会在很多地方使用,所以会将相应的R_RANGE设置成为全局RANGE,不然的话,也可以省略 LOOP 等一系列步骤,在 SELECT  时,可以直接

SELECT ... FROM ... INTO ... WHERE .... IN <GDYN_TABLE>.

**************************************************************
入参 出参的设置   METHOD 上方 ·

I_DATA IMPORTING REFTO DATA
R_RANGE RETURNING CRD_TT_BP_RANGE_WD        "RANGETABLE FOR BP"
**************************************************************
METHOD OBJECT_TO_RANGE.
    FIELD-SYMBOLS: <GDYN_TABLE> TYPE STANDARD TABLE,
                   <GDYN_LINE> TYPE ANY.
    DATA WA_AREA TYPE CRD_S_BP_RANGE_WD.     "RANGESTRUCTURE FOR BP"
    IF I_DATA IS NOT INITIAL.
        ASSIGN I_DATA->* TO <GDYN_TABLE>.
        LOOP AT <GDYN_TABLE> ASSIGNING <GDYN_LINE>.
            MOVE <GDYN_LINE> TO WA_AREA.
            APPEND WA_AREA TO R_RANGE.
            CLEAR WA_AREA.
        ENDLOOP.
    ENDIF.
ENDMETHOD.

***** 调用时 ******
WD_COMP_CONTROLLER->OBJECT_TO_RANGE( WD_COMP_CONTROLLER->M_HANDLER->GET_RANGE_TABLE_OF_SEL_FIELD( I_ID = 'S_PXH' ) ).
  • Select_Options初始化赋值
    DATA: rt_range_table TYPE REF TO data.
    DATA: lt_r_table TYPE RANGE OF /rpm/tv_extid,
               ls_r_table LIKE LINE OF lt_r_table.
    FIELD-SYMBOLS: <value> LIKE lt_r_table.
    rt_range_table = wd_this->m_handler->create_range_table( i_typename = '/RPM/TV_EXTID' ).
    
    ls_r_table-sign = 'I'.
    ls_r_table-option = ''.
    ls_r_table-low = ls_xm-external_id.
    ls_r_table-high = ls_xm-external_id.
    ASSIGN rt_range_table->* TO <value>.
    APPEND ls_r_table TO <value>.
    
    wd_this->m_handler->add_selection_field(
    i_id = 'S_EXTERNAL_ID'
    i_description =  '标识'
    i_obligatory = abap_false
    it_result = rt_range_table
    i_tooltip = lv_tooltip
    i_value_help_type = if_wd_value_help_handler=>co_prefix_searchhelp
    ).

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值