亲爱的,我迫切需要以下帮助。
我已经从SALV创建了ALV,并且已经从标准程序复制了GUI状态SALV_STANDARD
。首先,我在POSTNEW和POSTDIFF中添加了2个按钮,并在一天后添加了 SELECT 按钮。
根据用户的选择,我要根据业务需求启用或禁用按钮。
我在程序中有以下代码:
r_alv type reference CL_SALV_TABLE.
if status_name is not initial and report_name is not initial.
set pf-status status_name.
r_alv->set_screen_status(
pfstatus = status_name
report = report_name
set_functions = r_alv->c_functions_all ).
endif.
data: lit_functions_list type salv_t_ui_func,
lwa_functions_list like line of lit_functions_list.
r_functions = r_alv->get_functions( ). "Get Toolbar functions
lit_functions_list = r_functions->get_functions( ).
if i_button_name is not initial.
** Now hide the BUTTON
loop at lit_functions_list into lwa_functions_list.
if lwa_functions_list-r_function->get_name( ) = i_button_name.
lwa_functions_list-r_function->set_visible( i_button_visable ).
endif.
endloop.
endif.
变量status_name
,report_name
,i_button_name
和i_button_visable
是该过程的参数,我认为它们的名称表示它们所携带的内容。
内部表 lit_functions_list 具有60条记录,后2条具有前2个按钮的数据,这就是我可以启用/禁用它们的原因。
但是我的第三个按钮 SELECT 没有记录。而是有一条带有按钮MYFUNCTION的记录,我已经删除了。
有人可以告诉我怎么做才能使 lit_functions_list 中的第3个按钮可用吗?
有人可以告诉我为什么这个itab有这么多垃圾吗?
预先感谢
埃里亚斯
答案 0 :(得分:2)
即使我有同样的问题。运行报表BALVBUFDEL后,它解决了问题。
现在,新创建的按钮位于功能列表中。.
lit_functions_list = r_functions->get_functions( ).
答案 1 :(得分:0)
要在lit_functions_list中添加第3个按钮,可以使用以下代码。
r_functions->set_function( NAME = 'BUT3' BOOLEAN = 'X' ).
您还可以使用add_function添加新按钮。
try.
r_functions->add_function(
name = 'BUT3'
icon = l_icon
text = l_text
tooltip = l_text
position = if_salv_c_function_position=>right_of_salv_functions ).
catch cx_salv_existing cx_salv_wrong_call.
endtry.
itab没有垃圾。它包含与状态有关的所有数据,如菜单栏,应用程序工具栏和功能键。
答案 2 :(得分:0)
最后,我至少找到了解决我问题的答案。让我再描述一次我的工作:
我通过Tcode SE41将 GUI状态从标准程序SALV_DEMO_TABLE_FUNCTIONS复制到我的程序中。我添加了两个按钮 POSTNEW 和 POSTDIF 。到目前为止,一切工作正常,我可以启用/禁用这两个按钮。
第二天,公司要求我添加一个按钮 SELECT ,用户可以使用该按钮使itab的相应SELECT列可编辑,以便选择要发布的记录。这开始了我的问题,其中带有函数的itab不包含最后创建的按钮SELECT。我所做的是,在GUI状态的设计过程中创建了一个按钮,但无法通过以下代码获得它:
AnnotationReader
有了您的回答,我在代码中发现了其他问题,但是仍然无法获得上面的itab中的新按钮。
终于,昨天晚上我想起了过去有人告诉我的事情。在旧系统中(例如我们的SAP ECC 6.0 R701 SP007),有时ALV缓冲区卡住了,我们必须对其进行重置。因此,我运行程序 BALVBUFDEL ,并在Itab中显示了 SELECT 按钮,现在可以启用或禁用了。
因此请记住,有时ALV缓冲区需要重置。
谢谢大家的帮助。
埃里亚斯