FM: DYNP_VALUES_READ

在还没按F8前, selection-screen中的field所键入的值是取不到的.
PARAMETERS: pr_pro TYPE char3. 我们无法取得pr_pro的值, 在按F8执行后, pr_pro
的值就可以取到了.

那有没有可以在按F8前取到pr_pro里填的值呢? 那就要用FM: DYNP_VALUES_READ了


下面是应用的代码, 根据pr_pro所键入的省, 去确定pr_city里的search help

TYPES: BEGIN OF ty_test,
         pro TYPE char3,
       END OF ty_test.

TYPES: BEGIN OF ty_test2,
         city TYPE char3,
       END OF ty_test2.

DATA: lt_dynp_read TYPE TABLE OF dynpread,
      lw_dynp_read TYPE dynpread.

DATA: lt_value TYPE STANDARD TABLE OF ty_test,
      lw_value TYPE ty_test.

SELECTION-SCREEN BEGIN OF BLOCK blk1 WITH FRAME TITLE text-t01.
PARAMETERS: pr_pro TYPE char3,
            pr_city TYPE char2.
SELECTION-SCREEN END OF BLOCK blk1.

AT SELECTION-SCREEN ON VALUE-REQUEST FOR pr_pro.

  CLEAR lt_value.

  lw_value = '广东'.
  APPEND lw_value TO lt_value.

  lw_value = '浙江'.
  APPEND lw_value TO lt_value.

  CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
    EXPORTING
    retfield               = 'PRO'
    dynpprog               = sy-repid
    dynpnr                 = sy-dynnr
    dynprofield            = 'PR_PRO'
    value_org              = 'S'
    TABLES
      value_tab              = lt_value
* EXCEPTIONS
*   PARAMETER_ERROR        = 1
*   NO_VALUES_FOUND        = 2
*   OTHERS                 = 3
            .
  IF sy-subrc <> 0.

  ENDIF.


AT SELECTION-SCREEN ON VALUE-REQUEST FOR pr_city.

  lw_dynp_read-fieldname = 'PR_PRO'.
  APPEND lw_dynp_read TO lt_dynp_read.

  CALL FUNCTION 'DYNP_VALUES_READ'
    EXPORTING
      dyname               = sy-repid
      dynumb               = '1000'
    TABLES
      dynpfields           = lt_dynp_read
    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.

  READ TABLE lt_dynp_read INTO lw_dynp_read INDEX 1.

  IF lw_dynp_read-fieldvalue = '广东'.

    CLEAR lt_value.
    lw_value = '广州'.
    APPEND lw_value TO lt_value.

    lw_value = '东莞'.
    APPEND lw_value TO lt_value.

    lw_value = '汕头'.
    APPEND lw_value TO lt_value.

    CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
      EXPORTING
      retfield               = 'PRO'
      dynpprog               = sy-repid
      dynpnr                 = sy-dynnr
      dynprofield            = 'PR_PRO'
      value_org              = 'S'
      TABLES
        value_tab              = lt_value
* EXCEPTIONS
*   PARAMETER_ERROR        = 1
*   NO_VALUES_FOUND        = 2
*   OTHERS                 = 3
              .
    IF sy-subrc <> 0.

    ENDIF.


  ENDIF.

  IF lw_dynp_read-fieldvalue = '浙江'.

    CLEAR lt_value.
    lw_value = '杭州'.
    APPEND lw_value TO lt_value.

    lw_value = '温州'.
    APPEND lw_value TO lt_value.

    CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
      EXPORTING
      retfield               = 'PRO'
      dynpprog               = sy-repid
      dynpnr                 = sy-dynnr
      dynprofield            = 'PR_PRO'
      value_org              = 'S'
      TABLES
        value_tab              = lt_value
* EXCEPTIONS
*   PARAMETER_ERROR        = 1
*   NO_VALUES_FOUND        = 2
*   OTHERS                 = 3
              .
    IF sy-subrc <> 0.
    ENDIF.


  ENDIF.


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值