【ABAP】OOALV可能遇到的问题的处理方法

21 篇文章 2 订阅

如果想删除OOALV工具栏可以用如下方法
vseoattrib表是存储类属性的表

FORM exclude_tb_functions CHANGING pt_exclude TYPE ui_functions.
* 删除所有的OOALV 状态栏
  DATA:BEGIN OF lt_exclude OCCURS 0,
     attvalue TYPE vseoattrib-attvalue,
    END OF lt_exclude.

  FIELD-SYMBOLS:<exclude> LIKE lt_exclude.
  DATA:len TYPE i.

  SELECT attvalue INTO TABLE lt_exclude FROM vseoattrib
    WHERE clsname = 'CL_GUI_ALV_GRID'
    AND   type    = 'UI_FUNC'.

  LOOP AT lt_exclude ASSIGNING <exclude>.
    CLEAR len.
    len = STRLEN( <exclude>-attvalue ).
    IF len > 0.
      len  = len  - 2.
      <exclude>-attvalue = <exclude>-attvalue+1(len).
      APPEND <exclude>-attvalue TO pt_exclude.
    ENDIF.
  ENDLOOP.
  
ENDFORM. 

光标定位的方法

FORM set_current USING p_index p_fieldname p_row_id.
  DATA : wl_is_row_id TYPE lvc_s_row,
         wl_is_column_id  TYPE lvc_s_col,
         wl_is_row_no  TYPE lvc_s_roid.

  wl_is_row_id-index  = p_index.
  wl_is_column_id-fieldname = p_fieldname.
  wl_is_row_no-row_id = p_row_id.

  CALL METHOD g_grid->set_current_cell_via_id
    EXPORTING
      is_row_id    = wl_is_row_id           " Row No
      is_column_id = wl_is_column_id        " Column No
      is_row_no    = wl_is_row_no.          " Row No.
ENDFORM.                    "set_current

强制触发DATA_CHANGED事件,并根据OOALV屏幕数据修改内表

在PAI 中调用下面的方法

* 将已经触发的EVENT发送给他们各自的EVENT HANDLER,以便让这些事件得到响应。 为check_changed_data做准备
  CALL METHOD cl_gui_cfw=>dispatch.
* 可以触发mc_evt_modified
  CALL METHOD g_grid->check_changed_data.

在PBO中定义下面方法
疑点:经过测试,发现不用失去焦点的方式,也能在上面情况下强制触发data_chagnde事件。

* 回车事件
    CALL METHOD g_grid->register_edit_event
      EXPORTING
        i_event_id = cl_gui_alv_grid=>mc_evt_enter.

* 失去焦点
*    CALL METHOD g_grid->register_edit_event
*      EXPORTING
*        i_event_id = cl_gui_alv_grid=>mc_evt_modified.

* OOALV修改的数据返回内表
    CALL METHOD g_grid->register_edit_event
      EXPORTING
        i_event_id = cl_gui_alv_grid=>mc_evt_modified.

使程序重新走PBO

  "handle_data_changed
  METHOD handle_after_user_command.

    CALL METHOD cl_gui_cfw=>set_new_ok_code
      EXPORTING
        new_code = 'REFRESH'.

*  使程序重新走PBO
    CALL METHOD cl_gui_cfw=>flush.

  ENDMETHOD. 
  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值