OVH Cloud OVH Cloud

WD9: POO et indirections

2 réponses
Avatar
I.G.LOG
Bonjour a tous.
J'essai de creer des objets qui conservent les valeurs initiales des champs
d'une table.
Pour ca j'ai cree pour chaque table un objet correspondant dans lequel sont
decrites les rubriques.
L'exemple ci-apres utilise l'objet _OLProLG qui hérite de __Enreg ou est
stocké la valeur init du tuple (:_Init)
Mais j'ai des problemes avec les indirections qui fonctionnent mal: voir la
méthode __Enreg:mMemorise()
Merci pour vos lumieres
Phil


// Les classes

__Enreg est une classe
hérite de IGCollectionItem
IDENT est un entier
_NOMFIC est une chaîne
_NOMID est une chaîne
FLAG est un entier sur 1 octet
_Champs est un tableau dynamique
_Init est un objet dynamique
FIN

PROCEDURE __Enreg::mMemorise()

lCh1 est une chaîne
lCh2 est une chaîne
x est un entier
y est un entier


// Mémorise
y = Dimension(:_Champs)
POUR x = 1 A y
lCh1 = ":"+:_Champs[x]
lCh2 = ":_Init:"+:_Champs[x]
// Les deux lignes suivantes plantent a l'exec. err 1059: :_init:<champ>
est inconnu
// alors que la l'indirection {lCh1} fonctionne bien ?!!?
// {lCh2} = {lCh1}
// Trace({lCh2})
FIN


_OLProLG est une classe
hérite de __Enreg
IDOL est un entier
NUMCONTROLE est un entier
NUMCONST est un entier sur 2 octet
NUMPHA est un entier sur 2 octet
DATE est une chaîne
HEUREFAIT est une chaîne
OBSERV est une chaîne
DATEFAIT est une chaîne
FIN

PROCEDURE _OLProLG::Constructeur()

:_NOMFIC = "OLPROLG"
:_NOMID = "IDOLPROLG"
Dimension(:_Champs,16)
:_Champs[1] = "IDOL"
:_Champs[2] = "NUMCONTROLE"
:_Champs[3] = "NUMERO"
:_Champs[4] = "IDARTICLE"
:_Champs[5] = "NUMGRP"
:_Champs[6] = "NUMPHA"
:_Champs[7] = "NUMLIGNE"
:_Champs[8] = "NUMCONST"
:_Champs[9] = "DESIGNATION"
:_Champs[10] = "ETAT"
:_Champs[11] = "QTE"
:_Champs[12] = "IDFOURNISS"
:_Champs[13] = "DATE"
:_Champs[14] = "HEUREFAIT"
:_Champs[15] = "OBSERV"
:_Champs[16] = "DATEFAIT"

PROCEDURE _OLProLG::mMemorise()

// Mémorise
:_Init = allouer un _OLProLG
:__Enreg::mMemorise()



// Programme de test (qui plante a l'exec)

lobj est un _OLProLG

lobj:IDENT = 93215
lobj:IDOL = 17033
lobj:mMemorise() // CA PLANTE SUR INDIRECTION :_Init !!!!!
lobj:_Init:idol = 10

Info(lobj:IDOL,lobj:_Init:idol)

2 réponses

Avatar
mat
I.G.LOG wrote:
Bonjour a tous.
J'essai de creer des objets qui conservent les valeurs initiales des champs
d'une table.
Pour ca j'ai cree pour chaque table un objet correspondant dans lequel sont
decrites les rubriques.
L'exemple ci-apres utilise l'objet _OLProLG qui hérite de __Enreg ou est
stocké la valeur init du tuple (:_Init)
Mais j'ai des problemes avec les indirections qui fonctionnent mal: voir la
méthode __Enreg:mMemorise()
Merci pour vos lumieres
Phil


// Les classes

__Enreg est une classe
hérite de IGCollectionItem
IDENT est un entier
_NOMFIC est une chaîne
_NOMID est une chaîne
FLAG est un entier sur 1 octet
_Champs est un tableau dynamique
_Init est un objet dynamique
FIN

PROCEDURE __Enreg::mMemorise()

lCh1 est une chaîne
lCh2 est une chaîne
x est un entier
y est un entier


// Mémorise
y = Dimension(:_Champs)
POUR x = 1 A y
lCh1 = ":"+:_Champs[x]
lCh2 = ":_Init:"+:_Champs[x]
// Les deux lignes suivantes plantent a l'exec. err 1059: :_init:<champ>
est inconnu
// alors que la l'indirection {lCh1} fonctionne bien ?!!?
// {lCh2} = {lCh1}
// Trace({lCh2})
FIN





Salut,

Il me semble que lCh1 a un ":" de plus au début que lch2 ?

lCh1 = ":"+:_Champs[x]
lCh2 = ":_Init:"+:_Champs[x]

Salutations
Mat
Avatar
mat
mat wrote:
Il me semble que lCh1 a un ":" de plus au début que lch2 ?

lCh1 = ":"+:_Champs[x]
lCh2 = ":_Init:"+:_Champs[x]




Pardon, je n'ai pas bien regardé...