Académique Documents
Professionnel Documents
Culture Documents
Langage L4G
Langage L4G
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
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
1. Les variables
DECLARATION DE VARIABLES
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 )
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
3
1. Les variables
DECLARATION DE VARIABLES
Classe [G] : liée à une table
1. Les variables
DECLARATION DE VARIABLES
Classe [L] & [V] : Variables dimensionnées
• Exemples :
4
1. Les variables
ALIMENTATION DE VARIABLES
Opérations sur les numériques :
• Exemples :
1. Les variables
ALIMENTATION DE VARIABLES
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
1. Les variables
PARTICULARITE DU TRANSCLASSE
• Exemple :
12
6
1. Les variables
PARTICULARITE DU TRANSCLASSE
AVANTAGES :
COMPLEMENT :
13
1. Les variables
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
7
1. Les variables
Bloc tableau d’un écran
• Exemple :
[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
15
1. Les variables
Affecter une variable dont on construit le nom
• Exemple :
16
8
1. Les variables
Lire une variable dont on construit le nom
Evalue (exp_nom)
• Exemple :
17
1. Les variables
BLOB & CLOB
• Exemple :
18
9
2. Les fonctions
LES CHAINES DE CARACTERES
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
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
21
2. Les fonctions
DIVERS
find ( valeur, liste ) Recherche d’une valeur dans une liste
sigma( [var =] ideb, ifin, expr ) Sommation de expr avec var variant entre ideb et ifin
22
11
3. Les Variables système
TABLE
adxdlrec nombre d’enregistrements effacés par l’instruction Delete
FICHIER SEQUENTIEL
23
EN SAISIE
DATE
datesyst date système
adxdcs année de départ pour la saisie de date avec l’année sur 2 chiffres
24
12
3. Les Variables système
APPLICATION
nomap application courante
RESSOURCES
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 ] ]
Instruction CLALEV
clalev (<classe>)
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
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 :
For [LNK]
[M:SBI2] = [F:ITM]
[M:SBI2] = [F:ITV]
[M:SBI2] = [F:ITF]
Next
28
14
4. Les instructions
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.
Exemple :
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 :
30
15
4. Les instructions
Exemple :
31
4. Les instructions
• sous SQL-server, ils seront lus à leur tour (d'où un risque de boucle infernale...)
Exemple :
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.
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
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 :
35
4. Les instructions
MISE A JOUR DE LA BASE DE DONNEES
Instruction UPDATE
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 :
36
18
4. Les instructions
Exemple :
37
4. Les instructions
VERROUILLAGE, DEVEROUILLAGE
Blocage logique
Lock { <liste_symb> | = <exp_char> } [ With Lockwait = <exp_int> ]
38
19
4. Les instructions
VERROUILLAGE, DEVEROUILLAGE
Blocage physique
39
4. Les instructions
LES TRANSACTIONS
Instruction TRBEGIN
Trbegin <idf>[<classe>] | "<chaîne>" [<classe>] | =<exp_char [<classe>] |<classe>
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
20
4. Les instructions
LES TRANSACTIONS
• Exemple :
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
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
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
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 :
Repeat
Gosub LEC_TRANSAC
If [F:STT]TRSNUM = "" : Call ERREUR(GMESSAGE) From GESECRAN : Endif
Until [F:STT]TRSNUM <> ""
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
Exemple
Gosub ACTION FROM SUBXXX # traitement SUBXXX
$ACTION
Case ACTION
When "EXEC"
Gosub EXEC
Endcase
Return
49
4. Les instructions
SOUS-PROGRAMME
Syntaxe
Exemple
Local integer ZERR # traitement TRTXXX
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é
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
4. Les instructions
ECRANS
Instruction CLALEV
clalev (<classe>)
Exemple :
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
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
Exemples :
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
Instruction Insa
Insa Début, N [M]BASTAB
Exemples :
56
28
5. Message d’erreur ou d’avertissement
GESTION DES ERREURS
Principe ONERRGO / RESUME
Onerrgo [<Etiquette>] [ From <traitement>]
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
Afficher un message
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
Lecture de la trace
TRA=1
Call LEC_TRACE from LECFIC
59
Impressions>Lecture traces
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
61
62
31