ABAP DIALOG 读取屏幕字段和tablecontrol内字段

 

在POV事件中,因为没有经过PAI直接进入POV中的MODULE,所以直接调用屏幕中的字段并没有值,所以要

用DYNP_VALUES_READ读取屏幕字段的值,且读取的值格式为输入的格式。

当使用DYNP_VALUES_READ时,所读取的屏幕应正在加载中。

读取屏幕字段

DATA: dynpfields TYPE TABLE OF dynpread WITH HEADER LINE,
        L_MATNR LIKE VBAP-MATNR,
        L_LINES_VB TYPE I.

  CLEAR: dynpfields, dynpfields[],L_MATNR,L_LINES_VB.
*  GET CURSOR LINE L_LINES_VB.
  dynpfields-fieldname = 'GW_TAB-MATNR'. "填入需要读值的字段名
*  dynpfields-fieldname = 'GW_TAB-MATNR(01)'. "第一行的物料号
*  dynpfields-STEPL = L_LINES_VB.
  APPEND dynpfields.

  CALL FUNCTION 'DYNP_VALUES_READ'
    EXPORTING
      dyname             = sy-repid
      dynumb             = sy-dynnr
      translate_to_upper = 'X'
*      DETERMINE_LOOP_INDEX = 'X'"TABLE CONTROL时使用
    TABLES
      dynpfields         = dynpfields
    EXCEPTIONS
      OTHERS             = 9.
    IF sy-subrc = 0.
      READ TABLE dynpfields WITH KEY fieldname = 'GW_TAB-MATNR'.
      L_MATNR = dynpfields-fieldvalue. "备注
    ENDIF.

 

读取DIALOG中的TABLE CONTROL中的字段

DATA: dynpfields TYPE TABLE OF dynpread WITH HEADER LINE,
        L_MATNR LIKE VBAP-MATNR,
        L_LINES_VB TYPE I.

  CLEAR: dynpfields, dynpfields[],L_MATNR,L_LINES_VB.
  GET CURSOR LINE L_LINES_VB.
  dynpfields-fieldname = 'GW_TAB-MATNR'. "填入需要读值的字段名
*  dynpfields-fieldname = 'GW_TAB-MATNR(01)'. "第一行的物料号
  dynpfields-STEPL = L_LINES_VB.
  APPEND dynpfields.

  CALL FUNCTION 'DYNP_VALUES_READ'
    EXPORTING
      dyname             = sy-repid
      dynumb             = sy-dynnr
      translate_to_upper = 'X'
      DETERMINE_LOOP_INDEX = 'X'"TABLE CONTROL时使用
    TABLES
      dynpfields         = dynpfields
    EXCEPTIONS
      OTHERS             = 9.
    IF sy-subrc = 0.
      READ TABLE dynpfields WITH KEY fieldname = 'GW_TAB-MATNR'. 
    L_MATNR
= dynpfields-fieldvalue. "备注
ENDIF.

 

还有用字段符号取屏幕字段,一般是在增强中用,在POV中可能取不到值

  "读取一个字段时,在POV中取不到值
  FIELD-SYMBOLS:<FS_MATNR> TYPE ANY.
  ASSIGN ('(ZTEST051)GW_TAB-MATNR') TO <FS_MATNR>.
  "读取一个表,在DIALOG中,如果table在输入后,经过了PAI,可获得table中内容,但为旧值
  FIELD-SYMBOLS: <FS_TABLE> TYPE TABLE.
  ASSIGN ('(ZTEST051)GT_TAB[]') TO <FS_TABLE>.
ZTEST051      为屏幕数据中的程序名
GW_TAB-MATNR  为取值的字段
GT_TAB[]      为取值的表,通过GW_TAB或屏幕的PAI去查找

可以用   GET CURSOR LINE L_LINES.    获取table当前行L_LINE.

 

posted @ 2019-04-23 12:01  Ctrl+S  阅读(2566)  评论(0编辑  收藏  举报