在PROCESS ON VALUE-REQUEST事件中获取屏幕值

在某项目中,需要用Search Help类似的功能弹出工厂信息,然后回填到字段中,在输入工厂时要根据输入的值来弹出某一个工厂,在PROCESS ON VALUE-REQUEST事件中捕捉不到屏幕的值,为了解决此问题,可以通过Call 一个Function来动态取到屏幕的值,代码如下:

DATA: wls_return TYPE ddshretval,
        wlt_return LIKE TABLE OF wls_return.
  data:        it_dynpfields TYPE STANDARD TABLE OF dynpread,
        wa_dynpfields TYPE dynpread.
  CLEAR ws_t012.
  REFRESH wt_t012.
  CLEAR wa_dynpfields.
  CLEAR it_dynpfields.
*解决屏幕输入时捕捉不到值的问题

**取公司代码屏幕字段的输入值
  wa_dynpfields-fieldname = ‘P_BUKRS’.
  APPEND wa_dynpfields TO it_dynpfields.
  CALL FUNCTION 
‘DYNP_VALUES_READ’
    EXPORTING
      dyname     = sy-repid
      dynumb     = sy-dynnr
    TABLES
      dynpfields = it_dynpfields.
    READ TABLE it_dynpfields WITH KEY fieldname = 
‘P_BUKRS’ INTO wa_dynpfields.
  IF NOT wa_dynpfields-fieldvalue IS INITIAL.
    P_BUKRS = wa_dynpfields-fieldvalue. “得到屏幕录入的值

  ENDIF. 
  IF p_bukrs1 NE space.
    CONCATENATE 
‘%’ p_bukrs1 INTO p_bukrs1.
  select zbukrs zbanktxt
    into corresponding fields of table wt_bukrs
     from zbank where BUKRS = P_BUKRS AND zbukrs like p_bukrs1.
  ELSE.
   select zbukrs zbanktxt
    into corresponding fields of table wt_t012
    FROM ZBANK WHERE BUKRS = P_BUKRS.
  ENDIF.
  CALL FUNCTION ‘F4IF_INT_TABLE_VALUE_REQUEST’

    EXPORTING
      retfield        = 
‘zbukrs
      value_org       = ‘S’
    TABLES
      value_tab       = wt_t012
      return_tab      = wlt_return
    EXCEPTIONS
      parameter_error = 1
      no_values_found = 2
      OTHERS          = 3.
  READ TABLE wlt_return INDEX 1 INTO wls_return.
  IF sy-subrc EQ 0.
    p_bukrs1 = wls_return-fieldval.
  ENDIF.

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
在 ABAP 自定义屏幕添加长文本框,可以使用屏幕元素 'TEXTEDIT'。以下是添加长文本框的步骤: 1. 打开 ABAP 事务码 SE51,创建或打开你的屏幕集(Screen Set)。 2. 在屏幕打开你想要添加长文本框的屏幕。 3. 在屏幕上选择一个合适的位置,然后添加一个元素类型为 'TEXTEDIT' 的屏幕元素。 4. 给该屏幕元素指定一个唯一的名称(例如,'TEXTBOX')和其他相关属性,如长度、行数等。 5. 在 ABAP 程序,通过逻辑处理模块(PROCESS ON VALUE-REQUESTPROCESS BEFORE OUTPUT)将长文本框与屏幕字段关联起来。 6. 在逻辑处理模块,使用函数模块 'RS_EDIT_TEXT' 来处理长文本框的输入和输出。 下面是一个简单的示例代码: 1. 在屏幕创建一个屏幕并添加长文本框: ```abap PROCESS BEFORE OUTPUT. MODULE status_0100. MODULE status_0100 OUTPUT. SET PF-STATUS 'STATUS_0100'. SET TITLEBAR 'TITLE_0100'. SET SCREEN 100. MODULE text_0100 OUTPUT. SET PF-STATUS 'STATUS_0100'. SET TITLEBAR 'TITLE_0100'. SET SCREEN 100. LOOP AT lt_data INTO ls_data. WRITE: / ls_data-field1, ls_data-field2. ENDLOOP. TEXTEDIT TEXTBOX FOR 10 LINES 60. ENDMODULE. ENDMODULE. ``` 2. 在 ABAP 程序处理长文本框的输入和输出: ```abap PROCESS ON VALUE-REQUEST. MODULE handle_value_request. MODULE handle_value_request INPUT. DATA: lv_text TYPE string. CALL FUNCTION 'RS_EDIT_TEXT' EXPORTING textname = 'TEXTBOX' default_text = lv_text titlebar = 'Enter Text' IMPORTING edited_text = lv_text EXCEPTIONS cancelled = 1 OTHERS = 2. IF sy-subrc = 0. " 处理编辑后的长文本框内容 ENDIF. ENDMODULE. ``` 在这个示例,我们在屏幕添加了一个名为 'TEXTBOX' 的长文本框。然后,在 ABAP 程序的逻辑处理模块,我们使用函数模块 'RS_EDIT_TEXT' 来处理长文本框的输入和输出。 请根据你的具体需求和屏幕设计进行调整和扩展。希望这个示例能帮助你在自定义屏幕添加长文本框。如有需要,请提供更多的上下文信息以获取更具体的代码示例。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ChampaignWolf

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值