Vous êtes sur la page 1sur 31

Langage

© 2008 Sage – Division Moyennes & Grandes Entreprises

Sommaire

1. Les variables
2. Les fonctions
3. Les variables systèmes
4. Les instructions
5. Les messages d’erreur ou d’avertissement
6. Gestion des traces
7. Optimisation des requêtes

2 © 2006 Sage – Division Moyennes & Grandes Entreprises

1
1. Les variables

DECLARATION DE VARIABLES

Syntaxe
Etendue Type interne Nom de variable Dimension (si nécessaire)
Global Integer variable_name (nb ) ou ( nb1..nb2 )
Shortint
libelle
Local Decimal
Char
Date
Clbfile
Blbfile

Local File Table_name occurences possibles


Local Mask Masque_name occurences possibles

LES VARIABLES DECLAREES SONT AUTOMATIQUEMENT INITIALISEES.

L’INSTRUCTION RAZ RE-INITIALISE UNE VARIABLE.


3 © 2006 Sage – Division Moyennes & Grandes Entreprises

1. Les variables

DECLARATION DE VARIABLES

Etendue des variables


Etendue Type interne Pérennité
Global Integer toute la session
...

Local Integer traitement courant


... et étiquettes (appelées par Gosub)

Local File traitement courant


Mask étiquettes (appelées par Gosub)
sous-programmes (appelés par Call)

4 © 2006 Sage – Division Moyennes & Grandes Entreprises

2
1. Les variables (Les classes)
Syntaxe Commentaires

Champ de table [F:ABR]CHAMP [Ind] ABR = Abréviation La table doit avoir été ouverte avec
(classe [F], File) Ind = Indice pour l'abréviation ABR.
champ dimensionné ( ex. [F:BPC]BPCNUM )

Champ d'écran [M:ABR]CHAMP[Ind] ABR = Abréviation Le masque doit avoir été ouvert
(classe [M], Mask) Ind = Indice pour avec l'abréviation ABR.
champ dimensionné ( ex. [M:BPC0]BPCNUM )

Variable locale [L]VAR VAR = Nom variable


(classe [L])

Variables globales [V]VAR VAR = Nom variable Le nom commence généralement


(classe [V]) par G (ex. GNBGAUCHE, GUSER).

Compteurs [C]CPT CPT = Nom compteur Stockés dans la table APLCOM.


(classe [C])

Champ technique de table [G:ABR]CHAMP ABR = Abréviation Champs techniques pour chaque
(classe [G], File) tables ouvertes.

Variables Système [S]var var = Nom variable Nom en minuscules. Ces variables
(classe [S]) Langage Sage X3 sont des mots-clés du langage.
(ex. adxmother, mkstat).
5 © 2006 Sage – Division Moyennes & Grandes Entreprises

1. Les variables

LISTES DES CLASSES DE VARIABLES

Classe [C] : Les compteurs

•Déclaration dans dictionnaire


•Disponible sur toute session
•Stockage unique dans APLCOM
•Maj variable dans une transaction
•Lock pour éviter conflit
•Rewrite pris en charge par le moteur Sage X3

Développement / Dictionnaire traitements / Compteurs Adonix

6 © 2006 Sage – Division Moyennes & Grandes Entreprises

3
1. Les variables

DECLARATION DE VARIABLES
Classe [G] : liée à une table

7 © 2006 Sage – Division Moyennes & Grandes Entreprises

1. Les variables
DECLARATION DE VARIABLES
Classe [L] & [V] : Variables dimensionnées
• Exemples :

# Déclaration d’une variable locale de type integer de 8 éléments (numéroté de 0 à 7)


Local Integer TABLNG(8)

# Déclaration d’une variable locale de type date de 8 éléments (numéroté de 0 à 7)


Local Date TABLNG(8)

# Déclaration d’une variable locale de type string de 5 caractères


Local Char LOCCHAR(5)

# Déclaration d’une variable locale de type string de 8 éléments de 5 caractères


(numéroté de 0 à 7)
Local Char TABLIB (5)(8)

# Déclaration d’une variable locale de type string de 8 éléments de 5 caractères


(numéroté de 1 à 8)
Local Char TABLIB (5)(1..8)

SI LA LONGUEUR EST NON SPECIFIE, LA LONGUEUR PAR DEFAUT EST DE 30 CARACTERES.

8 © 2006 Sage – Division Moyennes & Grandes Entreprises

4
1. Les variables

ALIMENTATION DE VARIABLES
Opérations sur les numériques :

# opérateurs disponibles pour champs numériques


+ - * / ^

Opérations sur les chaînes :


# opérateurs disponibles pour les chaînes
+ -

• Exemples :

# Concaténation de chaînes de caractères


Local Char WCHAR, WCHAR1, WCHAR2
WCHAR1 = «Erreur sur la table»
WCHAR2 = «BPCUSTOMER»
WCHAR = WCHAR1 – WCHAR2

 «Erreur sur la table BPCUSTOMER»

9 © 2006 Sage – Division Moyennes & Grandes Entreprises

1. Les variables

ALIMENTATION DE VARIABLES

Opérations sur les dates :


• Exemples :

# Alimentation d’une date à zéro et d’une autre au 31 décembre 2005


Local Date WDATE1, WDATE2
WDATE1 = [0/0/0]
WDATE2 = [31/12/2005]

# Différence entre 2 ( ex : NBJOUR = 30 )


Local Date WDATE1, WDATE2
Local Integer NBJOUR
WDATE1 = [01/12/2005]
WDATE2 = [31/12/2005]
NBJOUR = WDATE2 – WDATE1

# Ajout ou soustraction d’un nombre de jours ( ex : WDATE2 = 15/01/2006 )


Local Date WDATE1, WDATE2
WDATE1 = [01/12/2005]
WDATE2 = WDATE1 + 45

10 © 2006 Sage – Division Moyennes & Grandes Entreprises

10

5
1. Les variables

PARTICULARITE DU TRANSCLASSE
Le trans-classe permet l’alimentation de chaque champ d'une classe des variables ([ F ] ou [ M ])
par ceux de même nom d'une autre classe ([ F ] ou [ M ])

[M:ABV1] = [F:TAB1]
TABLE [F:TAB1] MASK [M:ABV1]

[F:TAB1] = [M:ABV1]

[F:TAB2] = [F:TAB1]
TABLE1 [F:TAB1] TABLE2 [F:TAB2]

[F:TAB1] = [F:TAB2]

[M:ABV2] = [M:ABV1]
MASK1 [M:ABV1] MASK2 [M:ABV2]

[M:ABV1] = [M:ABV2]

11 © 2006 Sage – Division Moyennes & Grandes Entreprises

11

1. Les variables
PARTICULARITE DU TRANSCLASSE
• Exemple :

Local File BPARTNER [BPR] # Ouverture de la table BPARTNER

Read [F:BPR]BPR0 first # Lecture du premier enregistrement de la table


If [S]fstat = 0 # Si la lecture est bonne

# Assigner les valeurs de la table aux champs du masque : 1ere solution


[M:BPR1] BPRSHO = [F:BPR]BPRSHO
[M:BPR1] BPRNAM(0) = [F:BPR]BPRNAM(0)
[M:BPR1] BPRNAM(1) = [F:BPR]BPRNAM(1)
[M:BPR1]CRY = [F:BPR]CRY

# Assigner les valeurs de la table aux champs du masque : 2nd solution


[M:BPR1] = [F:BPR]

12 © 2006 Sage – Division Moyennes & Grandes Entreprises

12

6
1. Les variables

PARTICULARITE DU TRANSCLASSE

AVANTAGES :

 En modifiant une table ou une structure de masque, il n'y a aucun


besoin de modifier les programmes. ( intéressant pour le spécifique )

 Champ dimensionné automatiquement alimenté pour tous les postes.

 Champ soumis à code activité automatiquement alimenté sans test


préalable de présence du champ.

COMPLEMENT :

 En plus du trans-classe, faire une alimentation champ par champ, pour


les cas suivants :
 nom de champ différent
 champ absent de la classe d’origine
13 © 2006 Sage – Division Moyennes & Grandes Entreprises

13

1. Les variables

Bloc tableau d’un écran


Certains blocs d'écrans X3 sont de type tableau. Ils contiennent alors des champs indicés (ex. : factures
de vente).

Ligne 1 [M:SIH3]QTY(0)
Ligne 2 [M:SIH3]QTY(1)
Ligne 3 [M:SIH3]QTY(2)

Attention : Les indices commencent à 0, mais les lignes commencent à 1. On utilise la variable [s]nolign-1

14 © 2006 Sage – Division Moyennes & Grandes Entreprises

14

7
1. Les variables
Bloc tableau d’un écran
• Exemple :

#--- Lecture des clients livrés et chargement de l’écran


raz [M:BPC4]

[S]nolign=0
For [BPD]BPD0 Where [F]BPCNUM=[M:BPC0]BPCNUM
[S]nolign += 1
[M:BPC4] = [F:BPD] trans-classe ligne par ligne

[M:BPC4]BPDNAM0(nolign-1) = [F:BPD]BPDNAM(0)
[M:BPC4]BPDNAM1(nolign-1) = [F:BPD]BPDNAM(1) complément de mise à jour

If dim([M:BPC4]REP0)>0 [M:BPC4]REP0(nolign-1) = [F:BPD]REP(0) endif


If dim([M:BPC4]REP1)>0 [M:BPC4]REP1(nolign-1) = [F:BPD]REP(1) endif
Next test présence des champs désactivables
[M:BPC4]NBDLV =nolign
variable de bas de tableau

15 © 2006 Sage – Division Moyennes & Grandes Entreprises

15

1. Les variables
Affecter une variable dont on construit le nom

Assign exp_nom With exp_valeur

Assign permet d'affecter une variable dont construit le nom

• Exemple :

#--- chargement des 2 champs représentant


[M:BPC4]REP0(nolign-1) = [F:BPD]REP(0)
[M:BPC4]REP1(nolign-1) = [F:BPD]REP(1)

#--- ou utilisation assign


For I= 0 to 1
Assign “[M:BPC4]REP”+num$(I)+”(nolign-1)” With [F:BPD]REP(I)
Next

16 © 2006 Sage – Division Moyennes & Grandes Entreprises

16

8
1. Les variables
Lire une variable dont on construit le nom

Evalue (exp_nom)

Evalue permet de lire une variable dont construit le nom

• Exemple :

#--- chargement des 2 champs représentant


[F:BPD]REP(0)= [M:BPC4]REP0(nolign-1)
[F:BPD]REP(1) = [M:BPC4]REP1(nolign-1)

#--- ou utilisation evalue


For I= 0 to 1
[F:BPD]REP(I) = evalue(“[M:BPC4]REP”+num$(I)+”(nolign-1)”)
Next

17 © 2006 Sage – Division Moyennes & Grandes Entreprises

17

1. Les variables
BLOB & CLOB
• Exemple :

# Déclaration d'une variable clob avec longueur par défaut


Local Clbfile WWCLOB
# Déclaration d'une variable clob de longueur 3 ( 4094 caractères maximum )
Local Clbfile WWCLOB( 3 )
# Déclaration d'un tableau de 2 clobs de longueur 3
Local Clbfile WWCLOB( 3 ) ( 2 )
# Déclaration d'un tableau de 2 clobs de longueur 3
Local Clbfile WWCLOB( 3 ) (0..1)
# Affectation d’un clob par un autre clobclob
[M:XXX]CLOB = [F:XXX]CLOB
[M:XXX] = [F:XXX] trans-classe fonctionne
pour les Clobs & Blobs
# Affectation d’un clob par une variable char dimensionnée
Local Char TEXTE (250)(1..100)
For I=1 to 100
[M:XXX]CLOB += TEXTE(I)
NEXT I
# On affecte la variable TEXTE par le contenu du clobclob
Local Char TEXTE (250)(1..100)
Setlob TEXTE With [M:XXX]CLOB
# On affecte le clob par la variable TEXTE.
Local Char TEXTE (250)(1..100)
Setlob [M:XXX]CLOB With TEXTE(1..100)
18 © 2006 Sage – Division Moyennes & Grandes Entreprises

18

9
2. Les fonctions
LES CHAINES DE CARACTERES

left$ ( chaîne, inb ) Extrait les inb premiers caractères de chaîne


right$ ( chaîne, ipos ) Extrait les caractères de chaîne à partir de ipos
mid$ ( chaîne, ipos, inb ) Extrait les inb caractères de chaîne à partir de ipos
seg$ ( chaîne, ideb, ifin ) Extrait la sous-chaîne comprise entre ideb et ifin
len ( chaîne ) Longueur de la chaîne
val ( chaîne ) Conversion d’une chaîne en numérique
num$ ( nombre ) Convertit un nombre en chaîne
tolower ( chaîne ) Convertit une chaîne en minuscules
toupper ( chaîne ) Convertit une chaîne en majuscules
ctrans ( chaîne [, ci, co ] ) Filtre les caractères de chaîne
vireblc ( chaîne, ioption ) Supprime les blancs dans une chaîne
format$ ( cfmt, chaîne ) Formatage de chaîne avec cfmt
pat ( chaîne, cmodèle ) « Matching » de chaîne avec le modèle cmodèle
instr ( ipos, chaîne, cssch ) Recherche cssch dans chaîne à partir de ipos
space$ ( inb ) Génère une chaîne constituée de inb blancs
string$ ( inb, chaîne ) Génère inb fois chaîne
ascii ( chaîne ) Code ASCII du premier caractère de chaîne
chr$ ( iascii ) Retourne le caractère dont le code ASCII est iascii
parse ( chaîne [, btoken] ) Analyse syntaxique de chaîne ( <> 0 si erreur )
evalue ( chaîne [,btoken] ) Evaluation de l’expression contenue dans chaîne
getenv$ ( chaîne ) Retourne la valeur de la variable système définie dans chaîne

19 © 2006 Sage – Division Moyennes & Grandes Entreprises

19

2. Les fonctions

LES DATES
date$ Retourne la date du jour (Serveur)
time$ Retourne l’heure courante sous la forme HH:MM :SS
time Heure courante en secondes
day ( date ) Extrait le jour d’une date
day$ ( date ) Retourne le nom du jour d’une date
month ( date ) Extrait le mois d’une date
month$ ( date ) Retourne le nom du mois d’une date
year ( date ) Extrait l’année d’une date
gdat$ ( ijour, imois, iannée ) Retourne la date correspondant à [ijour/imois/iannée]
nday ( date ) Retourne le nombre de jours depuis le 1/1/1600 de date
nday$ ( inbjour ) Convertit un nbre de jours depuis le 1/1/1600 en date
dayn ( date ) Retourne le numéro de jour dans la semaine de date
week ( date ) Retourne le numéro de semaine d’une date
aweek ( isemaine, iannée ) Date du début de la semaine numéro isemaine de iannée
eomonth ( date ) Retourne la date de la fin du mois d’une date
addmonth ( date, inb ) Ajoute inb mois à une date

format$ Mise en forme d’une date

20 © 2006 Sage – Division Moyennes & Grandes Entreprises

20

10
2. Les fonctions
LES EXPRESSIONS NUMERIQUES
abs ( nombre ) Valeur absolue
mod ( ientier, idiv ) Modulo
rnd ( nombre ) Nombre aléatoire entre 0 et nombre (exclus)
sgn ( nombre ) [-1,0,1] Retourne le signe d’un nombre
sqr ( nombre ) [N] Racine carrée
ar2 ( nombre ) Arrondi de nombre à 2 décimales
arr ( nombre, nprec ) Arrondi de nombre à nprec près
fix ( nombre ) Troncature d’un nombre
int ( nombre ) Partie entière d’un nombre
fac ( ientier ) Factorielle
anp ( in, ip ) Arrangements de ip dans in
cnp ( in, ip ) Combinaisons de ip dans in

Format$ Mise en forme d’un nombre

21 © 2006 Sage – Division Moyennes & Grandes Entreprises

21

2. Les fonctions

DIVERS
find ( valeur, liste ) Recherche d’une valeur dans une liste

uni ( liste ) Retourne indice du premier doublon de liste

min ( liste ) Retourne la valeur minimale d’une liste

max ( liste ) Retourne la valeur maximale d’une liste

avg ( liste ) Moyenne arithmétique d’une liste

var ( liste ) Variance d’une liste

sum ( liste ) Somme d’une liste

prd ( liste ) Produit d’une liste

sigma( [var =] ideb, ifin, expr ) Sommation de expr avec var variant entre ideb et ifin

[S]indcum Variable de boucle par défaut de sigma()

22 © 2006 Sage – Division Moyennes & Grandes Entreprises

22

11
3. Les Variables système

TABLE
adxdlrec nombre d’enregistrements effacés par l’instruction Delete

adxuprec nombre d’enregistrements modifiés par l’instruction Update

fstat statut de retour d’une instruction sur table

fileabre(5) (101) abréviations des tables ouvertes

filename (255) (101) noms des tables ouvertes

lockwait nombre de secondes maximum pour une tentative de verrouillage

FICHIER SEQUENTIEL

adxifs séparateur de champs

adxirs séparateur d’enregistrements

adxium type de codage

23 © 2006 Sage – Division Moyennes & Grandes Entreprises

23

3. Les Variables système

EN SAISIE

pcolor couleur d’affichage du texte dans une zone au format ‘c’

currbox liste gauche courante

indice indice courant d’une zone dimentionnée

nolign numéro de ligne courant dans un tableau déroulant

mkstat statut d’erreur en saisie de zone

status statut de retour suite à une saisie

adxgtb Statut entrée ou sortie dans un tableau

DATE
datesyst date système

adxdcs année de départ pour la saisie de date avec l’année sur 2 chiffres

24 © 2006 Sage – Division Moyennes & Grandes Entreprises

24

12
3. Les Variables système

APPLICATION
nomap application courante

adxmother application mère

adxdir répertoire d’installation du runtime

RESSOURCES

adxmpr nombre maximum de programmes résidents

adxmso nombre maximum de fichiers séquentiels ouverts

adxmto nombre maximum de tables ouvertes

adxmbm nombre maximum de buffers message

adxmxl nombre maximum d’éléments en liste de gauche

maxmem taille maximum de mémoire allouée

25 © 2006 Sage – Division Moyennes & Grandes Entreprises

25

4. Les instructions

TABLES
Classe [F] : ouverture et fermeture d’une table
[Local] File <idfichier> [ <classe> ]
[& Where <condition> ]
[& Order By { <idf> [ ( <exp_int> ) ] [ Asc | Desc ] ]

Ouverture de tables en précisant éventuellement :


- Abréviation
- Sélection d’enregistrements
- Ordre de parcours selon une clé ou en définissant un index sur des champs
Classe [F] par défaut :
Close [ Local ] File [ <liste_classe> ] 1ère table du dernier Local File

Fermeture de tables ouvertes par File

Instruction CLALEV

clalev (<classe>)

Permet de tester si une classe de variables est accessible par un programme

Exemple :
If clalev([F:ITM])=0 : Local File ITMMASTER [ITM] : Endif
26 © 2006 Sage – Division Moyennes & Grandes Entreprises

26

13
4. Les instructions

TABLES
Etendue de la Classe [F]
• Exemples :

# Traitement principal
Local File BPARTNER [BPR]
Read [BPR]BPR0=« MARTIN »
Call TOTO
# -- le client MARTIN est toujours en ligne
Call TATA
# -- c’est le client DUPOND qui est maintenant en ligne
End

# Sous-programme TOTO ( ouverture d’un 2ème buffer )


Local File BPARTNER [BPR]
Read [BPR]BPR0=« DUPOND »
End

# Sous-programme TATA ( ouverture de la table si elle n’est pas déjà ouverte )


If clalev([F:BPR])=0 : Local File BPARTNER [BPR] : Endif
Read [BPR]BPR0=« DUPOND »
End
27 © 2006 Sage – Division Moyennes & Grandes Entreprises

27

4. Les instructions
TABLES
Jointure de tables
Link <classe> With <classe> <idf_clé> [ ( <exp_int> ) ] = <exp_clé> [ , … ]
As <classe>
[& Where <condition> ]
[& Order By <tri> ]

Permet de définir un ensemble de liens entre différentes tables, ainsi qu'une abréviation unique,
pour accéder à ces tables en une seule instruction Read ou For.

Exemple :

Link [ITF] With [ITV]ITV0=[F:ITF]ITMREF;[F:ITF]STOFCY,


& [ITM]ITM0=[F:ITF]ITMREF
& As [LNK]
& Where [F:ITF]CUNFLG=2 & [F:ITF]STOFCY=[M:SBI1]FCY
& & [F:ITM]TCLCOD=[M:SBI1]TCLCODSTR
& Order By Key ITF1

For [LNK]
[M:SBI2] = [F:ITM]
[M:SBI2] = [F:ITV]
[M:SBI2] = [F:ITF]
Next

28 © 2006 Sage – Division Moyennes & Grandes Entreprises

28

14
4. Les instructions

ACCES A LA BASE DE DONNEES


Instruction READ

Read [ <classe> ] [ <idf_clé> ] [ ( <exp_int> ) ]First[ With Lockwait = <exp_int> ]


Readlock Last
Look Curr
Prev
Next
= <exp_clé>
{ < | > | <= | >= } <exp_clé>

Lecture d’un enregistrement d’un fichier sur un index avec verrou pour Readlock.
Chargement de la classe [F] avec les valeurs des champs de l’enregistrement lu.

Look permet de tester l’existence d’un enregistrement, de le rendre ‘enregistrement courant’


mais de ne pas le charger dans la classe [F].

Toujours tester la variable système [S]fstat.

Exemple :

If clalev ([F:SLT])=0 Local File SALTRS [SLT] Endif


Read [SLT]SLT0=4;[F:AWI]TRN
If fstat

29 © 2006 Sage – Division Moyennes & Grandes Entreprises

29

4. Les instructions
ACCES A LA BASE DE DONNEES
Instruction FOR-NEXT
For <classe> [ <idf_clé> [ ( <exp_int> ) ] ] [ From <exp_clé> To <exp_clé> ]
[ & Where <condition> ]
[ & With Lock | With Stability ]
...
Next [ <idf_clé> ]

permet de faire des boucles de lecture sur une table selon une clé donnée

Exemple :

If clalev ([F:SOH])=0 Local File SORDER [SOH] Endif


Trbegin [SOH]
For [SOH]SOH0 Where ORDSTA = 1 & ORDDAT < [01/01/2005]
Readlock [SOH]curr
...
Next
Commit

30 © 2006 Sage – Division Moyennes & Grandes Entreprises

30

15
4. Les instructions

ACCES A LA BASE DE DONNEES


Instruction FOR-NEXT

Possibilité d’ imbriquer des boucles "For" sur le nombre de parties de la clé,


de façon à définir des ruptures.

Exemple :

If clalev ([F:SOP])=0 Local File SORDERP [SOP] Endif


# La clé SOP0 est contituée des 3 champs : SOHNUM,SOPLIN,SOPSEQ
# rupture sur le 1er champ : SOHNUM
For [SOP]SOP0(1)
For [SOP]SOP0
...
Next
Rupture sur le 1er champ de clé
Next

31 © 2006 Sage – Division Moyennes & Grandes Entreprises

31

4. Les instructions

ACCES A LA BASE DE DONNEES


Instruction FOR-NEXT
Différence de comportement entre Oracle et SQL-server dans les boucles For, lorsqu'on créé des
enregistrements vérifiant la clause where et dont la clé est supérieure à la clé courante :

• sous Oracle, ces enregistrements ne seront jamais relus

• sous SQL-server, ils seront lus à leur tour (d'où un risque de boucle infernale...)

Exemple :

# Clé KEY comprenant le champ CHP1


For [XXX]KEY with stability
If CHP1 = 'AAA'
CHP1 = 'BBB'
Rewrite [XXX]
endif
Next

Sous SQL-server,
avec un curseur stable, on lit 2 lignes : 'AAA, 'CCC'.
avec un curseur non stable ( donc sans précision de la clause stability) , on lit 3 lignes : ’AAA, 'BBB', 'CCC'.

Sous Oracle,
on lit systématiquement 2 lignes : 'AAA, 'CCC'.
32 © 2006 Sage – Division Moyennes & Grandes Entreprises

32

16
4. Les instructions
ACCES A LA BASE DE DONNEES
Restrictions
Filter <classe> Where <condition> [ Order By <tri> ]

Pose d’un filtre sur les enregistrements d’une table déjà ouverte par File en précisant
éventuellement un ordre de parcours selon une clé existante ou une nouvelle clé définie dans le
Order by.

Filter <classe> dépositionne le filtre pour la table d’abréviation <classe>

Attention : Ne pas oublier de dé-positionner le filtre.

33 © 2006 Sage – Division Moyennes & Grandes Entreprises

33

4. Les instructions
MISE A JOUR DE LA BASE DE DONNEES
Instruction WRITE
Write [ <classe> ]

Création d’un nouvel enregistrement avec les valeurs contenues dans la classe [F]

Exemple :

...
[F] = [M] :# trans-classe ( alimentation de la classe [F] )
Trbegin [TEST] :# début de la transaction
Write [TEST] :# écriture sur fichier
If [S]fstat :# en cas de problème quelconque
Rollback :# la transaction est annulée
Else
Commit :# sinon elle est validée

34 © 2006 Sage – Division Moyennes & Grandes Entreprises

34

17
4. Les instructions
MISE A JOUR DE LA BASE DE DONNEES
Instruction REWRITE
Rewrite [ <classe> ] [ <idf_clé> ] [ ( <exp_ind> ) ] [<|>|<=|>=] [ <val_clé> ]
First
Last
Curr
Prev
Next
= <exp_clé>

Réécriture d’un enregistrement avec les valeurs contenues dans la classe [F].

Exemple :

# Lecture d'un enregistrement pour modification du champ ZONE


# Lecture sur le 1er champ de l’index CLE2
Trbegin TEST [TEST]
Readlock [TEST]CLE2(1) = date$
If [S]fstat
[TEST]ZONE += 100
Rewrite [TEST]
Commit
Else
Rollback
Endif
35 © 2006 Sage – Division Moyennes & Grandes Entreprises

35

4. Les instructions
MISE A JOUR DE LA BASE DE DONNEES
Instruction UPDATE

Update [ <classe> ] [ Where {<condition> }]


& With <idf_chp> = <expr> [ , ... ]

Mise à jour globale de champs d’une table avec des restrictions éventuelles.
Cette instruction permet de faire automatiquement la lecture, le verrouillage, la réécriture et le
déverrouillage sur les enregistrements.

Exemple :

# Mise à jour du champ FLGACTIF du fichier CLIENT


# pour tous les enregistrements dont les zones DEBIT et CREDIT sont à 0.
Local File CLIENT [CLI]
Update [CLI] Where DEBIT = 0 and CREDIT = 0 and FLGACTIF <> 1
& With FLGACTIF = 1
# affichage du nombre d’enregistrements modifiés
Infbox "enregistrements modifiés :"-[S]adxuprec

36 © 2006 Sage – Division Moyennes & Grandes Entreprises

36

18
4. Les instructions

MISE A JOUR DE LA BASE DE DONNEES


Instruction DELETE
Delete [ <classe> ] [ <idf_clé> ] [ ( <exp_int> ) ] [<|>|<=|>=] [ <val_clé> ]
Curr
= <exp_clé>
Suppression d’un ou plusieurs enregistrements

Delete [ <classe> ] [ <idf_clé> ] [ ( <exp_int> ) ] [ Where {<condition>} ]

Suppression des enregistrements sélectionnés

Exemple :

# Effacement de tous les enregistrements dont le numéro de facture est "00001001"


# le numéro de facture est le 1er élément de la clé CLEFAC
Delete [LIG] Where [LIG]NUMFAC = "00001001"
# syntaxe équivalente
Delete [LIG]CLEFAC(1) = "00001001"
# autre syntaxe donnant le même résultat mais moins performante
For [LIG]CLEFAC(1) Where [LIG]NUMFAC = "00001001" : Delete curr : Next

37 © 2006 Sage – Division Moyennes & Grandes Entreprises

37

4. Les instructions
VERROUILLAGE, DEVEROUILLAGE
Blocage logique
Lock { <liste_symb> | = <exp_char> } [ With Lockwait = <exp_int> ]

Verrouillage d’un symbole dans la table APLLCK. Mise à jour de [S]fstat.

Unlock { <liste_symb> | = <exp_char> }

Déverrouillage d’un symbole verrouillé par Lock.

[S]lockwait Temps d’attente pour verrouillage :


<0 Attente infinie jusqu’à libération
0 Pas d’attente, un seul essai
>0 Nombre de secondes d’attente
Exemple :
# Lock fichier entête commande
Local Char SYMBOLE(20)
SYMBOLE = "SOH"+[F:SOH]SOHNUM
Lock = SYMBOLE
If fstat : infbox « enregistrement verrouillé » : Endif
...
# --> déverrouillage de toutes les commandes
For [SWD]
SYMBOLE = "SOH"+[F:SWD]SOHNUM
Unlock = SYMBOLE
Next
38 © 2006 Sage – Division Moyennes & Grandes Entreprises

38

19
4. Les instructions

VERROUILLAGE, DEVEROUILLAGE

Blocage physique

Lock <list_classe> [ With Lockwait = <exp_int> ]

Verrouillage de tous les enregistrements d’une table. Mise à jour de [S]fstat.

Unlock < list_classe >

Déverrouillage des enregistrements d’une table verrouillée par Lock ou Readlock.

39 © 2006 Sage – Division Moyennes & Grandes Entreprises

39

4. Les instructions
LES TRANSACTIONS
Instruction TRBEGIN
Trbegin <idf>[<classe>] | "<chaîne>" [<classe>] | =<exp_char [<classe>] |<classe>

Début de transaction avec empilement de classes locales des tables déclarées

Instruction COMMIT

Commit

Validation de la transaction courante pour toutes les mises à jours de tables depuis Trbegin

Instruction ROLLBACK

Rollback

Abandon de la transaction courante pour toutes les mises à jours de tables depuis Trbegin

40 © 2006 Sage – Division Moyennes & Grandes Entreprises

40

20
4. Les instructions
LES TRANSACTIONS
• Exemple :

Call DEBTRANS From GLOCK


$TRT1
[V]GOK=1 enregistrement verrouillé
Trbegin [XXX]
Readlock [XXX]cle = valeur erreur en lecture

If [S]fstat=1 [V]GOK=-1 : [V]GLOCK = nom_table + cle


Goto ROL_TRT1
Elsif [S]fstat [V]GOK=0 : Call RSTA(“abrev_table”,cle) From GLOCK
Goto AB_TRT1
Endif erreur en ré-écriture
Rewrite [XXX]
If [S]fstat [V]GOK=0 : Call FSTA(“abrev_table”) From GLOCK
Goto AB_TRT1
Endif
Commit
Return

41 © 2006 Sage – Division Moyennes & Grandes Entreprises

41

4. Les instructions
LES TRANSACTIONS
• suite :

# procédure d’abandon
$AB_TRT1
Rollback
Call ECR_TRACE(mess(17,107,1),1) From GESECRAN
Return

# procédure d’abandon puis de ré-essai


$ROL_TRT1
Rollback
Call ROLL From GLOCK
If [V]GROLL
Call ECR_TRACE(mess(17,107,1),1) From GESECRAN
Else
Goto TRT1
Endif
Return

42 © 2006 Sage – Division Moyennes & Grandes Entreprises

42

21
4. Les instructions
LES CONDITIONS
Condition IF
L’instruction IF permet de faire une action sur réalisation d’une condition

Syntaxe :
If expr1 [ Then ] [ instructions ]
{ Elsif exprn [ Then ] [ instructions ] } *
[ Else [ instructions ] ]
Endif

Paramètres :
Elément Description
Expr1 Expression logique
Exprn Expression logique

Exemple :
If I = 1
Infbox "I vaut 1"
Elsif I > 1 Then Print "I est supérieur à 1"
Elsif I = 0 : Print "I est nul"
Elsif I > 0
Infbox "I est compris entre 0 et 1"
Else
Infbox "I est négatif"
Endif

43 © 2006 Sage – Division Moyennes & Grandes Entreprises

43

4. Les instructions
LES CONDITIONS

Condition CASE
L’instruction CASE permet de réaliser une structure de contrôle alternative en fonction de la valeur d'une
expression donnée.

Syntaxe :
Case expr_choix
{ When expr_v { , expr_v } [ instructions_1 ]
[ When Default [ instructions_2 ] ]
Endcase

Paramètres :
Elément Description
Expr_choix Expression dont la valeur permet de choisir une alternative
Expr_v Expression dont la valeur est comparée à celle de expr_choix

Exemple :
$ACTION
Case ACTION
When "OUVRE" : Gosub OUVRE From SUBBPCA
When "FERME" : Gosub FERME From SUBBPCA
...
When Default
Endcase
Return
44 © 2006 Sage – Division Moyennes & Grandes Entreprises

44

22
4. Les instructions
LES ITERATIONS
Itération FOR
L’instruction FOR permet de réaliser des boucles d’affectation d’une variable.

Syntaxe :
SYNTAXE 1
For variable_num = valeur_init To valeur_fin [ Step pas ]
..... instructions
Next [ variable_num ]

SYNTAXE 2
For variable = liste_valeurs
..... instructions
Next [ variable ]

Paramètres :

Elément Description
variable_num nom de variable de type numérique contenant la valeur de la boucle qui évolue à
partir de ‘valeur_init’ par incrément de ‘pas’
valeur_init valeur numérique initiale de la variable
valeur_fin valeur numérique finale de la variable
pas incrément ajouté à la variable à chaque itération (1 par défaut)
variable nom de variable dont la valeur prendra successivement les valeurs de la liste
liste_valeurs liste d’expressions séparées par le caractère ‘,’

45 © 2006 Sage – Division Moyennes & Grandes Entreprises

45

4. Les instructions
LES ITERATIONS
Itération WHILE
L’instruction WHILE permet de réaliser des boucles tant qu'une condition est réalisée.
Syntaxe :
While expr_L
..... instructions
Wend

Paramètres :
Elément Description
Expr_L Expression logique

Exemple :

# Boucle de temporisation
I = time
# On fait des calculs en boucle avec un time-out de 10 secondes
While I-time < 10
Gosub CALCUL
Wend

# Boucle infinie
VRAI = 1
While VRAI
# Boucle ...
Wend
46 © 2006 Sage – Division Moyennes & Grandes Entreprises

46

23
4. Les instructions
LES ITERATIONS
Itération REPEAT
L’instruction REPEAT permet de réaliser des boucles jusqu’à la réalisation d’une condition.

Syntaxe :
Repeat
..... instructions
Until expr_L

Paramètres :
Elément Description
Expr_L Expression logique

Exemple :

# Saisie jusqu'à l'obtention d'un numéro de transsaction


# Sortie si la condition est vérifiée

Repeat
Gosub LEC_TRANSAC
If [F:STT]TRSNUM = "" : Call ERREUR(GMESSAGE) From GESECRAN : Endif
Until [F:STT]TRSNUM <> ""

47 © 2006 Sage – Division Moyennes & Grandes Entreprises

47

4. Les instructions
LES ITERATIONS
Itération BREAK
L’instruction BREAK permet de sortir d’une ou plusieurs boucles.

Syntaxe :

Break [ exp_ent ]

Paramètres :

Elément Description
exp_ent Expression entière dont la valeur donne le nombre d’imbrications
de boucles dont on veut sortir.

Exemple :

# Recherche d'un élément dans une variable dimensionnée. La boucle est interrompue si on
trouve cette valeur.
Integer MATRICE(2,3)
For I=0 To dim([V]MATRICE,1) - 1
For J=0 To dim([V]MATRICE,2) - 1
If [V]MATRICE = VALEUR [V]TROUVE = [V]VRAI
Break 2
Endif
Next J
Next I
48 © 2006 Sage – Division Moyennes & Grandes Entreprises

48

24
4. Les instructions
LES ETIQUETTES
Syntaxe

$XXX XXX : Nom de l’étiquette



Return

Déclaration des paramètres


Aucun

Exemple
Gosub ACTION FROM SUBXXX # traitement SUBXXX
$ACTION
Case ACTION
When "EXEC"
Gosub EXEC
Endcase
Return

49 © 2006 Sage – Division Moyennes & Grandes Entreprises

49

4. Les instructions
SOUS-PROGRAMME
Syntaxe

Subprog XXX (PAR1,..,PARn) XXX : Nom du sous programme


Par1 : Premier paramètre
Parn : Nième paramètre
End

Déclaration des paramètres


Value char PAR1()
Variable integer PARn

Exemple
Local integer ZERR # traitement TRTXXX

Call ZDAT ([31/12/2005],ZERR) From TRTXXX Subprog ZDAT (DAT,ZERR)


Value date DAT
Variable integer ZERR
If DAT > date$ : ZERR = 1 :
Endif
End
50 © 2006 Sage – Division Moyennes & Grandes Entreprises

50

25
4. Les instructions
FONCTION
Syntaxe
Funprog XXX (PAR1,..,PARn) XXX : Nom du sous programme
Par1 : Premier paramètre
Parn : Nième paramètre
End résult résult : Résultat renvoyé

Déclaration des paramètres


Value char PAR1()
Variable integer PARn

Exemple
Funprog CHAR_(CLOB)
# récupérer un clob dans un chaîne de 255 caractères
Value Clbfile CLOB
Local Char RESULT(255)
Local Char CHAINE(255)
RESULT=Func CHAR_([F:TXC]TEXTE)
Setlob CHAINE With CLOB
End CHAINE

51 © 2006 Sage – Division Moyennes & Grandes Entreprises

51

4. Les instructions

ECRANS

Classe [M] : ouverture et fermeture d’un écran

[Local] Mask <idécran> [ <classe> ]

Ouverture d’un écran en précisant éventuellement :


- Abréviation

Close [ Local ] Mask [ <liste_classe> ]

Instruction CLALEV

clalev (<classe>)

Permet de tester si une classe de variables est accessible par un programme

Exemple :

If clalev([M:SOH0])=0 : Local Mask SOH0 [SOH0] : Endif

52 © 2006 Sage – Division Moyennes & Grandes Entreprises

52

26
4. Les instructions
AFFICHAGE ET EFFACEMENT
Instruction AFFZO
Affzo [ <classe> ] <idf> [ ( <exp_int> ) ]
<idf> - <idf>
<irang>
<irgdeb> - <irgfin>
= <exp_chp> | = <exp_rang>

Affichage des zones d’un masque ouvert avec des restrictions éventuelles , irang : N° du bloc dans l’écran

Exemples :
Affzo [M:BPC1]
Affzo [M:BPC1] BPCGRU,BPCBPSNUM
Affzo [M:BPC1] 1

Instruction EFFZO
Effzo [ <classe> ] <idf> [ ( <exp_int> ) ]
<idf> - <idf>
<irang>
<irgdeb> - <irgfin>
= <exp_chp> | = <exp_rang>

Effacement des zones d’un masque ouvert avec des restrictions éventuelles.
Les zones concernées sont ensuite considérées comme non initialisées.

53 © 2006 Sage – Division Moyennes & Grandes Entreprises

53

4. Les instructions
GRISAGE / DEGRISAGE
Instruction GRIZO
Grizo [ <classe> ] <idf> [ ( <exp_int> ) ]
<idf> - <idf>
<irang>
<irgdeb> - <irgfin>
= <exp_chp> | = <exp_rang>
Grisage des zones d’un masque ouvert avec des restrictions éventuelles

Instruction DISZO
Diszo [ <classe> ] <idf> [ ( <exp_int> ) ]
<idf> - <idf>
<irang>
<irgdeb> - <irgfin>
= <exp_chp> | = <exp_rang>
Permet de griser les zones de l’écran en conservant la signification des zones (conserve les tunnels)

Instruction ACTZO
Actzo [ <classe> ] <idf> [ ( <exp_int> ) ]
<idf> - <idf>
<irang>
<irgdeb> - <irgfin>
=<exp_chp> | = <exp_rang>
Dégrisage des zones d’un masque ouvert avec des restrictions éventuelles
54 © 2006 Sage – Division Moyennes & Grandes Entreprises

54

27
4. Les instructions
Ecran validé
Instruction AFFZO - ACTZO
Affzo [ <classe> ]

Actzo [ <classe> ]

Pour ces 2 instructions, lorsqu’on ne précise que la classe, l’écran est considéré valide.
De ce fait, les actions de contrôle sur champ ne sont plus effectuées.

Instruction SETMOK
Setmok <classe> With exp

Exp=0 rend non valide, Exp=1 rend valide.

Exemples :

Pour laisser faire les contrôles sur champs, au superviseur :

Affzo [M:BPC1]
Setmok [M:BPC1] with 0
Ou
Affzo [M:BPC1]1-99
55 © 2006 Sage – Division Moyennes & Grandes Entreprises

55

4. Les instructions
Insertion / Suppression ligne dans bloc tableau
Instruction Dela
Dela Début, N [M]BASTAB

Supression de N Lignes du tableau, à partir de la ligne Début. ( Début >= 0 )


La ligne entière du tableau est identifiée, par la variable de bas de tableau [M]BASTAB.
Suite à cette suppression, il faut mettre à jour la variable de bas de tableau.

Instruction Insa
Insa Début, N [M]BASTAB

Insertion de N Lignes du tableau, à partir de la ligne Début. ( Début >= 0 )


La ligne entière du tableau est identifiée, par la variable de bas de tableau [M]BASTAB.
Suite à cette insertion, il faut mettre à jour la variable de bas de tableau.

Exemples :

Suppression de la 6ème ligne du tableau, Insertion de la 11ème ligne du tableau, :

Dela 5,1 [M]NBLIG Insa 10,1 [M]NBLIG


[M]NBLIG -=1 [M]NBLIG +=1

56 © 2006 Sage – Division Moyennes & Grandes Entreprises

56

28
5. Message d’erreur ou d’avertissement
GESTION DES ERREURS
Principe ONERRGO / RESUME
Onerrgo [<Etiquette>] [ From <traitement>]

Débranchement en cas d’erreur vers l’étiquette déclarée dans le traitement. Permet de


gérer la suite à exécuter après une erreur programme.

Retour au traitement initial après l’instruction à l’origine de l’erreur par l’ordre Resume

Onerrgo

Exemples :

Onerrgo ERREUR
Openi filpath("TXT","ZETEST","txt")
...
Onerrgo
End

$ERREUR
Infbox "erreur n°"-errn-errmes$(errn)-errm
Infbox "erreur dans traitement"-errp-"en ligne"-errl
Resume

57 © 2006 Sage – Division Moyennes & Grandes Entreprises

57

5. Message d’erreur ou d’avertissement

Afficher un message

58 © 2006 Sage – Division Moyennes & Grandes Entreprises

58

29
6. Gestion des traces
TRACE A PARTIR D’UN TRAITEMENT
Ouverture / Fermeture du fichier trace
If !GSERVEUR
Local char TIT(30) :[L]TIT =‘’Formation langage ’’
Call OUVRE_TRACE(TIT) From LECFIC
Endif

If !GSERVEUR : Call FERME_TRACE From LECFIC : Endif

Ecriture dans la trace

Call ECR_TRACE (‘’Bonjour’’,0) from GESECRAN


Call ECR_TRACE (‘’Erreur:"- num$(NUERR),1) From GESECRAN

Lecture de la trace
TRA=1
Call LEC_TRACE from LECFIC

59 © 2006 Sage – Division Moyennes & Grandes Entreprises

59

6. Gestion des traces


NOMMAGE DES FICHIERS TRACE
fichier trace en interactif

Les fichiers traces sont conservés dans le répertoire ..\dossiers\TRA


Nom du fichier trace : Fnnnnnn.tra ( nnnnnn étant un compteur )

Impressions>Lecture traces

fichier trace en batch

Les fichiers traces sont conservés dans le répertoire ..\runtime\SERVX3\TRA


Nom du fichier trace : RQTnnn.tra ( nnn étant le requête batch )

Exploitation>Serveur batch>Gestion des requêtes

Dans les deux cas,


La variable GTRACE contient le nom du fichier trace actif.
60 © 2006 Sage – Division Moyennes & Grandes Entreprises

60

30
7. Optimisation des requêtes
REGLES DE BASE
Envoyer le moins de requêtes possibles à la base :
• Privilégier la lecture par Link, à plusieurs lectures
• Privilégier la boucle For, à une série de Read

Eviter les or dans les requêtes


• For [XXX] Where ENTIER=3 or ENTIER=4 or ENTIER=5
est moins bon que
• For [XXX] Where ENTIER>=3 and ENTIER<=5

Limiter les données à traiter sur des algorithmes critiques


• Utiliser Columns avant For et Rewrite pour éviter le Select * From ...
• Utiliser Update pour effectuer une mise à jour sur un lot d’enregistrements, sur certains
champs

Réaliser un groupage raisonnable des mises à jour et lectures :


• trop gros : attention au snapshot too old sous Oracle
• trop faible : trop de requêtes = mauvaises performances

61 © 2006 Sage – Division Moyennes & Grandes Entreprises

61

7. Optimisation des requêtes


REGLES DE BASE
Privilégier le filtrage le plus efficace possible dans la base ( clause Where ) :
• Privilégier les fonctions et opérateurs traduits en SQL :
len, ascii, chr$, toupper, tolower, or, and, not, left$, right$, mid$, seg$,
>,>=,<,<=,<>,=,+,-,*,/

• Le cas particulier du Find :


 For [XXX] Where Find(CHAMP,3,5,9) <>0 est traduit en
Select ... Where CHAMP in (3,5,9)
 For [XXX] Where Find(CHAMP,3,5,9) =0 est traduit en
Select ... Where CHAMP not in (3,5,9)

• Le cas particulier du pat :


 For [XXX] Where pat(CHAMP, »*MODELE* ») <>0 est traduit en
Select ... Where CHAMP like ‘% MODELE%’
 For [XXX] Where pat(CHAMP, »*MODELE* ») =0 est traduit en
Select ... Where CHAMP not like ‘% MODELE%’

62 © 2006 Sage – Division Moyennes & Grandes Entreprises

62

31

Vous aimerez peut-être aussi