• ABAP DIALOG POV F4搜索帮助


      "搜索帮助
      PROCESS ON VALUE-REQUEST .
        FIELD <FIELD1> MODULE F4_HEAD_1.
        FIELD <FIELD2> MODULE F4_HEAD_2.

     根据内表自定义F4的选择条目(3)  和   用已定义的搜索帮助来确定选择条目(5)

        (都可以根据已知的一个字段来确定选择条目)

    在tablecontrol中根据输入的MATNR,得到VBELN和POSNR的搜索帮助,选择后,同时填入vbeln和posnr

    1、获取matnr的值

    https://www.cnblogs.com/CtrlS/p/10755592.html

    2、获取数据

    定义STRUCTURE(SE11)

    DATA: LT_STRU TYPE TABLE OF <STRUCTURE> WITH HEADER LINE.

    SELECT ....

     如果取不到数,请注意字段的前导零是否正确(CONVERSION_EXIT_ALPHA_OUTPUT)

    3、调用 F4IF_INT_TABLE_VALUE_REQUEST  获取F4选择的订单号和行项目(根据内表自定义F4的选择条目)

    L_DSELC-FLDNAME = 'VBELN'.
    L_DSELC-DYFLDNAME = 'VBELN'.
    APPEND L_DSELC.
    L_DSELC-FLDNAME = 'POSNR'.
    L_DSELC-DYFLDNAME = 'POSNR'.
    APPEND L_DSELC.
    
    CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
      EXPORTING
        DDIC_STRUCTURE         = 'Z51_STCT'"structure名称
        RETFIELD               = 'VBELN'
    *   PVALKEY                = ' '
        DYNPPROG               = SY-REPID
        DYNPNR                 = SY-DYNNR
        DYNPROFIELD            = 'GW_TAB-VBELN'
    *   STEPL                  = 0
        WINDOW_TITLE           = '订单号选择'
    *   VALUE                  = ' '
        VALUE_ORG              = 'S'"Structure
    *   MULTIPLE_CHOICE        = ' '
    *   DISPLAY                = ' '
    *   CALLBACK_PROGRAM       = ' '
    *   CALLBACK_FORM          = ' '
    *   MARK_TAB               =
    * IMPORTING
    *   USER_RESET             =
      TABLES
        VALUE_TAB              = LT_VBELN[]
        FIELD_TAB              = L_DFIES[]
        RETURN_TAB             = L_DDSHRETVAL[]
        DYNPFLD_MAPPING        = L_DSELC[]
      EXCEPTIONS
        PARAMETER_ERROR        = 1
        NO_VALUES_FOUND        = 2
        OTHERS                 = 3.
    IF SY-SUBRC <> 0.
    * MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
    *         WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
    ELSE.
      READ TABLE L_DDSHRETVAL WITH KEY FIELDNAME = 'VBELN'.
      L_VBELN = L_DDSHRETVAL-FIELDVAL.
      READ TABLE L_DDSHRETVAL WITH KEY FIELDNAME = 'POSNR'.
      L_POSNR = L_DDSHRETVAL-FIELDVAL.
    ENDIF.

    4、DYNP_VALUES_READ返回订单号和行项目到屏幕

    CLEAR:dynpfields[],L_LINES_VB.
    
    GET CURSOR LINE L_LINES_VB."获取当前操作行数
    
    DYNPFIELDS-FIELDNAME   = 'GW_TAB-VBELN'.
    DYNPFIELDS-STEPL       = L_LINES_VB."当前操作行数
    DYNPFIELDS-FIELDVALUE  = L_VBELN.
    DYNPFIELDS-FIELDINP    = 'X'.
    APPEND DYNPFIELDS.
    DYNPFIELDS-FIELDNAME   = 'GW_TAB-POSNR'.
    DYNPFIELDS-STEPL       = L_LINES_VB."当前操作行数
    DYNPFIELDS-FIELDVALUE  = L_POSNR.
    DYNPFIELDS-FIELDINP    = 'X'.
    APPEND DYNPFIELDS.
    
    CALL FUNCTION 'DYNP_VALUES_UPDATE'
      EXPORTING
        DYNAME                     = SY-REPID
        DYNUMB                     = SY-DYNNR
      TABLES
        DYNPFIELDS                 = DYNPFIELDS[].

     5调用F4IF_FIELD_VALUE_REQUEST(或F4IF_START_VALUE_REQUEST)用已定义的搜索帮助来确定选择条目

      用DYNP_VALUES_READ 先得到屏幕上的S_WERKS,

      CONCATENATE '=' S_WERKS INTO L_VALUE.
      " F4IF_FIELD_VALUE_REQUEST添加输入参数时,SHLPPARAM对应SHLP_DESCR-INTERFACE里的VALFIELD,只能输入几个字段,且数值VALUE还要加等号
      "而SHLP_DESCR-SELOPT对应的可输入条件类似于range,但不知道在F4IF_FIELD_VALUE_REQUEST中如何设置。。。。。
      "可用F4IF_START_VALUE_REQUEST来替换,但要从结果表中找选中的值返回屏幕值
      CALL FUNCTION 'F4IF_FIELD_VALUE_REQUEST'
        EXPORTING
          TABNAME                   = 'MARD'
          FIELDNAME                 = 'LGORT'
    *     SEARCHHELP                = ' '
          SHLPPARAM                 = 'WERKS'
          DYNPPROG                  = SY-REPID
          DYNPNR                    = SY-DYNNR
          DYNPROFIELD               = 'S_LGORT'
    *     STEPL                     = 0
          VALUE                     = L_VALUE
                .
      IF SY-SUBRC <> 0.
    * Implement suitable error handling here
      ENDIF.

    或者用F4IF_START_VALUE_REQUEST 

    从L_RETURN[]中找到选中的值,再用DYRN_VALUES_UPDATE传的屏幕
      DATA: L_SHLP TYPE SHLP_DESCR,
            L_SEL  TYPE DDSHSELOPT,
            L_RETURN LIKE TABLE OF DDSHRETVAL WITH HEADER LINE.
      L_SHLP-SHLPNAME = 'H_T001L'.
      L_SHLP-SHLPTYPE = 'SH'.
      L_SEL-SHLPNAME  = 'H_T001L'.  "搜索帮助的名称
      L_SEL-SHLPFIELD = 'WERKS'.  "搜索帮助参数的名称
      L_SEL-SIGN      = 'I'. "ABAP/4: ID: I/E (包括/不包括值)
      L_SEL-OPTION    = 'EQ'."ABAP/4: 选择选项 (EQ/BT/CP/...)
      L_SEL-LOW        = 'C100'."动态选择的'一般' SELECT-OPTION
    *  L_SEL-HIGH      "动态选择的'一般' SELECT-OPTION
      APPEND L_SEL TO L_SHLP-SELOPT.
    *  L_VALUE = 'C1*'.H_T001L
    
      CALL FUNCTION 'F4IF_START_VALUE_REQUEST'
        EXPORTING
          SHLP                = L_SHLP
    *     DISPONLY            = ' '
    *     MAXRECORDS          = 500
    *     MULTISEL            = ' '
    *     CUCOL               = SY-CUCOL
    *     CUROW               = SY-CUROW
    *   IMPORTING
    *     RC                  =
        TABLES
          RETURN_VALUES       = L_RETURN[]
                .
      IF SY-SUBRC <> 0.
    * Implement suitable error handling here
      ENDIF.

     

  • 相关阅读:
    get请求数据
    ajax (详细)
    DedeCMS去掉友情链接中“织梦链投放”“织梦链”的方法
    Metro UI CSS可以快速创建一个Windows 8风格的网站
    CSS实现垂直居中的5种方法
    解决jQuery冲突 noConflict
    dedecms pic_scroll.js和jquery-1.9.1.min.js
    js和jquery下拉菜单全攻略
    IE6、IE7、IE8、FireFox css line-height兼容问题
    IE开发利器-IE10中的F12开发者工具
  • 原文地址:https://www.cnblogs.com/CtrlS/p/10757431.html
Copyright © 2020-2023  润新知