博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
OOALV 中DATA_CHANGED_FINISHED调用刷新弹出排序窗口解决方案
阅读量:2035 次
发布时间:2019-04-28

本文共 2035 字,大约阅读时间需要 6 分钟。

DATA_CHANGED_FINISHED 中使用刷新方法REFRESH_TABLE_DISPLAY 会导致sort 出现强制弹出选择字段的窗口的异常情况.

CLASS LCL_EVENTS DEFINITION.

METHODS DATA_CHANGED_FINISHED

FOR EVENT DATA_CHANGED_FINISHED OF CL_GUI_ALV_GRID

IMPORTING E_MODIFIED

ET_GOOD_CELLS

SENDER. 

METHODS HANDLE_DATA_CHANGED 

FOR EVENT DATA_CHANGED OF CL_GUI_ALV_GRID

IMPORTING ER_DATA_CHANGED.


PRIVATE SECTION.

DATA G_REFRESH TYPE C.

ENDCLASS. 

" 类实现

CLASS LCL_APPLICATION IMPLEMENTATION. 

METHOD DATA_CHANGED_FINISHED.

PERFORM DATA_CHANGED_FINISHED USING E_MODIFIED ET_GOOD_CELLS SENDER G_REFRESH.

ENDMETHOD. 

METHOD HANDLE_DATA_CHANGED.

G_REFRESH = 'X'.

PERFORM EVENT_DATA_CHANGED USING ER_DATA_CHANGED

ERROR_IN_DATA

ME.

ENDMETHOD. "data_changed

ENDCLASS. 

"刷新oo alv subroutine:

PERFORM REFRESH_TABLE_DISPLAY USING SENDER.

FORM REFRESH_TABLE_DISPLAY USING SENDER TYPE REF TO CL_GUI_ALV_GRID.


DATA: STBL TYPE LVC_S_STBL.


STBL-ROW = ‘X’." 基于行的稳定刷新

STBL-COL = 'X'." 基于列稳定刷新


CALL METHOD SENDER->REFRESH_TABLE_DISPLAY

EXPORTING

IS_STABLE = STBL

I_SOFT_REFRESH = SPACE.


ENDFORM. " REFRESH_TABLE_DISPLAY


经过自己研究,可用以下方案解决:

event class 中设置 private 变量

1) 

PRIVATE SECTION.

DATA G_REFRESH TYPE C.

2) 激活 DATA_CHANGED 事件. 将全局变量赋值.

METHOD HANDLE_DATA_CHANGED.

G_REFRESH = ‘X’.

ENDMETHOD. "DATA_CHANGED

3) DATA_CHANGED_FINISHED 事件中. 调用增加判断变量


METHOD DATA_CHANGED_FINISHED.

PERFORM DATA_CHANGED_FINISHED USING E_MODIFIED ET_GOOD_CELLS SENDER G_REFRESH.

ENDMETHOD. "DATA_CHANGED_FINISHED 


FORM DATA_CHANGED_FINISHED USING E_MODIFIED

ET_GOOD_CELLS TYPE LVC_T_MODI

SENDER TYPE REF TO CL_GUI_ALV_GRID

REFRESH. 

IF REFRESH = 'X'.

PERFORM REFRESH_TABLE_DISPLAY USING SENDER.

CLEAR REFRESH .

ENDIF.

ENDFORM. " DATA_CHANGED_FINISHED



解决思路:

首先,当我们使用标准的排序功能由于是system event 不触发user command 事件 不触发data changed事件,以及不触发data changed finished 事件

其次由于data changed finished 事件中无法获取 system event 的 ucomm ,所以无法直接判断是否刷新. cl_gui_alv_grid中的u_ucomm 是protected 属性,无法直接读取。

最后,如果我们操作内表数据(check box 选取),必然触发data changed 事件,只有触发data changed事件的动作,我们才去刷新OO ALV 内表. 直接使用system event 事件的排序功能, 必然在data changed finished 不走REFRESH_TABLE_DISPLAY ,从而不会弹出sort 窗口.

转载地址:http://qloaf.baihongyu.com/

你可能感兴趣的文章
倒计时2天-线下报名|论道火爆AI圈的GPT-3
查看>>
数据重生:让神经机器翻译中的不活跃样本“复活”
查看>>
NeurlPS 2020来啦!AI TIME PhD 顶会专场直播预告
查看>>
直播预告: NeurlPS 2020 专场二| AI TIME PhD
查看>>
重要通知!!!
查看>>
当强化学习遇上循环神经网络:从System 1到System 2 Deep Learning
查看>>
AI时代,智慧图书馆该如何重构?| AI TIME
查看>>
隐私保护与生成模型: 差分隐私GAN的梯度脱敏方法
查看>>
基于强化学习的中间商赚差价指导手册
查看>>
基于深度特征分解的红外和可见光图像融合
查看>>
直播预告:AAAI 2021专场一| AI TIME PhD
查看>>
一种基于Transformer解码端的高效子层压缩方法
查看>>
同一种方法,同一句话,翻译成英语和泰语,差别为什么这么大?
查看>>
弱监督、具有可解释性的应用题解答
查看>>
前序、中序、后序递归、非递归方式打印二叉树
查看>>
八大排序之插入排序(直接插入排序 & 希尔排序)
查看>>
LeetCode第五题:最长回文子串(C语言)
查看>>
C++之erase、remove 、remove_if的区别
查看>>
C++ Huffman树实现文件的压缩与解压
查看>>
C++ 异常
查看>>