1

下面是创建对象的代码片段。

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.

我从文档中得到了这个

出于性能原因,参数“main_prog”和“exit_form”应该被填充,在用户退出的情况下,它们经常像“SAPMV45A”中的“user_field_modification”一样被执行,每个屏幕字段都会调用它。

1) 调用 create object /bks/exitmanager 时到底发生了什么?为对象等分配的内存?

2)为什么出于性能原因需要填写创建对象的导出参数?

4

3 回答 3

1

我不是 100% 确定,但这是我最好的猜测:

  1. 构造了一个名为 /bks/exitmanager 的对象(它是 /bks/exit_manager 类的一个对象,或者更具体地是指向此类对象的引用/“指针”).. 分配的所需内存等,还有“构造函数”代码被调用(可能将一些实例变量设置为传递给调用)。

  2. 如果您明确传递这些参数,则不必在运行时“计算”它们(例如,通过查看调用堆栈)。这应该可以节省一些时间,尤其是在必须经常进行的情况下(如文档中所述)。

于 2009-12-10T07:34:16.270 回答
0

如果不查看 /BKS/EXIT_MANAGER 的构造函数,就不可能知道发生了什么以及为什么要传递参数。尽管保留设置缓冲区是一种常见的模式(考虑一个静态哈希表,其中键是参数,值保存复杂且耗时的获取)。在这种情况下,我会期望一个无法直接访问的受保护构造函数,而只能使用静态工厂方法,该方法使用散列表来保留退出处理程序本身的引用 - 最好使用弱引用......

于 2009-12-12T19:51:30.767 回答
0

这将有助于了解 /bks/exit_manager 的实际含义,并简要说明您要完成的工作。

扩展 IronGoofy 所写的内容:

data: /bks/exitmanager type ref to /bks/exit_manager 这会在程序的 ABAP 内存中创建一个引用指针,就像一个字段符号。它也必须已经delared。如果它在包含中,则需要移动包含。

创建对象 /bks/exitmanager 导出 main_prog = 'SAPMV45A' exit_form = 'USEREXIT_SAVE_DOCUMENT_PREPARE'。这将基于声明的类创建一个对象实例,并将其分配给引用指针。它通过首先调用构造函数方法来做到这一点。只有通过检查 /bks/exit_manager,您才能准确了解需要导出的内容。

于 2009-12-10T13:38:14.560 回答