Téléchargement des produits


Version anglaise


 


Description

Une fois qu'une instance de classe est déclarée dans un programme via l'ordre REF_CLASSE, une syntaxe particulière est à utiliser afin de pouvoir accéder à ses attributs, en lecture comme en écriture.

Cette syntaxe est basée sur le principe des Getter et Setter (accesseurs et mutateurs des langages objet).


Récupération de la valeur d'un attribut de classe

Pour récupérer la valeur d'un attribut d'une variable de type REF_CLASSE, la syntaxe suivante doit être utilisée :

MaVariableResultat = MonInstance.getNomAttribut()

ou

MaVariableResultat = MonInstance.getNomAttributTableau()(indice[,indice2])


Exemple :

Classe Adélia VOITURE dont le source L4G est :

*attributs

{

ALPHA(15)    Marque;

ALPHA(250)   Modele;

NUM_BIN_2    NbCv;

DATE         DateAchat;

ALPHA(50)    Options(30)

}


Puis dans le programme Visual Adélia Batch :

* Déclaration d'une variable REF_CLASSE :

REF_CLASSE(VOITURE) iVoiture

NUM_BIN_2 MonBin2

DATE MaDate

ALPHA(50) TabOptions(30)

ALPHA(50) option


* Récupération de la valeur de l'attribut 'NbCv' de la classe iVoiture :

MonBin2 = iVoiture.getNbCv()


* Récupération de la valeur de l'attribut 'NbCv' de la classe iVoiture :

MaDate = iVoiture.getDateAchat()


* Récupération de la valeur du 1er élément de l'attribut 'Options' de la classe iVoiture :

Option = iVoiture.getOptions()(1)


Remarque :

On suppose ici que la variable iVoiture est déjà instanciée (par exemple qu'elle est un des paramètres en entrée du programme ou de la procédure), ou alors qu'elle a été instanciée au sein du programme via l'ordre L4G NEW :

iVoiture = new VOITURE()


Il est possible de tester si la variable iVoiture est instanciée, à l'aide du mot réservé *NULL :

Si iVoiture = *NULL


Récupération de tous les éléments d'un attribut de tableau

Pour récupérer la totalité des valeurs d'un attribut de tableau à une dimension, deux dimensions ou dynamique, la syntaxe suivante doit être utilisée :
              MaVariableTableau = MonInstance.getNomAttributTableau()
NouveauTableau doit être une variable tableau ayant un type Adélia et des dimensions compatibles avec ceux de l'attribut tableau concerné.
Si le nombre de postes de NouveauTableau est différent du nombre de postes de l'attribut tableau, seuls les postes en commun sont récupérés.


Exemple :

REF_CLASSE(VOITURE) iVoiture
ALPHA(50) TabOptions(30)

iVoiture = new VOITURE()


* .... valorisation des attributs d'instance...


* Récupération de la valeur l'attribut tableau 1D 'Options' de l'instance de classe VOITURE dans la variable tableau "tabOptions"
tabOptions = iVoiture.getOptions()

↑ Haut de page


Modification de la valeur d'un attribut de classe

Pour fixer la valeur d'un attribut d'une variable de type REF_CLASSE, la syntaxe suivante doit être utilisée :

XXX.setYYY(ZZZ)

XXX étant une variable de type REF_CLASSE

YYY étant attribut de cette classe

ZZZ étant la valeur à fixer à cet attribut



Lorsque l'attribut est une classe

REF_CLASSE(PERSONNE)      iPere

REF_CLASSE(FAMILLE)       iFamille

iPere = new PERSONNE()

iFamille.setPere(iPere)


Lorsque l'attribut est un type Adélia standard simple (ALPHA, NUM_BIN_2,..) ou un tableau global

MonInstance.setNomAttribut(NouvelleValeur)

NouvelleValeur peut être une constante alphanumérique, numérique ou une variable, ayant un type Adélia compatible avec celui de l'attribut concerné.

Attention : dans le cas d'une constante numérique avec décimales, le point est le seul séparateur décimal admis.  


Exemple :

REF_CLASSE(PERSONNE)   iPere

ALPHA(33)              MonAlpha33


iPere.setPrenom('Jean')

iPere.setNom(MonAlpha33)
iPere.setTaille(1.78)

↑ Haut de page


Pour mettre à jour un élément d'un attribut tableau

MonInstance.setNomAttribut(NouvelleValeur, Indice1[, Indice2])


NouvelleValeur peut être une constante alphanumérique, numérique, ou une variable, ayant un type Adélia compatible avec celui de l'attribut concerné.


Indice1 et Indice2 peuvent être une constante numérique ou une variable numérique.


Exemple :

REF_CLASSE(PERSONNE)     iPere

REF_CLASSE(VOITURE)      iVoiture

NUM_BIN_4                MonBin4

NUM_BIN_2                Indice1

NUM_BIN_2                Indice2


Indice1 = 5

iPere.setTableau1DPrenomsEnfants('nicolas', Indice1)

iPere.setTableau1DPrenomsEnfants('virginie', 4)


iVoiture.setOptions('peugeot', 4)

iPere.setTableauBin4_2D (MonBin4, 6, 11)

iPere.setTableauBin4_2D (444, Indice1, Indice2)

↑ Haut de page


Pour mettre à jour tous les éléments d'un attribut tableau

MonInstance.setNomAttributTableau(NouveauTableau | NouvelleValeur)


NouveauTableau doit être une variable tableau ayant un type Adélia et des dimensions compatibles avec ceux de l'attribut tableau concerné. Si le nombre de postes de NouveauTableau est différent du nombre de postes de l'attribut tableau, la mise à jour porte uniquement sur le nombre de postes en commun. 

NouvelleValeur peut être une constante alphanumérique, numérique, ou une variable simple, ayant un type Adélia compatible avec celui de l'attribut tableau concerné. Les mots réservés *VRAI et *FAUX pour le type BOOL ainsi que *NULL pour le type IMAGE, sont également admis.  Plus largement, les mots réservés ayant un type Adélia compatible avec celui de l'attribut tableau concerné sont admis.


Exemple :

REF_CLASSE(PERSONNE)     iPere

REF_CLASSE(VOITURE)      iVoiture

NUM_BIN_4                MonBin4

NUM_BIN_4                MonTableauBin4(2,2)

ALPHA(20)                MonAlpha


MonBin4 = 5865

MonAlpha = 'ABS'

MonTableauBin4(1,1) = 20

MonTableauBin4(1,2) = 40

MonTableauBin4(2,1) = 60

MonTableauBin4(2,2) = 80


iVoiture.setOptions('GPS')

iVoiture.setOptions(MonAlpha)

iPere.setTableauBin4_2D (444)

iPere.setTableauBin4_2D (MonBin4)

iPere.setTableauBin4_2D (MonTableauBin4)


↑ Haut de page


Pour mettre à jour un élément d'un attribut de type tableau dynamique

Exemple :

Classe Adélia TICKET dont le source L4G est :

*attributs

{

ALPHA(15)    Id;

ALPHA(250)   Comments();

DATE         Updates();

REF_CLASSE(SOURCE)       Sources()

}



Exemple :

REF_CLASSE(TICKET)     itick
REF_CLASSE(SOURCE)     iSrc
DATE currDate


        iTick = new TICKET()
        iTick.Comments = new ALPHA(250)()(10)

        iTick.Updates = new DATE()(10)
        iTick.Sources = new SOURCE()(10)

 
        HEURE currDate
        iTick.setId('1')

iTick.setComments('Création du ticket', 1)

iTick.setUpdates(currDate, 1)

iSrc = new SOURCE()

iTick.setSources(iSrc, 1)



Pour mettre à jour tous les éléments d'un attribut de type tableau dynamique

MonInstance.setNomAttributTableau(NouveauTableau | NouvelleValeur)


NouveauTableau doit être une variable tableau de dimension 1 ayant un type Adélia compatible avec celui de l'attribut tableau dynamique concerné.
Lorsque le nombre de postes de NouveauTableau est différent du nombre d'éléments courants de l'attribut tableau dynamique, la mise à jour porte sur le nombre de postes de NouveauTabeau, et le nombre de postes et d'éléments de l'attribut tableau dynamique après affectation est égal au nombre de postes de "NouveauTabeau".

NouvelleValeur peut être une constante alphanumérique, numérique, ou une variable simple, ayant un type Adélia compatible avec celui de l'attribut tableau concerné. Les mots réservés *VRAI et *FAUX pour le type BOOL ainsi que *NULL pour le type IMAGE, sont également admis. Plus largement, les mots réservés ayant un type Adélia compatible avec celui de l'attribut tableau concerné sont admis. 
NouvelleValeur est affecté à tous les postes alloués de l'attribut concernés. 


Exemple :

REF_CLASSE(TICKET) itick
REF_CLASSE(SOURCE) iSrc
DATE tabDates(10)

ALPHA(250) myComment


myComment = 'Lorem ipsum dolor sit amet, consectetur adipiscing elit.'

* ... valorisation des occurrences du tableau 1D "tabDates"...


* Instanciation de la classe et des tableaux dynamiques
iTick = new TICKET()
iTick.Comments = new ALPHA(250)()(10)
iTick.Updates = new DATE()(10)
iTick.Sources = new SOURCE()(10)


* Mise à jour de l'attribut tableau dynamique "Updates" à partir de la totalité de la variable tableau "tabDates"
iTick.setUpdates(tabDates)


* Mise à jour de l'attribut tableau dynamique "Comments" à partir de la variable simple "myComment"
iTick.setComments(myComment)


↑ Haut de page


Pour ajouter un élément en fin d'un attribut de type tableau dynamique

Toujours à partir de la classe TICKET, il est possible d'ajouter une valeur en fin des tableaux dynamiques 'Comments', 'Updates' ou 'Sources' et ce quelle que soit la taille initiale allouée pour le tableau.



Exemple :

REF_CLASSE(TICKET)     itick
REF_CLASSE(SOURCE)     iSrc
DATE currDate


        iTick = new TICKET()
        iTick.Comments = new ALPHA(250)()(1)

        iTick.Updates = new DATE()(5)
        iTick.Sources = new SOURCE()(2)


        HEURE currDate
        iTick.setId('1')


iTick.setComments('Création du ticket', 1)

iTick.setComments('Ticket creation', *FIN)


iTick.setUpdates(currDate, 1)


iSrc = new SOURCE()

iTick.setSources(iSrc, 1)

iSrc = new SOURCE()

iTick.setSources(iSrc, *FIN)

iSrc = new SOURCE()

iTick.setSources(iSrc, *FIN)


Remarque :

Lors de la sérialisation, seuls les éléments réellement ajoutés au tableau dynamique sont pris en compte.
Cette assertion est toujours vraie pour l'ordre CONV_DONNEES.
Dans le cas de la sérialisation d'une classe d'un service web REST, il est nécessaire de déclarer le bon JacksonJaxbJsonProvider (celui du issu du package com.fasterxml.jackson.jaxrs.json) dans le fichier de configuration beans.xml.



Extrait du fichier beans.xml [JacksonJaxbJsonProvider] :

Beans.xml
<cxf:bus>
  <cxf:properties>
    <entry key="skip.default.json.provider.registration" value="true"/>
  </cxf:properties>
</cxf:bus>

<!-- remplace le org.apache.cxf.jaxrs.provider.json.JSONProvider ou org.codehaus.jackson.jaxrs.JacksonJaxbJsonProvider -->
<bean class="com.fasterxml.jackson.jaxrs.json.JacksonJaxbJsonProvider"/>

↑ Haut de page



Récupération du nombre d'éléments d'un attribut de type tableau dynamique

La fonction prédéfinie &NBR_ELT permet de récupérer le nombre d'éléments d'un attribut de type tableau dynamique.


Exemple :


REF_CLASSE(TICKET)     itick

NUM_BIN_2  nbComments


iTick = new TICKET()
iTick.Comments = new ALPHA(250)()(1)


iTick.setComments('Comment 1', 1)

iTick.setComments('Comment 2', *FIN)

iTick.setComments('Comment 3', *FIN)


nbComments = &NBR_ELT(iTick.getComments())

↑ Haut de page


  • Aucune étiquette