以下是创建对象的代码段。
Form userexit_save_document_prepare.
data: /bks/exitmanager type ref to /bks/exit_manager.
create object /bks/exitmanager
exporting main_prog = 'SAPMV45A'
exit_form = 'USEREXIT_SAVE_DOCUMENT_PREPARE'.
include /bks/exitman.
ENDFORM.
我从文档中得到了这个
出于性能原因,在userexits的情况下,应填充参数“main_prog”和“exit_form”,这些参数经常执行,例如“SAPMV45A”中的“user_field_modification”,每个屏幕字段都会调用它。 / p>
1)调用create / bks / exitmanager时究竟发生了什么?为对象分配的内存等?
2)为什么出于性能原因需要填充create对象的导出参数?
答案 0 :(得分:1)
我不是百分百肯定,但这是我最好的猜测:
构造了一个名为/ bks / exitmanager的对象(它是类/ bks / exit_manager的一个对象,或者更具体的一个对该类对象的引用/“指针”)..分配所需的内存等。,还调用了“构造函数”代码(可能会将一些实例变量设置为传递给调用)。
如果您明确传递这些参数,则不必在运行时“计算”它们(例如,通过查看调用堆栈)。这应该节省一些时间,特别是如果必须经常进行(如文档中所述)。
答案 1 :(得分:0)
查看/ bks / exit_manager实际上是什么,以及您要完成的内容的简要说明将会有所帮助。
扩展IronGoofy写的内容:
data:/ bks / exitmanager type ref to / bks / exit_manager 这会在程序的ABAP内存中创建一个引用指针,就像字段符号一样。它也必须已经被推迟了。如果它在include中,则需要移动include。
创建object / bks / exitmanager 导出main_prog ='SAPMV45A' exit_form ='USEREXIT_SAVE_DOCUMENT_PREPARE'。 这将基于声明的类创建一个对象实例,并将其分配给referance指针。它通过首先调用构造函数方法来完成此操作。 只有通过考试/ bks / exit_manager才能确切了解您需要导出的内容。
答案 2 :(得分:0)
如果没有看一下/ BKS / EXIT_MANAGER的构造函数,就不可能知道发生了什么以及为什么要传递参数。虽然保持设置缓冲区是一种常见的模式(想象一下静态哈希表,其中键是参数,值保存任何复杂且耗时的内容)。在这种情况下,我本来期望一个无法直接访问的受保护构造函数,但只使用一个静态工厂方法,该方法使用散列表来保留退出处理程序本身的引用 - 最佳使用弱引用...