获取选择屏幕字段值

模拟需求:根据选择屏幕的工厂,对选择屏幕部门来进行筛选自定义F4搜索帮助。

搜索帮助自建表:

函数名称:DYNP_VALUES_READ

代码DEMO:

*&---------------------------------------------------------------------*
*& 程 序 名:YTEST_001
*& 程序描述:获取选择屏幕字段值进行搜索帮助
*& 创 建 者:你们的小涵
*& 创建日期:2023/06/06
*&---------------------------------------------------------------------*
*& 版本     修改者(公司)     日期         修改描述
*& 1.0.0    XXXX           YYYYMMDD      创建程序
*&---------------------------------------------------------------------*

REPORT ytest_001.

TABLES:ekko,ytdepart.

"选择屏幕
SELECTION-SCREEN BEGIN OF BLOCK b01 WITH FRAME TITLE TEXT-001.
  PARAMETERS:
    "工厂
    p_werks TYPE ekpo-werks OBLIGATORY.
  SELECT-OPTIONS:
    "部门
    s_depart FOR ytdepart-zdepart NO INTERVALS NO-EXTENSION.
SELECTION-SCREEN END OF BLOCK b01.

*&----------------------------------------------------------------------
*& INITIALIZATION.
*&----------------------------------------------------------------------
INITIALIZATION.

*&----------------------------------------------------------------------
*& AT SELECTION-SCREEN OUTPUT
*&----------------------------------------------------------------------
AT SELECTION-SCREEN OUTPUT.

*&----------------------------------------------------------------------
*& AT SELECTION-SCREEN
*&----------------------------------------------------------------------
AT SELECTION-SCREEN.

*&----------------------------------------------------------------------
*& AT SELECTION-SCREEN ON VALUE-REQUEST FOR
*&----------------------------------------------------------------------
AT SELECTION-SCREEN ON VALUE-REQUEST FOR s_depart-low.

  TYPES:
    BEGIN OF typ_s_text,
      werks   TYPE ytdepart-werks,     "工厂
      zdepart TYPE ytdepart-zdepart, "部门
      zname   TYPE ytdepart-zname,   "部门描述
    END OF typ_s_text.
  DATA lt_text TYPE TABLE OF typ_s_text.

  DATA dynpfields TYPE TABLE OF dynpread WITH HEADER LINE.

* 获取屏幕上字段输入的值:此字段还没有更新到对应的内表或工作区中
  dynpfields-fieldname = 'P_WERKS'.
  APPEND dynpfields.

  CALL FUNCTION 'DYNP_VALUES_READ'
    EXPORTING
      dyname               = sy-cprog
      dynumb               = sy-dynnr
    TABLES
      dynpfields           = dynpfields
    EXCEPTIONS
      invalid_abapworkarea = 1
      invalid_dynprofield  = 2
      invalid_dynproname   = 3
      invalid_dynpronummer = 4
      invalid_request      = 5
      no_fielddescription  = 6
      invalid_parameter    = 7
      undefind_error       = 8
      double_conversion    = 9
      stepl_not_found      = 10
      OTHERS               = 11.
  IF sy-subrc EQ 0.
    READ TABLE dynpfields WITH KEY 'P_WERKS' .
    IF sy-subrc = 0.
      p_werks  = dynpfields-fieldvalue.
      TRANSLATE p_werks TO UPPER CASE.
    ENDIF.
  ELSE.
* Implement suitable error handling here
  ENDIF.

  CLEAR:lt_text.
  SELECT *
    FROM ytdepart
    INTO CORRESPONDING FIELDS OF TABLE @lt_text
    WHERE werks = @p_werks.

  CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
    EXPORTING
*     DDIC_STRUCTURE  = ' '
      retfield        = 'ZDEPART'    "返回值
*     PVALKEY         = ' '
      dynpprog        = sy-cprog   "程序ID
      dynpnr          = sy-dynnr   "屏幕号
      dynprofield     = 'S_DEPART-LOW'  "搜索帮助对象
*     STEPL           = 0
*     WINDOW_TITLE    =
*     VALUE           = ' '
      value_org       = 'S'
*     MULTIPLE_CHOICE = ' '
*     DISPLAY         = ' '
*     CALLBACK_PROGRAM       = ' '
*     CALLBACK_FORM   = ' '
*     CALLBACK_METHOD =
*     MARK_TAB        =
* IMPORTING
*     USER_RESET      =
    TABLES
      value_tab       = lt_text
*     FIELD_TAB       =
*     RETURN_TAB      =
*     DYNPFLD_MAPPING =
    EXCEPTIONS
      parameter_error = 1
      no_values_found = 2
      OTHERS          = 3.
  IF sy-subrc <> 0.
* Implement suitable error handling here
  ENDIF.

*&----------------------------------------------------------------------
*& START-OF-SELECTION
*&----------------------------------------------------------------------
START-OF-SELECTION.

效果如下:

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值