ABAP создать объект

Ниже приведен фрагмент кода, создающего объект.

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 должны быть заполнены в случае выходов пользователя, которые очень часто выполняются как user_field_modification в SAPMV45A, которое вызывается для каждого отдельного поля экрана.

1) Что именно произошло при вызове create object / bks / exitmanager? память, выделенная для объекта и т. д.?

2) Почему по соображениям производительности необходимо заполнить параметры экспорта создаваемого объекта?


person SteD    schedule 10.12.2009    source источник


Ответы (3)


Я не уверен на 100%, но вот мое лучшее предположение:

  1. создается объект с именем / bks / exitmanager (который является объектом класса / bks / exit_manager или, более конкретно, ссылкой / "указателем" на объект этого класса) .. требуемая выделенная память и т. д., но также " вызывается код конструктора (вероятно, устанавливает некоторые переменные экземпляра, переданные в вызов).

  2. Если вы явно передаете эти параметры, их не нужно «вычислять» во время выполнения (например, глядя на стек вызовов). Это должно сэкономить время, особенно если это придется делать довольно часто (как описано в документации).

person Thorsten    schedule 10.12.2009

Было бы полезно увидеть, что на самом деле представляет собой / bks / exit_manager, и дать краткое объяснение того, чего вы пытаетесь достичь.

Расширяя то, что написал IronGoofy:

data: / bks / exitmanager type ref to / bks / exit_manager Это создает указатель ссылки в памяти ABAP вашей программы, очень похожий на символ поля. И это уже должно быть сделано. Если он есть во включении, вам нужно переместить его.

создать объект / bks / exitmanager exporting main_prog = 'SAPMV45A' exit_form = 'USEREXIT_SAVE_DOCUMENT_PREPARE'. Это создает экземпляр объекта на основе объявленного класса и назначает его указателю ссылки. Для этого сначала вызывается метод конструктора. Только изучив / bks / exit_manager, вы точно узнаете, что вам нужно экспортировать.

person Steven Oldner    schedule 10.12.2009

Невозможно сказать, что происходит и почему следует передавать параметры, не глядя на конструктор / BKS / EXIT_MANAGER. Тем не менее, это общий шаблон - хранить буфер настроек (подумайте о статической хешированной таблице, в которой ключ является параметрами, а значение, содержащим все, что является сложным и трудоемким для выборки). В этом случае я ожидал бы защищенного конструктора, к которому нельзя получить доступ напрямую, но только с использованием статического фабричного метода, который использует хешированную таблицу для хранения ссылок самого обработчика выхода - оптимально с использованием слабых ссылок ...

person vwegert    schedule 12.12.2009