我读过几篇文章,说您不能在SAP经典的dynpros中开发OO。我是一个初学者,所以也许我有一些误会。但是当我使用类和对象时,我正在开发面向对象的对象,对吗?
在dynpro中,我还可以使用类和创建对象,使用其方法等。那么Dynpro为什么不是OO?
我知道这是一个基本问题,但是如果我对OO有误解,则需要把这个问题排除在外:)
是否可以将用户定义的函数添加到实例中,CL_SALV_TREE而无需将 GUI 状态复制到使用此实例的报告中?
我想要做的是添加一个带有add_function方法的自定义函数。
REPORT zzy.
CLASS lcl_main DEFINITION FINAL CREATE PRIVATE.
PUBLIC SECTION.
CLASS-METHODS:
main.
ENDCLASS.
CLASS lcl_main IMPLEMENTATION.
METHOD main.
DATA: lt_table TYPE STANDARD TABLE OF t000.
TRY .
cl_salv_tree=>factory(
IMPORTING
r_salv_tree = DATA(lo_salv_tree)
CHANGING
t_table = lt_table
).
DATA(lo_salv_functions) = lo_salv_tree->get_functions( ).
lo_salv_functions->add_function(
name = 'EXPORT_TO_EXCEL'
icon = '@J2@'
tooltip = 'Export as Excel'
position = if_salv_c_function_position=>right_of_salv_functions
).
lo_salv_functions->set_all( abap_true ).
lo_salv_tree->display( ).
CATCH cx_salv_error.
ASSERT 0 = 1.
ENDTRY.
ENDMETHOD.
ENDCLASS.
START-OF-SELECTION. …Run Code Online (Sandbox Code Playgroud) 使用Java Web Dynpro而不是ABAP Web Dynpro有什么好的理由吗?我听说Java版本在大约18个月后更加成熟,因为Dynpro是为Java制作的,然后ABAP开发人员在看到它工作后就想要它.
我知道ABAP是SAP的专有,而Java的使用范围更广.这个事实,加上Java版本的成熟度是否是最佳选择?
也.我是否应该考虑将NWDI用于Dynpro?当我可以免费使用ANT时,NWDI对我来说似乎是个坏主意.
在 SAP ERP GUI 中,对于报告选择标准:当没有为该字段维护文档时,如何获取与屏幕字段关联的技术信息?
通常,当该字段有文档时,我可以在该字段处于焦点时按 F1。这将打开帮助窗口。在帮助窗口中,有一个技术信息按钮。按下它将弹出一个对话框,其中包含与屏幕字段相关的更多技术细节。如果没有为该领域维护文档,我如何获得此信息?
TIA, 马丁
一个输入字段是employeenumber(pernr).我想给出一个选择窗口,允许最终用户通过名字和姓氏获取pernr.我想要的是与事务pa20中的inputfield非常相似.请参见下面的截图.任何人都可以给我一些提示吗?我是ABAP和WDA的新手.
我试图在一个变量中放入一个用户必须从弹出窗口中引入的值。
我已经看到该函数POPUP_GET_VALUES可以是adiente,但是在该函数需要的参数中,我看到有一个表可以将值放入一个字段中。由于它是一个唯一值,我想将它放在先前定义的单个变量中,以便也能够为用户输入值建立限制,因为它必须是一个百分比。
有任何想法吗?
谢谢!
我正在程序启动时实施一些检查,主要是授权,并且如果不允许用户执行程序,则希望中止程序。通过 SE93 进行显式身份验证对象分配不适合我,因为它缺乏灵活性。
LOAD-OF-PROGRAM我尝试通过两种方式做到这一点:
RETURN声明E两者都导致 dump Illegal interruption of the event LOAD-OF-PROGRAM,这确实对应于ABAP docu:
事件块必须完全执行,否则会出现运行时错误
这意味着可以指定退出事件块而不返回事件块的语句。
我解释这段话这意味着可以指定退出事件块的语句而不返回到事件块,因为该块中不允许使用任何退出语句。我的理解正确吗?
现在我在 INITIALIZATION 块中进行中止/验证:
INITIALIZATION.
IF do_validate( ) = abap_false.
MESSAGE 'You are busted!' TYPE 'E'.
ENDIF
Run Code Online (Sandbox Code Playgroud)
问题是我的程序有多个选择屏幕,并且INITIALIZATION块被触发多次。是的,我当然可以通过屏幕编号来区分它们,但这样做LOAD-OF-PROGRAM似乎更合乎逻辑,因为每个程序只执行一次。
问题:是否有某种方法可以在 LOP 事件或其他最佳实践中实现这一目标?为什么?
我有 2 个屏幕 7000 和 7001,7000 屏幕包含一个按钮,当我们单击它时,它必须导航到 7001 屏幕,但它没有按预期工作。SCREEN 7000 也有一些细节可以显示为 alv。
屏幕正在导航到屏幕 7001,但数据未刷新。任何人都可以帮忙吗?我正在使用 alv 网格容器。对于两个屏幕,我使用相同的 alv 网格
示例代码:
screen 7000 PAI:
WHEN 'DISPLAY'.
call SCREEN 7001.
screen 7001 PBO:
GET REFERENCE OF m_instance->gt_field INTO lr_output.
CREATE OBJECT gr_grid
EXPORTING
i_parent = cl_gui_container=>default_screen.
CALL FUNCTION 'ZLSO_GENERATE_GENERIC_FIELDCAT'
EXPORTING
ir_input_value = lr_output
IMPORTING
et_fieldcat_fcat = lt_fldcat
EXCEPTIONS
xc_invalid_type = 1
xc_empty_table = 2
xc_unknown_error = 3
OTHERS = 4.
IF sy-subrc <> 0.
MESSAGE ' Error in generating ALV' TYPE 'E'.
ENDIF. …Run Code Online (Sandbox Code Playgroud)