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但它不起作用。输出是我在第一个位置的按钮,然后是标准按钮。你能帮帮我吗?
答案 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.
我可以帮你吗?