在SALV全屏上启用/禁用按钮的问题

时间:2019-02-19 07:54:25

标签: sap abap

亲爱的,我迫切需要以下帮助。

我已经从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_namereport_namei_button_namei_button_visable是该过程的参数,我认为它们的名称表示它们所携带的内容。

内部表 lit_functions_list 具有60条记录,后2条具有前2个按钮的数据,这就是我可以启用/禁用它们的原因。 但是我的第三个按钮 SELECT 没有记录。而是有一条带有按钮MYFUNCTION的记录,我已经删除了。

有人可以告诉我怎么做才能使 lit_functions_list 中的第3个按钮可用吗?

有人可以告诉我为什么这个itab有这么多垃圾吗?

预先感谢
埃里亚斯

3 个答案:

答案 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缓冲区需要重置。
谢谢大家的帮助。
埃里亚斯