ABAP 中搜索帮助Search Help (F4)

在AT SELECTION-SCREEN ON VALUE-REQUEST事件中,是不能直接取得选择屏幕字段的默认值或输入的值,如果搜索帮助的内容是根据选择屏幕的字段而变化的,那么需要通过函数 DYNP_VALUES_READ读取。对应的还存在一个更新到 屏幕 的函数  DYNP_VALUES_UPDATE   

*&---开户行和银行账户号 搜索帮助
at selection-screen on  value-request for p_bankn.
  perform frm_request_f4_insmk using 'P_BANKN'.
form frm_request_f4_insmk using pv_field type help_info-dynprofld.

  data: begin of ty_value_tab,
          bankn type lfbk-bankn,
          koinh type lfbk-koinh,

        end of ty_value_tab.
  data: lt_value_tab like table of ty_value_tab,
        ls_value_tab like  ty_value_tab.

  data: l_path  type string,
        l_sel   type string,
        lit_zh  type table of dynpread,
        lwa_zh  type dynpread,
        lit_dyn type table of dynpread,
        lwa_dyn type dynpread.


  data l_lifnr type lfa1-lifnr .     
  clear l_lifnr.
  if s_lifnr is initial.
    lwa_dyn-fieldname = 'S_LIFNR-LOW'.
    append lwa_dyn to lit_dyn.


    call function 'DYNP_VALUES_READ'    "获取选择屏幕上 供应商的值
      exporting
        dyname               = sy-cprog     "ABAP 系统字段:调用程序
        dynumb               = sy-dynnr     "ABAP 系统字段:当前 Dynpro 的屏幕组
        translate_to_upper   = 'X'
      tables
        dynpfields           = lit_dyn
      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 <> 0.
* Implement suitable error handling here
    endif.

    read table lit_dyn into lwa_dyn with key fieldname = 'S_LIFNR-LOW'.
    call function 'CONVERSION_EXIT_ALPHA_INPUT'
      exporting
        input  = lwa_dyn-fieldvalue
      importing
        output = l_lifnr.

  else.
    call function 'CONVERSION_EXIT_ALPHA_INPUT'
      exporting
        input  = s_lifnr-low
      importing
        output = l_lifnr.

  endif.

  select                       "根据选择屏幕上供应商的值取到合适的开户行和账户号
          lfbk~bankn
          lfbk~koinh

    into corresponding fields of table lt_value_tab
    from lfbk
  where lifnr = l_lifnr.

  call function 'F4IF_INT_TABLE_VALUE_REQUEST'   "创建搜索帮助
    exporting
      retfield        = 'BANKN'                 "搜索帮助的字段名
      dynpprog        = sy-repid
      dynpnr          = sy-dynnr
      dynprofield     = pv_field
      value_org       = 'S'
    tables
      value_tab       = lt_value_tab            "表内就是搜索帮助显示的值
    exceptions
      parameter_error = 1
      no_values_found = 2
      others          = 3.
  if sy-subrc <> 0.
*   Implement suitable error handling here
  endif.


endform.

二:调用SE11搜索帮助:MATCHCODE OBJECT

parameters:p_ddlx(10) matchcode object zfi003n obligatory.

猜你喜欢

转载自blog.csdn.net/fengxin_/article/details/107058682