ABAP - cl_gui_toolbar-> delete_all_buttons无效

时间:2015-06-25 06:48:15

标签: abap

DATA:lo_toolbar TYPE REF TO cl_gui_toolbar。

  lo_Tree->get_toolbar_object(
    IMPORTING
      er_toolbar = lo_toolbar    " Toolbar Object
  ).

  lo_toolbar->delete_all_buttons(
    EXCEPTIONS
      cntl_error = 1
      others     = 2
  ).
  IF sy-subrc <> 0.
   MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
              WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
  ENDIF.

  "add my own buttons
  lo_toolbar->add_button(
    EXPORTING
      fcode            = 'ADDROOT'    " Function Code Associated with Button
      icon             = '@04@'    " Icon Name Defined Like "@0a@"
      butn_type        =  cntb_btype_button   " Button Types Defined in CNTB
      quickinfo        =  'Create new portfolio'   " Purpose of Button Text
    EXCEPTIONS
      cntl_error       = 1
      cntb_btype_error = 2
      cntb_error_fcode = 3
      others           = 4
  ).
  IF sy-subrc <> 0.
   MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
              WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
  ENDIF.

我有类cl_gui_alv_tree的实例。我想删除工具栏中的标准按钮并添加我自己的。所以我调用get_toolbar_object及其方法delete_all_buttons但它不起作用。输出是我在第一个位置的按钮,然后是标准按钮。你能帮帮我吗?

1 个答案:

答案 0 :(得分:0)

如果您检查名为&#34; delete_all_buttons&#34;的方法中的代码,那么您将看到另一个名为&#34; call_method&#34;的方法的调用。这只是一个调用,AKA动态方法调用方法,可以作为参数传递, 那么你会看到很多像这样的行:(不要打扰,如果它听起来很奇怪,就是如何建立动态方法调用。至少有一种方法,但在这种情况下,我们正在处理超出此范围的ABAP和OLE方式)。

 WHEN 3.
        CALL METHOD OF H_CONTROL-OBJ VERB = RESULT NO FLUSH
        EXPORTING #1 = P1
                  #2 = P2
                  #3 = P3.

或者像这些:

WHEN 14.
      CALL METHOD OF H_CONTROL-OBJ VERB = RESULT NO FLUSH QUEUEONLY
          EXPORTING #1 = P1
                    #2 = P2
                    #3 = P3
                    #4 = P4
                    #5 = P5
                    #6 = P6
                    #7 = P7
                    #8 = P8
                    #9 = P9
                    #10 = P10
                    #11 = P11
                    #12 = P12
                    #13 = P13
                    #14 = P14.

你应该注意的是关键词&#34; NO FLUSH&#34;和/或&#34;仅限队列&#34;。

有关更多信息,请标记并点击F1。 OLE文档告诉你更多是否,希望。

他们暗示,不管是对后端的对象代表进行了哪些更改,只有后端知道新状态,变更,删除等等,不会通知sap-gui-frontend。 / p>

一般来说,任何pbo / pai都应该同步前端和后端,事实上我甚至认为,只有那些设置了QUEUEONLY的人才会在下一个周期自动同步。

如果你想强制同步,只需调用gui-class-control-framwork-base的静态方法,即AKA cl_gui_cfw。

正确的方法调用将是(事实上,如果你想改变ui控件,它是最好的选择但是你不能依赖任何pbo / pai-cycle):

CALL METHOD cl_gui_cfw=>flush.

我可以帮你吗?