亲爱的,我拼命地在下面需要您的帮助。
我已经创建了SALV的ALV,并从标准程序中复制了GUI状态SALV_STANDARD
。首先,我添加了2个按钮postnew&Postdiff和一天后,我添加了选择按钮。
根据我想根据业务要求启用或禁用按钮的用户的选择。
我在一个过程中具有此代码:
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个按钮的数据,这就是我可以启用/禁用它们的原因。
但是我的第三按钮选择没有记录。取而代之的是,我已经删除了按钮my功能的记录。
有人可以告诉我该怎么办才能在 lit_functions_list 中使用第三个按钮?
有人可以告诉我为什么这个ITAB有这么多垃圾吗?
预先感谢
Elias
即使我也有同样的问题。我运行报告后,Balvbufdel解决了问题。
新创建的按钮现在进入功能列表中。
lit_functions_list = r_functions->get_functions( ).
用于在lit_functions_list中添加第三按钮,您可以使用以下代码。
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没有垃圾。它包含与状态有关的所有数据,例如菜单栏,应用程序栏和功能键。
最后,我至少找到了答案。让我再次描述我做了什么:
我将 GUI状态从标准程序SALV_DEMO_TABLE_FUNCTIONS通过TCODE SE41复制到我的程序。我添加了2个按钮 PostNew & PostDif 。到目前为止,所有工作都完美,我可以启用/禁用这两个按钮。
第二天,业务要求我添加一个按钮选择,用户可以通过该按钮使ITAB的相应选择列可编辑,以便选择要发布的记录。这里开始了我的问题,其中具有功能的ITAB不包含最后一个创建的按钮选择。我所做的是,我通过GUI状态的设计过程创建了一个按钮,但我无法通过以下代码获得它:
lit_functions_list = r_functions->get_functions( ).
有了您的答案,我在代码中发现了其他问题,但我仍然无法在上述ITAB中获得新按钮。
终于,昨天晚上,我想起了过去有人告诉我的。在旧系统中(如我们的SSAP ECC 6.0 R701 SP007),有时ALV缓冲液卡住了,我们必须将其重置。因此,我运行程序 BALVBUFDEL 和VUALA按钮选择出现在ITAB中,我现在可以启用或禁用。
因此请记住,有时ALV缓冲区需要重置。
谢谢大家的帮助。
Elias