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.

 

原文地址:https://www.cnblogs.com/CtrlS/p/10757431.html