Précédent   Forum des professionnels en informatique > Logiciels > Solutions d'entreprise > ERP > SAP
SAP Forum d'entraide sur SAP et sur la programmation avec le langage ABAP
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 05/05/2011, 10h14   #1
Nouveau Membre du Club
 
Renaud Caussin
SAP
Inscription : février 2009
Messages : 52
Détails du profil
Informations personnelles :
Nom : Renaud Caussin
Âge : 24
Localisation : Belgique

Informations professionnelles :
Activité : SAP
Secteur : Industrie

Informations forums :
Inscription : février 2009
Messages : 52
Points : 33
Points : 33
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 :
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 ???
thedevilmaycry est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/05/2011, 00h37   #2
Membre confirmé
 
Inscription : août 2009
Messages : 226
Détails du profil
Informations forums :
Inscription : août 2009
Messages : 226
Points : 239
Points : 239
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
sandraros est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/05/2011, 09h03   #3
Nouveau Membre du Club
 
Renaud Caussin
SAP
Inscription : février 2009
Messages : 52
Détails du profil
Informations personnelles :
Nom : Renaud Caussin
Âge : 24
Localisation : Belgique

Informations professionnelles :
Activité : SAP
Secteur : Industrie

Informations forums :
Inscription : février 2009
Messages : 52
Points : 33
Points : 33
Ah, ce n'est pas idiot...

Je me demande, est-il possible de déclarer un attribut sous forme de Field-Symbol ???
thedevilmaycry est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/05/2011, 20h41   #4
Membre confirmé
 
Inscription : août 2009
Messages : 226
Détails du profil
Informations forums :
Inscription : août 2009
Messages : 226
Points : 239
Points : 239
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
sandraros est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/05/2011, 12h40   #5
Nouveau Membre du Club
 
Renaud Caussin
SAP
Inscription : février 2009
Messages : 52
Détails du profil
Informations personnelles :
Nom : Renaud Caussin
Âge : 24
Localisation : Belgique

Informations professionnelles :
Activité : SAP
Secteur : Industrie

Informations forums :
Inscription : février 2009
Messages : 52
Points : 33
Points : 33
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...
thedevilmaycry est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 09h58.


 
 
 
 
Partenaires

Hébergement Web