IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

SAP Discussion :

Appeler une méthode dynamiquement


Sujet :

SAP

  1. #1
    Membre du Club
    Profil pro
    SAP
    Inscrit en
    Février 2009
    Messages
    52
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : Belgique

    Informations professionnelles :
    Activité : SAP
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2009
    Messages : 52
    Points : 50
    Points
    50
    Par défaut Appeler une méthode dynamiquement
    Bonjour,

    Voila, j'ai un nouveau problème à vous soumettre...

    Je me trouve dans la situation suivante :

    - Une classe "ZCL_ENQ_OBJ"
    --> Méthode abstraite "SET_LOCK_ARG"

    - Une liste de class "ZCL_ENQ_OBJ_*_*" qui héritent de zcl_enq_obj
    --> Redéfinition de "SET_LOCK_ARG"
    --> Contient un attribut publique "GS_KEY" dont le type varie en fonction de la classe

    j'ai pour le moment, défini une méthode abstraite dans zcl_enq_obj, que je redéfini dans chacune des sous-classes.

    Je souhaiterais cependant rendre cette méthode suffisamment dynamique que pour ne pas avoir à la redéfinir à chaque fois. Et donc...

    SET_LOCK_OBJ ==> Mode Instance dans ZCL_ENQ_OBJ...

    Jusque là, rien de sorcier...

    Je me retrouve donc avec le code source suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    METHOD set_lock_arg. "Dans ZCL_ENQ_OBJ
    
    
      DATA: l_type_descr   TYPE REF TO  cl_abap_typedescr,
            l_class_descr   TYPE REF TO  cl_abap_classdescr,
            l_struct_descr TYPE REF TO  cl_abap_structdescr.
    
      DATA: type1 TYPE c LENGTH 30,
            type2 TYPE c LENGTH 30.
    
      DATA: lt_fld TYPE           ddfields,
            ls_fld LIKE LINE OF lt_fld.
    
     DATA ls_key TYPE zkey_obj_zifp.
    
      DATA: lr_new_obj TYPE REF TO object,
            lr_data      TYPE REF TO data.
    
      FIELD-SYMBOLS: <fs1>  TYPE REF TO object,
                     <fs2> TYPE ANY.
    
    *1 : Retrouver la description de la classe qui appelle cette méthode
    
      l_type_descr = cl_abap_classdescr=>describe_by_object_ref( me ).
    * "Me" contient bien une référence vers une class du type ZCL_ENQ_OBJ_*_*
    
      TRY.
          l_class_descr ?= l_type_descr.
    
          SPLIT l_class_descr->absolute_name AT '=' INTO type1 type2.
    
          CREATE DATA lr_data TYPE REF TO (type2).
          ASSIGN lr_data->* TO <fs2>.
    
    * Ou
    *      GET REFERENCE OF lr_data INTO <fs>.
    
          TRY.
              <fs2> ?= me.
              ASSIGN <fs2> TO <fs1>.
    
    *         on récupére la structure gs_key de notre sous object
    *         on la place dans une straucture local du même type 
              ls_key = <fs1>->(gs_key).
    
    
              BREAK-POINT.
    
            CATCH cx_sy_move_cast_error.
          ENDTRY.
    
    
        CATCH cx_sy_move_cast_error.
      ENDTRY.
    Il va sans dire que le ls_key déclaré ici n'est là qu'à titre de test...
    Je vous assure cependant que le type de ls_key est le même que celui du gs_key que je veux récupérer...

    J'obtiens donc le message d'erreur suivant :

    Dynamic attribute declarations are not supported in the current
    statement.


    Voila voila...

    Une idée messieurs dames ???

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Août 2009
    Messages
    574
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 574
    Points : 764
    Points
    764
    Par défaut
    J'ai l'impression que C'est le sens qui ne va pas : il ne faut pas que ta méthode de ta super-classe agisse sur l'attribut de la sous-classe (l'OO impose des limites, je pense que c'est bien), il faudrait plutôt que la sous-classe "enregistre" sa variable auprès de la super-classe (paramètre d'une méthode, par exemple le constructeur), qui pourra garder une référence sur cette variable, et ensuite tu la travailles comme tu veux dans la super-classe

  3. #3
    Membre du Club
    Profil pro
    SAP
    Inscrit en
    Février 2009
    Messages
    52
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : Belgique

    Informations professionnelles :
    Activité : SAP
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2009
    Messages : 52
    Points : 50
    Points
    50
    Par défaut
    Ah, ce n'est pas idiot...

    Je me demande, est-il possible de déclarer un attribut sous forme de Field-Symbol ???

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Août 2009
    Messages
    574
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 574
    Points : 764
    Points
    764
    Par défaut
    non! Mais dans les nouvelles versions, 7.02/7.2 si je ne me trompe pas, SAP a étendu l'utilisation du déréférencement ->* (alors que jusqu'en 7.0 c'était limité au ASSIGN et quelques rares instructions) donc plus besoin de field symbol

  5. #5
    Membre du Club
    Profil pro
    SAP
    Inscrit en
    Février 2009
    Messages
    52
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : Belgique

    Informations professionnelles :
    Activité : SAP
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2009
    Messages : 52
    Points : 50
    Points
    50
    Par défaut
    Ah, une bonne nouvelle...

    Cependant... Si je ne me trompe... Nous sommes toujours sur la 4.2 au boulot...

    Qu'à cela ne tienne, je trouverai un subterfuge adéquat...

Discussions similaires

  1. Appeller une méthode en codant dynamiquement le nom
    Par faa08 dans le forum Débuter
    Réponses: 11
    Dernier message: 16/07/2013, 11h33
  2. Appeler une méthode serveur sur un imageButton dynamique
    Par Ghunter59 dans le forum ASP.NET
    Réponses: 2
    Dernier message: 10/06/2009, 12h24
  3. Réponses: 1
    Dernier message: 06/09/2008, 12h54
  4. Appeler une méthode dynamiquement
    Par doof dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 03/01/2005, 23h15
  5. Comment l'appel à une méthode virtuelle....
    Par Blobette dans le forum C++
    Réponses: 7
    Dernier message: 07/12/2004, 13h55

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo