2009-12-10 7 views
1

Vous trouverez ci-dessous un extrait de code qui crée un objet.ABAP create object

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. 

J'ai eu ce de la documentation

Pour des raisons de performance, doit être rempli les paramètres « main_prog » et « exit_form », dans le cas de userexits, qui sont effectués très souvent comme « user_field_modification "dans" SAPMV45A "qui est appelé pour chaque champ d'écran unique.

1) Que s'est-il passé exactement lorsque l'objet create/bks/exitmanager a été appelé? mémoire allouée pour l'objet etc?

2) Pourquoi, pour des raisons de performances, les paramètres d'export de l'objet create doivent-ils être remplis?

Répondre

1

Je ne suis pas sûr à 100%, mais voici ma meilleure estimation:

  1. un objet appelé/BKS/exitmanager est construit (qui est un ojet de la classe/BKS/exit_manager ou plus spécifiques une référence/"pointeur" vers un objet de cette classe) .. la mémoire requise allouée etc., mais aussi le code "constructeur" est appelé (met probablement certaines variables d'instance comme passées à l'appel).

  2. Si vous transmettez explicitement ces paramètres, ils n'ont pas besoin d'être "calculés" au moment de l'exécution (par exemple en regardant la pile d'appels). Cela devrait faire gagner du temps, surtout si cela doit être fait assez souvent (comme décrit dans la documentation).

0

Il serait utile de voir ce qu'est réellement/bks/exit_manager et une brève explication de ce que vous essayez d'accomplir.

expansion sur ce IronGoofy a écrit:

données:/BKS/type exitmanager ref à/BKS/exit_manager Cela crée un pointeur de référence dans la mémoire ABAP de votre programme, comme un symbole de champ. En outre, il doit déjà être détruit. Si c'est dans l'include, vous devez déplacer l'include.

créer l'objet/BKS/exitmanager exportation main_prog = 'SAPMV45A' exit_form = 'USEREXIT_SAVE_DOCUMENT_PREPARE. Cela crée une instance d'objet basée sur la classe déclarée et l'affecte au pointeur de référence. Il le fait en appelant la méthode constructeur en premier. Ce n'est qu'en examinant/bks/exit_manager que vous saurez exactement ce que vous devez exporter.

0

Il est impossible de dire ce qui se passe et pourquoi les paramètres devraient être passés sans regarder le constructeur de/BKS/EXIT_MANAGER. C'est un modèle commun pour garder un tampon de paramètres (pensez à une table hachée statique avec la clé étant les paramètres et la valeur tenant tout ce qui est compliqué et long à chercher). Dans ce cas, je me serais attendu à un constructeur protégé qui ne peut pas être accédé directement, mais en utilisant une méthode statique qui utilise une table hachée pour conserver les références du gestionnaire de sortie lui-même - optimalement en utilisant des références faibles ...