Vous êtes sur la page 1sur 75

Safe X3

Support de formation
Language
Version 6
SAFE X3 LANGUAGE

Copyright © Sage 2009-2010 Page 2


SAFE X3 LANGUAGE

SOMMAIRE

SOMMAIRE ................................................................................................................................................. 3 

1.  LES VARIABLES ...................................................................................................................................... 4 
2.  LES FONCTIONS ................................................................................................................................... 18 
3.  LES VARIABLES SYSTEME ..................................................................................................................... 22 
4.  ECLIPSE IDE ......................................................................................................................................... 25 
5.  LES INSTRUCTIONS .............................................................................................................................. 29 

6.  MESSAGE D’ERREUR OU D’AVERTISSEMENT ........................................................................................ 57 
7.  GESTION DES TRACES .......................................................................................................................... 59 

8.  OPTIMISATION DES REQUETES ............................................................................................................ 61 
9.  OUTILS / UTILITAIRES .......................................................................................................................... 63 

Copyright © Sage 2009-2010 Page 3


SAFE X3 LANGUAGE

1. LES VARIABLES

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.


Copyright © Sage 2010 Sage X3 Language 3

Variables :
nom de 12 caractères maximum constitué de lettres et/ou de chiffres
le 1er caractère est obligatoirement une lettre

Classes globales :
Les variables Globales sont actives durant la session X3 de l’utilisateur.
Une variable globale peut-être créée en cours de traitement.
Elle ne sera pas supprimée automatiquement en fin de traitement.
Pour la supprimer, il faudra faire un Kill de cette variable.

Classes locales :
Les variables Locales sont actives le temps du traitement courant
•Connues uniquement du traitement courant ( ou sous-pro courant )
•classes [F] et [M] : étendue sur traitement courant et sous-pro.
•sont connues de l’étiquette appelée par Gosub.

Dimension :
Il peut y avoir jusqu’à 4 dimensions.
Les tables et les masques sont mono-dimensionnés, avec d’éventuelle occurrences comme dans les
tableaux déroulants.

Valeurs possibles pour shortint : -32 768 +32 767


Valeurs possibles pour libellé : 0 à 255

Copyright © Sage 2009-2010 Page 4


SAFE X3 LANGUAGE

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)

Copyright © Sage 2010 Sage X3 Language 4

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).
Copyright © Sage 2010 Sage X3 Language 5

Copyright © Sage 2009-2010 Page 5


SAFE X3 LANGUAGE

Champ table [F:ABR]


Variable d’une table identifiée par son nom et l’abréviation de la table.
Généralement l’abréviation du dictionnaire.

Champ d’écran [M:ABR]


Variable d’un écran identifiée par son nom et l’abréviation de l’écran.
Visualisation du nom de la variable et de l’écran par la touche F6.
Tableaux déroulants : Variable de bas de tableau, contient le nombre de lignes saisies.
Visualisation de cette variable «bas de tableau » par F6, avec curseur sur le tableau sans être en
saisie.

Variables locales [L]


Variables locales à un niveau de sous-programmes.

Variables globales [V]


Variables globales à la session. Chargées à l’ouverture de la session.
[V]GUSER, [V]GLANGUE … utilisateur et langue de connexion
[V]GFONCTION fonction courante
Dictionnaire des variables (Développement / Dictionnaire données / Ouverture au paramétrage /
Variables globales)

Remarque
Bien que pouvant être omise, il est préférable d’indiquer la classe de la variable.
Si la classe n’est pas renseignée, la variable est recherchée dans la liste des classes.

Les variables

> Présentation : Classe [C] : Les compteurs


− Cette classe permet :
> La déclaration de compteurs fonctionnelles ou techniques dans
un dictionnaire
> Disponible sur toute la session
> Stockage unique dans APLCOM
> Maj variable dans une transaction
> Lock pour éviter conflit
> Rewrite pris en charge par le moteur Sage X3

− Le compteur est à renseigner dans le menu :


Développement>Dictionnaire données>Ouverture au paramétrage>Variables de type compteur

− Exemple :
> EXPORT, numéro de compteur incrémenté à chaque export
depuis un modèle. Permet les exports différentiels.

Copyright © Sage 2010 Sage X3 Language 6

Les compteurs [C]


Variables pouvant être dimensionnée. 99 maxi. Stockée dans la table APLCOM.

Copyright © Sage 2009-2010 Page 6


SAFE X3 LANGUAGE

Variables superviseur ou fonctionnelle. Elles sont disponibles à tout instant sans être obligé de les
déclarer ni de les charger depuis/vers la table APLCOM.

Mise à jour d’un compteur


Dans une transaction, il faudra le verrouiller avant de le mettre à jour
La fin de transaction le déverrouille

Exemple d’utilisation : traitement LECFIC pour créer un fichier trace


######################################################################
Trbegin [ACM]
Lock NUMIMP
If fstat=0
WNUMIMP = [C]NUMIMP
[C]NUMIMP += 1
If fstat : Infbox « erreur sur compteur » : Endif
Else
Infbox « compteur verrouillé »
Endif
Commit
######################################################################

Les variables

> Présentation : Classe [G] : liée à une table

− Cette classe permet :


> D’obtenir les informations techniques d’une table
> Cette classe est appelable pour toute table X3.

− Exemple :
> Le champ adxfname contient les champ de la table appelée,
[G:BPR]adxfname contient donc BPRNUM,BPRNAM…

Copyright © Sage 2010 Sage X3 Language 7

Classe [G:xxx]
Adxfname nom des champs d’une table
Currind n° de la dernière clé utilisée
Currlen nb de parties de clé à prendre en compte
Filenume A ne pas utiliser
Keylen nb d’octets utilisés pour chaque clé
Keyname nom pour chaque clé
Keyuniq 1 sans homonyme; 0 avec homonyme

Copyright © Sage 2009-2010 Page 7


SAFE X3 LANGUAGE

Nbind nb de clés
Nbzon nb de champs
Tairec taille enregistrement en nombre d’octets

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.


Copyright © Sage 2010 Sage X3 Language 8

Dimensionnement :
On précise le nombre d’éléments ou une borne début et fin
Dans le 1er cas, les éléments sont numérotés de 0 à … n-1
4 dimensions maximum : Local Integer COORD( I, J, K, L)

Après une déclaration, une variable est toujours initialisée


Integer, shortint, decimal : 0
Date : [0/0/0]
Char : " "

Copyright © Sage 2009-2010 Page 8


SAFE X3 LANGUAGE

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»

Copyright © Sage 2010 Sage X3 Language 9

Opération sur chaîne :


Chaine+Chaine concatène deux chaînes.
Chaine-Chaine concatène deux chaînes en ne laissant qu’un seul blanc.

Opération sur numérique :


num1 += num2 ajout de num2 à num1
num1 -= num2 retrait de num2 à num1
num1 *= num2 num1 est multiplié par num2. le résultat est dans num1
num1 /= num2 num1 est divisé par num2. le résultat est dans num1

Copyright © Sage 2009-2010 Page 9


SAFE X3 LANGUAGE

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

Copyright © Sage 2010 Sage X3 Language 10

Opérations sur date


Date – Date donne un nombre de jours
Date +/- nombre donne une date

Copyright © Sage 2009-2010 Page 10


SAFE X3 LANGUAGE

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]

Copyright © Sage 2010 Sage X3 Language 11

Trans-classe
•D’une classe [F] vers une classe [M] et inversement
•D’une classe [F] vers une autre classe [F]
•D’une classe [M] vers une autre classe [M]

Copyright © Sage 2009-2010 Page 11


SAFE X3 LANGUAGE

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]

Copyright © Sage 2010 Sage X3 Language 12

Remarque :
Un champ dimensionné se mouvemente poste par poste
Le trans-classe mouvemente tous les postes des champs dimensionnés

Copyright © Sage 2009-2010 Page 12


SAFE X3 LANGUAGE

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
Copyright © Sage 2010 Sage X3 Language 13

Le trans-classe est à favoriser surtout pour le standard.

Copyright © Sage 2009-2010 Page 13


SAFE X3 LANGUAGE

Les variables

> Bloc tableau d’un écran

− Les lignes présents sur le bloc tableaux sont indicé de 1 à NBLIG,


NBLIG étant la variable de bas de tableaux et contenant le nombre de
lignes affichées. Nolign permet d’avoir le numéro de ligne courante.

− Attention : Les indices commencent à 0, mais les lignes commencent


à 1. On utilise la variable [s]nolign-1

− Exemple :
> Factures de vente, l’information [M:SIH3]QTY(0), correspond à la
quantité saisie sur la première ligne du tableau, nolign=1.

Copyright © Sage 2010 Sage X3 Language 14

Nolign-1 s’emploie pour indicer un champ d’un bloc tableau.


Indice s’emploie pour indicer un champ dimensionné dans un bloc liste.

Tout tableau dans un écran possède une variable de bas de tableau.


Elle est déclarée dans la définition du bloc.
Elle est à définir comme un champ saisissable, de type ABS
Pour rendre le tableau invisible, mettre cette variable en invisible.
Elle contient le nombre de lignes réellement saisies.
F6 permet de connaître son nom quand on a le « focus » sur le tableau sans être en saisie.

Copyright © Sage 2009-2010 Page 14


SAFE X3 LANGUAGE

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
trans-classe ligne par
[M:BPC4] = [F:BPD] ligne
[M:BPC4]BPDNAM0(nolign-1) = [F:BPD]BPDNAM(0) complément de mise à
[M:BPC4]BPDNAM1(nolign-1) = [F:BPD]BPDNAM(1) 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

Copyright © Sage 2010 Sage X3 Language 15

Trans-classe sur écran avec bloc tableau


•il faut positionner la variable [S]nolign ( valeur 1 à ..)
•faire une boucle pour faire alimenter chaque ligne du tableau par trans-classe
•pas de nécessité de tester la présence d’un champ soumis à code activité
Alimentation champ par champ
•alimentation champ par champ se fait par l’indice [S]nolign-1
•nécessaire si nom de champs différent
•nécessité de tester la présence d’un champ soumis à code activité

Copyright © Sage 2009-2010 Page 15


SAFE X3 LANGUAGE

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 10
Assign “[M:BPC4]REP”+num$(I)+”(nolign-1)” With [F:BPD]REP(I)
Next

Copyright © Sage 2010 Sage X3 Language 16

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ésentants


[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

Copyright © Sage 2010 Sage X3 Language 17

Copyright © Sage 2009-2010 Page 16


SAFE X3 LANGUAGE

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)
Copyright © Sage 2010 Sage X3 Language 18

Blob et Clob :
On peut passer un blob ou un clob en argument d’un sous-programme.
Pour tester la présence d’un clob ou d’un blob, utiliser : LEN(champ_blob) > 0

Nouveauté V5 :
•Le clob est traité comme une chaîne de caractères.
•On peut mouvementer une chaîne vers un clob ou inversement
•On peut utiliser toute instruction dédiée aux chaînes pour les clobs

Copyright © Sage 2009-2010 Page 17


SAFE X3 LANGUAGE

2. LES FONCTIONS

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

Copyright © Sage 2010 Sage X3 Language 20

Fonctions fréquemment utilisées


left$, right$, mid$, num$, vireblc, format$, string$, evalue

Copyright © Sage 2009-2010 Page 18


SAFE X3 LANGUAGE

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

Copyright © Sage 2010 Sage X3 Language 21

Fonctions fréquemment utilisées


date$, day, month, year, eomonth, addmonth, format$

Copyright © Sage 2009-2010 Page 19


SAFE X3 LANGUAGE

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

Copyright © Sage 2010 Sage X3 Language 22

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()

Copyright © Sage 2010 Sage X3 Language 23

Copyright © Sage 2009-2010 Page 20


SAFE X3 LANGUAGE

Fonctions fréquemment utilisées


find, min, max, sum

Sum :
Sum (nomvar) pour une variable dimensionnée, somme de tous les postes

Copyright © Sage 2009-2010 Page 21


SAFE X3 LANGUAGE

3. LES VARIABLES SYSTÈME

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

Copyright © Sage 2010 Sage X3 Language 25

fstat :
0 ok
1 enregistrement verrouillé
2 à 5 erreur

adxium :
50 ASCII
122 UCS2
autre UTF8

Copyright © Sage 2009-2010 Page 22


SAFE X3 LANGUAGE

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

Copyright © Sage 2010 Sage X3 Language 26

datesyst :
Date saisie sur l’écran de connexion, utilisée pour les écritures, par exemple.
Contrairement à date$ qui donne la date du jour délivrée par le serveur.

Copyright © Sage 2009-2010 Page 23


SAFE X3 LANGUAGE

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

Copyright © Sage 2010 Sage X3 Language 27

Notion d’héritage :
Lorsqu’un exécutable fait appel à un traitement, ou table ..., ce dernier est recherché en fonction de la
syntaxe :
•dans le dossier spécifié s’il est précisé
•dans le dossier courant [S]nomap(0) puis dans chacun des dossiers mères [S]adxmother(0..7) en
tenant compte de l’ordre hiérarchique, jusqu’à ce qu’il trouve.
•[S]adxmother(i) = [S]nomap(i+1)

Copyright © Sage 2009-2010 Page 24


SAFE X3 LANGUAGE

4. ECLIPSE IDE

4.1. DEFINITION
Eclipse est un environnement de développement intégré libre, permettant de créer des projets
de développement mettant en œuvre n'importe quel langage de programmation dont le langage L4G
X3 par l’ajout d’un plugin.

4.2. INSTALLATION ET CONFIGURATION


La dernière version d’éclipse est téléchargeable à deux adresses « Eclipse IDE for Java
Developers »
En interne :
http://nina/projects/eclipse/galileo/eclipse-java-galileo-SR1-win32.zip
En Externe :
http://www.eclipse.org/downloads/
Une fois téléchargé, vous devez ensuite extraire le contenu téléchargé (ex: « C:\eclipse\ » ou
« C:\eclipse\3.5\ »), puis installer une JVM (1.6 minimum), si celle-ci n’est pas présente sur votre
machine
http://java.sun.com/javase/downloads/index.jsp

Pour connaitre la version qui sera utilisée par éclipse :


Taper « Java -version » dans un prompt de commande.

4.3. INSTALLATION DU PLUGIN SAGE X3


Pour démarrer éclipse, cliquez sur l’exécutable « eclipse.exe » situé à la racine de votre
dossier téléchargé.
Une fois Eclipse lancé celui-ci vous demandera de renseigner le « workspace », c'est-à-dire le
répertoire de travail. Ne mettez pas les workspaces dans un sous-répertoire de l’installation d’eclipse,
car eclipse peut créer des répertoires au même niveau que le workspace. Créez un répertoire
chapeau (ex: D:\workspaces\X3).

Le déploiement du plugin repose sur une mise à jour via un accès HTTP.
Modifier la configuration d’accès au réseau si besoin en passant par le menu « Window |
Preferences » General > Network Connection. Les différentes options sont les suivantes :
6 Direct = pas de proxy
6 Native = informations fournies par le système
» Ne fonctionne pas toujours suivant les proxys
6 Manual = informations saisies par l’utilisateur

Une fois la configuration du réseau faite, vous devez ajouter l’adresse de mise à jour du plugin SAGE
dans le menu « Help | Install New Software »
Ajouter le nouveau site de mise à jour :
6 « Add... »
6 Name
⎝ SAFE X3 Studio Update Site
6 Location
⎝ http://pluginx3.sage.fr/safex3/studio/update/ (site externe)
ou
⎝ http://uranus2:8080/safex3/studio/update (site interne)

Depuis le Menu « Help | Install New Software »


6 Work with
⎝ Sélectionnez « SAFE X3 Studio Update Site »
6 Cochez « SAFE X3 Studio for Eclipse »

Copyright © Sage 2009-2010 Page 25


SAFE X3 LANGUAGE

6 Cliquez sur « Next > », « Next > »


6 Acceptez les termes de la licence
6 Cliquez sur« Finish »
6 Redémarrez lorsque vous y êtes invité

Une fois le site de mise à jour référencé et le plugin installé, il est possible d’aller recherché
directement les mises à jour du plugin SAGE depuis le Menu « Help | Check for updates ».
6 Interroge tous les sites référencés pour vérifier si des mises à jour sont disponibles.
6 Revoir la sélection si vous le souhaitez.
6 Installez puis redémarrer.

Attention :
Si un avertissement sur un contenu non signé apparait, cliquer sur OK

4.4. CONFIGURATION DU PROJET


Pour la création du projet, allez dans le menu « File | New | Project ... »
6 Sélectionner « SAFE X3 Project »
6 « Next > »
6 Donner un nom pour le projet (ex: myserver_DEMO)

Dans le but d’établir une connexion entre Eclipse et le dossier X3, vous devez configurer l’accès
d’éclipse avec les informations de connexion classique à un dossier X3.
» Folder (ex: DEMO)
» Hostname (ex: myserver)
» Port (ex: 16000)
» X3 User et X3 Password
» Language (ex: FRA, ENG, ...)
» User et Password (authentification OS)
» Help
⎝ Ne saisir que si l’info n’est pas présente dans le fichier solution.xml
6 « Finish »

Une fois le projet créé, Eclipse le sélectionne par défaut, vous devez maintenant ajouter les
traitements à modifier dans votre projet dans le menu « File | Open SAFE X3 Source file... »
6 Sélectionner dans la liste
6 Filtrer la liste
6 Saisir directement le nom d’un traitement

Il est aussi possible d’organiser votre projet des dossiers


6 Clic droit sur un projet, puis « New | Folder »
6 Sélectionner les fichiers puis 2 options :
» Déplacement à la souris dans le dossier
» Clic droit menu « Move... »

Attention !
Commencer par désactiver le build automatique par le menu « Project | Build Automatically ». Le
problème a été corrigé sur la V1.2

4.5. FONCTIONNALITES
» Colorisation syntaxique modifiable au menu Window | Preferences puis SAFE X3
Studio | Editor
» Multi-fenêtrage
» Passage en plein écran (Ctrl + M)
» Complétion (Ctrl + Espace) sur les mots clés, les variables globales, les variables
systèmes

Copyright © Sage 2009-2010 Page 26


SAFE X3 LANGUAGE

» Complétion sur les champs des abréviations (Tables et Masques) déclarées dans le
traitement (Local File, Local Mask)
» Auto-fermeture des caractères fonctionnant par paires : ", ', ( et [
» Bulle d'aide (tables, masques, variables globales, menus locaux)
» Templates de code et possibilité d'ajouter ses propres templates dans Window |
Preferences puis SAFE X3 Studio | Templates
» Commenter / dé-commenter (Ctrl + /) une ou plusieurs lignes à la fois
» Indentation (Tab) d’une ou plusieurs lignes à la fois
» Atteindre les étiquettes, les procédures et fonctions (y compris celles déclarées dans
d'autres traitements) selon la position actuelle du curseur (F3)
» Détection des erreurs de syntaxe à la saisie
» Navigation dans l'historique des déplacements multi-fichiers (Alt + flèche gauche et
Alt + flèche droite)
» Historique local des modifications (Clic droit, puis Compare With | Local History...)
» Comparaison fichier à fichier
» Recherche multi-fichiers (Ctrl + H) dans les fichiers du workspace, d'un projet, ...
» Console d’évaluation
» Variables Globales
» Variables Système
» Func ...
» Projet
» Reconnexion automatique en cas de déconnexion réseau

6 Personnaliser sa façon de travailler


6 Menu « Window | Preferences »
» Keys : Touches claviers (différents profils)
» Connection : Connexion
• Timeout
• Lock refresh rate
» Editor : Colorisations
• Commentaires
• Instructions
• Etiquettes
• Chaînes
• Sous-programmes et fonctions
» Http Service ⎝lien avec Client X3
» Locks : Verrous
• Autoriser le déverrouillage (de ses propres verrous)
• Autoriser le déverrouillage de tous les verrous
» Templates : Modèle de code

Important !
6 Ne pas utiliser le « rename » de fichiers
» N’est pas répercuté sur le serveur
6 Suppression d’un fichier du projet
» Ne supprime pas le fichier sur le serveur
6 Veiller à désactiver « Build Automatically »
6 Penser au « File | Reset object cache », bouton
» Accéder à des éléments nouvellement créés

4.6. DIAGNOSTIQUER
Pré-requis pour le fonctionnement d’Eclipse :
6 Serveur
» Le traitement AXDTMAIN doit être présent dans le dossier de référence.
» Ideclient.jar dans .../X3_PUB/X3_ROOT/X3CLI
6 Eclipse (poste client)
» Java 1.6

Copyright © Sage 2009-2010 Page 27


SAFE X3 LANGUAGE

6 Client X3 (poste client)


» Configuration ⎝ Menu « Outils | Options »
6 Utilisateur X3
» Paramètre AECLIPSE à Oui
⎝ Active les interactions avec Eclipse
• Chapitre « superviseur »
• Groupe « DEV »

6 Eclipse
» 3.5 SR1 recommandé (Eclipse Platform 3.5.1)
» Plugin SAFE X3 Studio version 1.0.2.200911161752 mini
6 En autonome pour accès au serveur
» Moteur >= 15r.120
6 Lancement Eclipse depuis Client X3
» Moteur >= 16r.114
» CLI.104 mini
6 Exécution d’un traitement depuis Eclipse
» Moteur >= 16r.115
» Superviseur >=16.002
» CLI.105 mini
6 Eclipse V5
» Compilation sur X3 du traitement AXDTMAIN

6 Mode debug et affichage des logs


» eclipse -debug -consoleLog
6 Menu « Help | About » , Puis « Installation Details »
» Installed Software
• Version des plugins (features)
» Installation History
• Visualiser et/ou revenir en arrière
» Features
• Liste des « features »
» Plug-ins
• Liste de tous les plugins
» Configuration : configuration de démarrage d’Eclipse
• Options de lancement
• Version de la JVM
• Plugins
• ....
• Voir le contenu de « Error Log »

Copyright © Sage 2009-2010 Page 28


SAFE X3 LANGUAGE

5. LES INSTRUCTIONS

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 de type fichier est accessible par un programme

Exemple :
If clalev([F:ITM])=0 : Local File ITMMASTER [ITM] : Endif
Copyright © Sage 2010 Sage X3 Language 29

Ouverture de table :
•1 table ne peut pas être ouverte 2 fois sous la même abréviation dans 1 même traitement.
•1 table peut être ouverte sous 2 abréviations différentes dans 1 même traitement ( 2 buffers )
•Ouverture d’une table d’un autre dossier : serveur:n°_port@dossier.table
Fermeture de table :
•La fermeture traitement ferme les tables ouvertes dans ce traitement
•File ferme toutes les tables précédemment ouvertes par un ordre File précédent.
•Local File fortement conseillé car ne ferme pas ces tables.
Clalev :
•retourne 1 si la classe est accessible.
•retourne 0 si elle ne l’est pas.

Copyright © Sage 2009-2010 Page 29


SAFE X3 LANGUAGE

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
Copyright © Sage 2010 Sage X3 Language 30

Local file :
•Si on ouvre une table dans un sous-programme avec une abréviation connue dans le traitement
appelant, ouverture d’un 2ème buffer.
•S’il n’y a pas d’utilité d’avoir ces 2 buffers, on évite de réouvrir une table déjà ouverte ( performance)
•clalev([F:xxx])=0 indique que la table d’abréviation xxx n’est pas ouverte

Copyright © Sage 2009-2010 Page 30


SAFE X3 LANGUAGE

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

Copyright © Sage 2010 Sage X3 Language 31

Link :
• Table principale et tables liées (jusqu'à 8) doivent avoir été ouvertes au préalable
• Une jointure est de type extérieure gauche si l'on précise le caractère '='
• Une jointure est de type stricte si l'on précise le caractère '~=‘
• L'abréviation de lien ne permet pas d’écriture sur l’une ou l’autre des tables
• L’abréviation de lien ne contient que les champs de la table principale
Æ utiliser l’abrev. Lien pour la lecture
Æ utiliser l’abrev des tables pour les maj et suppression, et accéder ou maj les champs
• Il n'y a pas de classe [G] associées à l'abréviation de lien
• L'abréviation de lien doit être unique
• On peut définir un filtre (par Filter) sur un fichier de lien
• On peut définir un Link d'une table sur elle-même, et ainsi associé 2 enregistrements d'une
même table
• On peut définir plusieurs liens (avec des abréviations différentes) sur une même table
principale ( jusqu'à 8 ).
• La lecture d'un fichier dépassant 255 colonnes provoque une erreur en version DB2 (attention
au link)

Copyright © Sage 2009-2010 Page 31


SAFE X3 LANGUAGE

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
Copyright © Sage 2010 Sage X3 Language 32

Read :
•on utilise la clé définie par la clause Order By du File, du Filter ou du Link
•sinon, l'une des clés définies en paramétrage de la table
•Lorsqu'on utilise l'abréviation de lien, on lit un enregistrement du fichier principal selon la clé donnée
puis un enregistrement dans chaque fichier lié selon la clé et le mode de lecture donnés dans Link.

Copyright © Sage 2009-2010 Page 32


SAFE X3 LANGUAGE

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
Copyright © Sage 2010 Sage X3 Language 33

For ... Next :


• On ne sort pas d'une boucle "For ... With Lock" ( ne pas utiliser )
• On peut imbriquer des boucles "For" sur le nombre de parties de la clé, de façon à définir des
ruptures
• La clause Where permet de réduire les enregistrements à traiter (important pour les
performances)
• La clause Where disparaît dès la fin de la boucle For
• La lecture d'un fichier dépassant 255 colonnes provoque une erreur en version DB2 (attention
au link)

Copyright © Sage 2009-2010 Page 33


SAFE X3 LANGUAGE

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
# l’indice s’il est précisé indique le nb de parties de clé à prendre en compte
For [SOP]SOP0(1)
For [SOP]SOP0
...
Rupture sur le 1er champ de clé
Next
Next

Copyright © Sage 2010 Sage X3 Language 34

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'.
Copyright © Sage 2010 Sage X3 Language 35

Copyright © Sage 2009-2010 Page 34


SAFE X3 LANGUAGE

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.

Copyright © Sage 2010 Sage X3 Language 36

Filter :
• Un 2ème Filtre sur une même classe annule et remplace le filtre précédent.
• Un filtre placé dans un sous-programme est toujours actif en retour dans le programme
appelant (pas de niveau de localité)

Copyright © Sage 2009-2010 Page 35


SAFE X3 LANGUAGE

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

Copyright © Sage 2010 Sage X3 Language 37

Transaction :
Toute création, mise à jour ou suppression doit se faire à l’intérieure d’une transaction.
En cours de transactions, les créations, modifications et suppressions ne sont pas visibles des autres
utilisateurs.

Write :
• Une instruction Write ne modifie pas l'enregistrement courant.
• Il faut donc faire une lecture, si on veut se positionner sur ce nouvel enregistrement.
• Il n'est pas possible d'utiliser une abréviation de lien pour écrire un enregistrement.
• [S]fstat indique comment s’est passée l’opération sur la table.

Copyright © Sage 2009-2010 Page 36


SAFE X3 LANGUAGE

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
Copyright © Sage 2010 Sage X3 Language 38

Rewrite :
• l'enregistrement devient l'enregistrement courant de la table.
• Il n'est pas possible d'utiliser une abréviation de lien pour réécrire un enregistrement.
• La modification d'un enregistrement doit se faire à l'intérieur d'une transaction.
• Conseil : verrouiller l’enregistrement par ReadLock

Copyright © Sage 2009-2010 Page 37


SAFE X3 LANGUAGE

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

Copyright © Sage 2010 Sage X3 Language 39

Update :
• réécrire des enregistrements d’une table avec les valeurs passées en paramètre
• La clause Where permet de réduire les enregistrements à traiter (important pour les
performances)
• La clause Where disparaît dès la fin de l’Update
• pour un ensemble d’enregistrements à modifier, Update est + rapide et - consommateur de
Rollback.
• ne peut pas se faire sur une abréviation de lien.
• tentative de verrouillage sans limitation de durée, sans possibilité d’interrompre
• conseil : verrouiller la table dans son ensemble par Lock [abrev]
• nombre d’enregistrements modifiés indiqués par la variable [S]Adxuprec.
• ATTENTION : on ne peut pas prédire le comportement d'une instruction Update qui affecterait
un champ avec la valeur d'un champ lui-même affecté par Update.
• Donc à utiliser sur un petit nombre d’enregistrement (MODIF)

Copyright © Sage 2009-2010 Page 38


SAFE X3 LANGUAGE

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

Copyright © Sage 2010 Sage X3 Language 40

Delete :
• Ne modifie pas l'enregistrement courant (le contenu des variables de la classe [F] est toujours
disponible).
• [S]adxdlrec contient le nombre d'enregistrements effacés.
• pas possible d'utiliser une abréviation de lien pour supprimer l’enregistrement d'une table.
• Delete d’un enregistrement verrouillé reste en attente et poursuit sa suppression lorsque
l'enregistrement se libère. (syntaxe 1)
• Par contre, en inter-blocage ou syntaxe 2, le Delete arrête sa suppression et envoie un
fstat=1.
• Il est préférable de verrouiller l’enregistrement par ReadLock avant de le supprimer.
• La clause Where permet de réduire les enregistrements à traiter (important pour les
performances)
• La clause Where disparaît dès la fin du Delete.

Copyright © Sage 2009-2010 Page 39


SAFE X3 LANGUAGE

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
Copyright © Sage 2010 Sage X3 Language 41

blocage logique
exemple en livraison automatique des commandes.

Lock :
Verrouillage d’un ou plusieurs symboles
Doit se faire avant la transaction de mise à jour
Symbole est constitué du code objet + clé enregistrement
En cas d'insuccès, Lock réessaye tant que le nombre de secondes fixé par la variable [S]lockwait
n'est pas écoulé
En cas d'insuccès au bout du temps imparti, la variable système [S]fstat vaut 1.
La syntaxe avec "With lockwait = " permet d'affecter momentanément [S]lockwait avec la valeur qui
suit.
Après quoi, [S]lockwait reprend sa valeur initiale contenu dans le paramètre TIMLCK ( chap. SUP )
Le nom de la table contenant les locks symbole est délivré par la variable [S]Adxtlk. ( a ne pas
modifier )

Copyright © Sage 2009-2010 Page 40


SAFE X3 LANGUAGE

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.

Copyright © Sage 2010 Sage X3 Language 42

Blocage physique :
• Verrouillage d’une ou plusieurs tables
• Pour un enregistrement, le verrouillage se fait par l’instruction Readlock.
• Dans une transaction, un enregistrement est déverrouillé par le Commit ou Rollback
• Dans une transaction, le Unlock est inefficace
• Il n'est pas possible d'utiliser l'abréviation de lien pour verrouiller une table
• Echec d’un Lock si le même Lock ou si un enregistrement de cette table a déjà été verrouillé
depuis un autre poste.

Copyright © Sage 2009-2010 Page 41


SAFE X3 LANGUAGE

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

Copyright © Sage 2010 Sage X3 Language 43

Trbegin :
• définit le début d'une transaction.
• transaction garantie une mise à jour globale des données (garde une cohérence des
informations)
• permet d'ouvrir des tables en lecture/écriture
• 1 table est à ouvrir obligatoirement
• Il est interdit d'initier une transaction, s'il y en a déjà une en cours. Voir (adxlog pour tester si
nous sommes en transaction)
• La validation ou l’annulation de la transaction doit se faire dans le traitement initiateur de la
transaction
• Si le traitement se termine sans que la transaction ait été validée ou annulée, la transaction
est annulée (Rollback)
• La mise à jour effective de la base de données ne se fera qu'au moment de la validation de la
transaction
• La syntaxe préconisée : Trbegin <classe>
o permet de re-déclarer un fichier ouvert au préalable par File
o ceci permet de conserver l'enregistrement courant, la sélection courante.

Commit & rollback :


• Enlève les locks table posés pendant et même avant la transaction
• Enlève les locks symbole posés pendant la transaction uniquement

Copyright © Sage 2009-2010 Page 42


SAFE X3 LANGUAGE

Les instructions

LES TRANSACTIONS
• Exemple :

Call DEBTRANS From GLOCK


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

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

Copyright © Sage 2010 Sage X3 Language 44

sous-programme DEBTRANS
Ce sous-programme initialise les variables globales suivantes :
GLOCK=« »
a positionner par le nom de la table et la clé dans votre traitement
GROLL=0
positionné par le sous-programme ROLL de GLOCK
1 : Rollback
0 : Rollback + nouvelle tentative
GNBROLL=0
compteur de rollback
contrôlé par rapport à GROLLBACK ( nb de rollback autorisé par le paramètre ROLLBACK )
GOK=1
-1 : a positionner si l’enregistrement est verrouillé
0 : a positionner si l’enregistrement est en erreur

sous-programme RSTA
Affiche un message d’erreur suite à une tentative de lecture.

sous-programme FSTA
Affiche un message d’erreur suite à une tentative d’écriture, ré-écriture ou suppression.

[S]fstat : statut de retour d’une opération sur table


0 : ok
1 : enregistrement verrouillé
-1 : erreur

Copyright © Sage 2009-2010 Page 43


SAFE X3 LANGUAGE

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
Copyright © Sage 2010 Sage X3 Language 45

sous-programme ROLL
Ce sous-programme appelé après le rollback permet de demander à l’utilisateur, s’il veut une nouvelle
tentative.

Copyright © Sage 2009-2010 Page 44


SAFE X3 LANGUAGE

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
Copyright © Sage 2010 Sage X3 Language 46

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
Copyright © Sage 2010 Sage X3 Language 47

Copyright © Sage 2009-2010 Page 45


SAFE X3 LANGUAGE

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 ‘,’

Copyright © Sage 2010 Sage X3 Language 48

Exemples :
# affiche : 1 3.5 6 8.5 11 FIN=13.5
For I = 1 To 13 Step 2.5
Infbox num$(I)
Next I
Infbox "FIN="-num$(I)

# affiche : FIN=15
For I = 15 To 12
Infbox num$(I)
Next I
Infbox "FIN="-num$(I)

# affiche : 15 14 13 12 11 FIN=10
For I = 15 To 11 Step –1
Infbox I
Next I
Infbox "FIN="-num$(I)

# affiche : A EF X ZZZ FIN=ZZZ


For CHN="A","EF","X","ZZZ"
Infbox CHN
Next CHN
Infbox "FIN="-CHN

Copyright © Sage 2009-2010 Page 46


SAFE X3 LANGUAGE

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
Copyright © Sage 2010 Sage X3 Language 49

Remarque :
Le traitement réalisé dans cette boucle ne doit pas faire de lecture de table (succession de read)

Copyright © Sage 2009-2010 Page 47


SAFE X3 LANGUAGE

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 <> ""

Copyright © Sage 2010 Sage X3 Language 50

Remarque :
Le traitement réalisé dans cette boucle ne doit pas faire de lecture de table (succession de read)

Copyright © Sage 2009-2010 Page 48


SAFE X3 LANGUAGE

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
Copyright © Sage 2010 Sage X3 Language 51

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

Copyright © Sage 2010 Sage X3 Language 52

Copyright © Sage 2009-2010 Page 49


SAFE X3 LANGUAGE

Etiquette :
Partie de programme adressable par l’instruction gosub
Retour géré par l’instruction return

Gosub :
•Appel d’une étiquette définie ou nom dans le même traitement
•Dans l’étiquette, on a tout le contexte du traitement appelant
(même niveau de localité )
•En sortant de l’étiquette, l'instruction suivant le "Gosub" est exécutée.

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
# traitement TRTXXX
Local integer ZERR
Subprog ZDAT (DAT,ZERR)
Call ZDAT ([31/12/2005],ZERR) From TRTXXX
Value date DAT
Variable integer ZERR
If DAT > date$ : ZERR = 1 :
Endif
End
Copyright © Sage 2010 Sage X3 Language 53

Sous-programme :
Appelé par l’instruction call
Retour géré par l’instruction End

Déclaration des paramètres :


Value par valeur (c’est une constante ou une variable)
En sortie du sous-programme, la valeur du paramètre n’est pas récupérée par le programme
appelant.

Variable par adresse ( c’est obligatoirement une variable )


En sortie du sous-programme, la valeur du paramètre est récupérée par le programme
appelant.

Call :
• Appel d’un sous-programme défini et du nom du traitement
• L'ordre des paramètres dans "call" est mis en correspondance avec ceux de Subprog.

Copyright © Sage 2009-2010 Page 50


SAFE X3 LANGUAGE

• Dans le sous-programme, on a les classes [F] et [M], les variables globales du traitement
appelant
• A chaque sous-programme, on aura une nouvelle classe [L]
• En sortant du sous-programme, l'instruction suivant le "Call" est exécutée.

From = TRTXXX (construit le nom du traitement) [MODIF]

Les instructions

FONCTION
Syntaxe
Funprog XXX (PAR1,..,PARn) XXX : Nom de la fonction
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

Copyright © Sage 2010 Sage X3 Language 54

fonction :
Appelé par l’instruction Func
Retour géré par l’instruction End
Sur l’instruction End un résultat est renvoyé au traitement appelant

Caractéristiques identiques au sous-programme.

Copyright © Sage 2009-2010 Page 51


SAFE X3 LANGUAGE

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

Copyright © Sage 2010 Sage X3 Language 55

Ouverture d’un écran


•Normalement, on laisse faire l’ouverture par le superviseur
Déclaration d’un écran dans l’applicatif
•pour stocker un ensemble de variable dans une même classe
•La classe [M] est disponible sans passage de paramètres dans les sous-programmes
•Il n’y a pas de niveau de localité : si écran ouvert dans un traitement et son sous-pro sous la même
abrev, il n’y a qu’un buffer (fonctionnement différent des tables)
•rapidité ( travail en mémoire ) par rapport à une table de travail
•utilisé notamment dans les stocks ( ex : STOSORW, STOENTW, STOWORK )
•on utilise des blocs tableaux et/ou invisibles
•la validation d’écran est nécessaire
Variables [M] passées en paramètres
•les menus locaux sont passés en integer
•les variables de bas de tableaux en shortint
•les autres champs numériques sont passés en décimal
Attention :
•eviter les suppressions de lignes dans les tables d’écran ( très couteux )
•dimensionner un tableau par code activité

Copyright © Sage 2009-2010 Page 52


SAFE X3 LANGUAGE

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-99

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.

Copyright © Sage 2010 Sage X3 Language 56

Affzo, Effzo etc...


L’ordre utilisé est toujours celui découlant des rangs de saisie et de la position des champs à l'écran.
Par conséquent, si on veut changer cet ordre d’affichage, il est nécessaire d'utiliser plusieurs
instructions Affzo.

Effzo
La remise à zéro donne aux variables des valeurs dépendant du type, à savoir :
• la chaîne vide "" pour une variable de type Char,
• la date nulle [0/0/0] pour une variable de type Date,
• la valeur 0 pour une variable numérique.
• l'information 'champ non initialisé' est positionnée
• c’est l’équivalent d’un Raz + affichage blancs dans commentaires + Affzo

Copyright © Sage 2009-2010 Page 53


SAFE X3 LANGUAGE

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
Copyright © Sage 2010 Sage X3 Language 57

Grizo :
champ devient affiché et non saisissable,
visuellement grisé ( police grise sur fond gris )
menu contextuel non accessible

Diszo :
champ devient affiché et non saisissable,
visuellement grisé ( police noire sur fond gris )
menu contextuel accessible

Actzo :
le champ est réactivé. il redevient saisissable.

Copyright © Sage 2009-2010 Page 54


SAFE X3 LANGUAGE

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
Copyright © Sage 2010 Sage X3 Language 58

Affzo, Actzo
Attention !
Affzo [classe] rend valide l’écran. Les contrôles ne sont donc pas effectués.
Pour éviter cela, on utilisera la syntaxe indiquant un rang début et fin :
Affzo [classe] <irgdeb> - <irgfin>

Setmok
Instruction permettant d‘agir sur le statut validé de l‘écran.

Copyright © Sage 2009-2010 Page 55


SAFE X3 LANGUAGE

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

Copyright © Sage 2010 Sage X3 Language 59

Copyright © Sage 2009-2010 Page 56


SAFE X3 LANGUAGE

6. MESSAGE D’ERREUR OU D’AVERTISSEMENT

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

Copyright © Sage 2010 Sage X3 Language 61

onerrgo
•si le traitement de gestion d’erreur se termine par End, le traitement est interrompu de façon
définitive.
•Le traitement de gestion d'erreur ne peut pas terminer une transaction (<> niveau de localité)
•S'il y a une transaction en cours quand l'erreur est détectée, elle est annulée automatiquement
(Rollback) si le traitement se termine par End.
•Onerrgo sans étiquette supprime la référence à une étiquette en cas d'erreur
Fonctions associées :
Errp: Nom du traitement à l’origine de l’erreur
Errl : Ligne dans le traitement à l’origine de l’erreur

Errn: N° de l’erreur X3
ErrMes$: Message d’erreur X3
Errm: Seconde partie du message d’erreur produit par X3

Copyright © Sage 2009-2010 Page 57


SAFE X3 LANGUAGE

Message d’erreur ou d’avertissement

Afficher un message

Copyright © Sage 2010 Sage X3 Language 62

Affichage d’un champ numérique :


infbox « nombre de commande »-num$([F:SQH]ORDNBR)

Affichage d’un champ date :


infbox « date commande »-num$([F:SQH]ORDDAT)

Traitement lancé en mode BATCH


Les instructions Infbox et Dbgaff ne sont pas supportées.

Copyright © Sage 2009-2010 Page 58


SAFE X3 LANGUAGE

7. GESTION DES TRACES

6. Gestion des traces


TRACE A PARTIR D’UN TRAITEMENT
Ouverture / Fermeture du fichier trace
Local char TIT(30) :[L]TIT =‘’Formation langage ’’
If !GSERVEUR : 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

Copyright © Sage 2010 Sage X3 Language 64

Ouverture & fermeture trace :


Affectation d’un titre à la trace
Ouverture et fermeture pour le mode interactif

Ecriture :
1er paramètre : message à afficher
2ème paramètre : type message ( 0 informatif, 1 erreur ) 9 pour le vert, avertissement

Ecriture d’un chemin :

Par défaut, le caractère « \ » permet de passer à la ligne suivante dans un CALL ECR_TRACE, par
exemple. Or, ce caractère peut être significatif dans un message, notamment lorsque l'on veut
préciser un chemin d'accès. Par exemple :

Call ECR_TRACE ("c:\temp\monfic.txt") From GESECRAN

Le caractère « | » inhibe ce formatage jusqu’au prochain "|". L'idéal est donc d'encadrer les noms de
fichier par des "|" dans le ECR_TRACE. Par exemple :

Call ECR_TRACE ("|c:\temp\monfic.txt|") From GESECRAN

Copyright © Sage 2009-2010 Page 59


SAFE X3 LANGUAGE

Gestion des traces


NOMMAGE DES FICHIERS TRACE
fichier trace applicatif

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 géré par le superviseur 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.

Copyright © Sage 2010 Sage X3 Language 65

Copyright © Sage 2009-2010 Page 60


SAFE X3 LANGUAGE

8. OPTIMISATION DES REQUÊTES

Optimisation des requêtes


REGLES DE BASE
4Envoyer 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

4Eviter 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

4Limiter 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

4Ré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

Copyright © Sage 2010 Sage X3 Language 67

For :
Le privilégier aux Read car moins d’ordres SQL transmis à la base.
Eviter absolument les read dans boucles While ou Repeat.

Columns :
Réservé plutôt pour le spécifique.
Dans le standard, n’est utilisé que sur les listes de gauche.

Update :
On utilise Update, si le traitement effectue une mise à jour unique sur un ensemble de lignes.
Dans ce cas, il est conseillé de locker la table.

Copyright © Sage 2009-2010 Page 61


SAFE X3 LANGUAGE

Optimisation des requêtes


REGLES DE BASE
4Privilé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%’

Copyright © Sage 2010 Sage X3 Language 68

Find :
Attention ! À la limite dans la clause Where avec cette syntaxe (<>0 ou =0)
( 60 champs alpha ou 60X128 champs numériques)

En dehors de la clause Where, Find renvoie le rang


Et permet de rechercher une valeur particulière dans une série de variables ou expressions
numériques, alphanumériques ou dates.

Pat :
permet de vérifier la conformité d'une chaîne à un modèle (pattern).
Cette conformité se fait avec les conventions suivantes pour les modèles :
• le caractère '*' représente un nombre quelconque, éventuellement nul, de caractères,
• le caractère '?' représente exactement un caractère,
• le caractère '#' représente un chiffre,
• le caractère '!' représente une lettre.

En dehors de la clause Where, Pat renvoie 1 si correspondance au modèle.

Copyright © Sage 2009-2010 Page 62


SAFE X3 LANGUAGE

9. OUTILS / UTILITAIRES

Outils / Utilitaires
Editeur

Lancement de l’éditeur
Par la fonction ADOTRT
Par click droit sur un champ « nom de traitement » (type de donnée ADC)
Dans le dictionnaire des écrans, click droit sur action champs « saisie étiquette »

Ecran d’ouverture de traitement :


nom fichier : racine* + TAB permet de visualiser l’ensemble des traitements commençant par
cette racine.
lecture seule : permet de visualiser un source sans le verrouiller

Verrouillage d’un source :


Dès que l’on ouvre un traitement sans cocher la case « lecture seule »,
création d’un fichier de même nom que le traitement et d’extension LCK.src

Utilitaire de déverrouillage des traitements :


Développement / Utilitaires / Vérifications / Verrou/Traitements verrouillés

Copyright © Sage 2010 Sage X3 Language 70

Organisation du traitement :
si traitement unique pour action champ et action objet alors placez les actions sur champs en fin de
traitement.

Copyright © Sage 2009-2010 Page 63


SAFE X3 LANGUAGE

Outils / Utilitaires
Editeur

Les fichiers
Fichier source : *.src dans dossier/TRT
Fichier compilé : *.adx dans dossier/TRT
Fichier archive : archive.atx, atx.ind (index) dans dossier

La compilation
Génère l'ensemble des exécutables dans le fichier archive unique et les *.adx.

Les Utilitaires
Utilitaire de Génération archive traitements précédée d’une re-génération éventuelle *.adx
à partir des sources
Utilitaire Archive traitements : Extraction, intégration ou suppression d’un traitement de
l’archive
Niveaux de localité : fichier dans dossier courant ou dans dossier de niveau supérieur
Présence ou pas d’un source : tous les sources ne sont pas livrés.

Automatisme instruction langage


Tokenisation = Aide au langage (curseur sur mot clé + F1)
Copyright © Sage 2010 Sage X3 Language 71

Attention, n’est plus utilisé en V6, les .adx sont les exécutables

Copyright © Sage 2009-2010 Page 64


SAFE X3 LANGUAGE

Outils / Utilitaires
Editeur

Barre d’outils
Créer / Modifier
Couper / Copier / Coller
Sauvegarder
Compiler : sauvegarde + compilation
Exécuter : sauvegarde + compilation + exécution
Calculatrice
Aide au langage (curseur sur mot clé)
Sommaire de l’aide

Menus
En plus des possibilités de la barre d’outils :
Ouvrir : plusieurs sources
Supprimer : suppression source et exécutable (*.adx et dans l’archive)
Imprimer
Rechercher / Remplacer
Suivant / Précédent
Aller à la ligne
Copyright © Sage 2010 Sage X3 Language 72

Source complet :
Sauvegarder : Ctrl+S
Compiler : sauvegarde du source + compilation ( F7 )
Exécuter : sauvegarde + compilation + exécution ( F5 )
Supprimer un traitement : Fichier / Supprimer
Sélectionner tout : Ctrl+A
Aller à la ligne : Ctrl+G ( Outil / Aller à la ligne )

Saisie étiquette :
Enregistrer : sauvegarde + compilation
Fin : sortir avec abandon des modifications

Exécuter :
pour exécuter un traitement objet écrire en début de traitement :
Call OBJET ("XXX",GBIDC1,GBIDC2) From GOBJET
End
XXX étant le code objet

Copyright © Sage 2009-2010 Page 65


SAFE X3 LANGUAGE

Outils / Utilitaires
Editeur
$ étiquette appelée par Gosub

# commentaires

! not
ex : !clalev([F:BPC]) identique à clalev([F:BPC])=0

: concaténer
plusieurs instructions sur une même ligne

& continuation
instruction sur plusieurs lignes

Mot clé du langage Sage X3 tokenisé.


L’aide est disponible par F1

Copyright © Sage 2010 Sage X3 Language 73

Copyright © Sage 2009-2010 Page 66


SAFE X3 LANGUAGE

Outils / Utilitaires
> Menu « Outils>Options… » de la page de démarrage.

− Paramétrage des sauvegardes automatique des traitements

− Modification du nombre d’espace pour la tabulation.

− Modification de la couleur des lignes des tableaux X3.

− Modification Polices et styles d’écritures.

− Paramétrage pour le lancement d’Eclipse à partir de X3.

Copyright © Sage 2010 Sage X3 Language 74

Prise en compte de ces paramètres : déconnexion et re-connexion

Sauvegarde automatique :
Traitement sauvegardé dans le répertoire temporaire associé à l’utilisateur windows connecté
(c:\documents and settings\ ...), ceci toutes les n secondes.

Indentation :
Largeur de la marge gauche de l’éditeur de traitement
100 par défaut correspond à 1 caractère

Nombre de fichiers listés :


Nombre de fichiers listés dans la fenêtre de choix d’un traitement

Tabulation :
Permet une tabulation de n caractères
Shift+Tab permet d’enlever une tabulation ( il faut avoir sélectionner la ligne entière )

Copyright © Sage 2009-2010 Page 67


SAFE X3 LANGUAGE

Outils / Utilitaires
> Debugger : lancement

− Dans une fonction


> menu ? / Aide au diagnostic / Debugger + saisie
> menu ? / Aide au diagnostic / Dbg On
> instruction dans un traitement Dbgaff

− Paramètre utilisateur DBG :


> « Paramétrage>Utilisateurs>Utilisateurs » Onglet Paramètres
click droit sur ligne « superviseur développement » option
« détail »
> autorise ou pas l’accès au debugger par le menu Outils.

Copyright © Sage 2010 Sage X3 Language 75

Outils / Utilitaires
> Debugger : Utilisation

> bouton ligne : pas à pas


> bouton continuer : évite d’entrer dans les Call, Subprog et Func
> bouton fin : arrête le debugger et continue le traitement

− Tableau des variables :


> interrogation de variables ( 20 max. )
> Variables système ou locales du superviseur ne sont pas interrogeables
(ex : nolign, valeur)
> affichage automatique des paramètres passés en argument avec leur
valeur.

− Tableau des points d’arrêt :


> on indique un point d’arrêt sous la forme traitement : ligne (traitement
facultatif si traitement courant )
> nombre de points d’arrêt ( 10 max. )
> doit se placer sur une ligne réellement exécutée ( pas sur une ligne
commentaire, ou sur Endif par exemple )

− Source affiché :
> visualisation du source par l’ascenseur
> retour à l’instruction courante par l’option « ligne courante » du menu
contextuel de la variable de bas de tableau
Copyright © Sage 2010 Sage X3 Language 76

Copyright © Sage 2009-2010 Page 68


SAFE X3 LANGUAGE

Outils / Utilitaires
> Debugger : Détail

− Il s’agit d’une vu de toutes les variables et classe accessible à un instant t de


l’exécution du traitement.

− Modification des variables par click droit sur une variable.


− Affichages des variables accessibles pour une classe donnée, des écrans, des
tables, des traitements et des fichiers ouverts.

Copyright © Sage 2010 Sage X3 Language 77

Le débuggeur est développé avec l'outillage de la plateforme Safe X3.


Cet adhérence à l'outil lui apporte certaines limites et il faut éviter de l'utiliser pour pour observer :

• Les valeurs des variables systèmes (nolign, indice, etc.), globales (GMESSAGE,...), locale
(VALEUR) qui peuvent être faussées.
• les traitements lancés en batch
• les import/export (à cause de l'instruction Setmode qui détourne les instructions d'affichage)
• les web services

Pour pallier à ces limites :

• Il faut passer par une trace ou par l'instruction infbox selon les cas.

Copyright © Sage 2009-2010 Page 69


SAFE X3 LANGUAGE

Outils / Utilitaires
> Calculatrice

− accès via dans une fonction :


> menu ? / Aide au diagnostic / calculatrice

− ce qu’elle permet :
> évaluer des formules de calcul conformes au langage des
expressions sage X3.
> ex 1 : 3.14159+2.71828
> ex 2 : [BPC]BPCNUM valeur du champ
> ex 3 : len([BPC]BPCNUM) longueur du champ

− Fonction du menu contextuel :


> historiques: affichage des dernières formules frappées
> HISTCALC paramètre utilisateur définissant le nombre de
formules à garder dans l’historique
> décimales: nombre de décimales à utiliser
> éditeur formules : aide pour la construction des formules
> classes de variables : équivalent du bouton détail en debug

Copyright © Sage 2010 Sage X3 Language 78

Outils / Utilitaires
> Maintenance en lignes Développement>Utilitaires>Maintenances>En lignes

− Permet la consultation, la modification, la création et la suppression


d’un enregistrement d’une table.
− les champs de clé primaire sont en en-tête
− accessible aux utilisateurs ayant le profil d’administrateur ( paramètre
ADMUSR chap. SUP )

> Maintenance en colonnes Développement>Utilitaires>Maintenances>En colonnes


− Permet la consultation et la modification sur plusieurs enregistrements
(filtre possible) avec plusieurs colonnes définis au lancement.
− les champs de clé primaire sont affichés et non saisissables/
− accessible aux utilisateurs ayant le profil d’administrateur ( paramètre
ADMUSR chap. SUP )

− Attention dans les deux maintenances!!


> pas de contrôle de cohérence des données
> pas de contrôle de la valeur pour un champ de type menu local

Copyright © Sage 2010 Sage X3 Language 79

Copyright © Sage 2009-2010 Page 70


SAFE X3 LANGUAGE

Trace :
Un enregistrement est créé dans la table AESPION
AESPION est visualisable par la maintenance, ou par une requête
Trace sur table, clé, nature intervention, utilisateur, date, heure, fonction d’origine (GMAINT)
Trace également dans le fichier espion.tra sous le répertoire tmp

Outils / Utilitaires

> Transaction système


− Permet de paramétrer la mise à jour d’une ou plusieurs tables.
− La MAJ peut être une création, une modification ou une suppression.
− Possibilité de filtrer les enregistrement concernés par la transaction.

− Renseignement de la table principale et de table liées à celle-ci.


− Renseignement des paramètres.
− Les paramètres seront à renseigner à l’exécution de la transaction.

− Attention !!
> pas de contrôle de cohérence des données
> pas de contrôle de la valeur pour un champ de type menu local

Développement>Dictionnaire traitements>Transaction de mise à jours


Copyright © Sage 2010 Sage X3 Language 80

Transaction système :
paramétrage reste permanent
création, modification ou suppression
mise à jour d’un ou plusieurs champs d’une ou plusieurs tables
possibilité de saisir des paramètres
possibilité de filtrer des enregistrements
Trace :
pour chaque enregistrement modifié, un enregistrement est créé dans la table AESPION
trace sur table, clé, nature intervention, utilisateur, date, heure, fonction d’origine (GESAMI)
trace également dans le fichier espion.tra sous le répertoire tmp

Utilisation des paramètres :


la valeur des paramètres est stockée dans les variables V1 à V6 en fonction de l’ordre de déclaration
dans le tableau des paramètres on peut définir jusqu’à 6 paramètres

Sélections :
constitution d’un filtre de sélection des enregistrements à traiter

Mise à jour :
liste des champs à modifier
ces champs peuvent appartenir aux tables liées

Copyright © Sage 2009-2010 Page 71


SAFE X3 LANGUAGE

Cas de création d’enregistrement


a manipuler avec précaution c’est en fait une duplication d’un enregistrement

mise à jour :
une ligne de création sur le champ clé, par enregistrement à créer
on ne peut pas modifier certains champs dans cette même transaction

sélection :
pour sélectionner l’enregistrement à dupliquer

variables :
si utilisée pour alimenter la clé, elle ne doit pas être un type de donnée lié à l’objet

Outils / Utilitaires
TRACE ORACLE ou SQL-SERVEUR

accès via :
menu ? / Aide au diagnostic / activation trace oracle
menu ? / Aide au diagnostic / désactivation trace oracle

menu ? / Aide au diagnostic / activation trace sql-serveur


menu ? / Aide au diagnostic / désactivation trace sql-
serveur

Activation trace :
Lance le processus d’analyse

Désactivation trace :
arrête le processus et affiche la trace

Vérifier, par exemple, qu’il n’y a pas :


FULL SCAN TABLE
FULL SCAN INDEX

Copyright © Sage 2010 Sage X3 Language 81

Copyright © Sage 2009-2010 Page 72


SAFE X3 LANGUAGE

Outils / Utilitaires

> Timer
− Permet l’affichage d’une trace d’exécution d’un traitement avec le
nombre d’appels des routines, le temps d’exécution pour tous les
appels et la pourcentage par rapport au temps total.

− Accès dans une fonction via :


> menu ? / Aide au diagnostic / activation timing
> menu ? / Aide au diagnostic / lecture timing

− activation timing :
> ouvre la trace
> possibilité de choisir l’emplacement et le nom de la trace
> possibilité de tracer ou pas les Gosub

− lecture timing :
> arrête la trace et l’affiche à l’écran

Copyright © Sage 2010 Sage X3 Language 82

Outils / Utilitaires

> IDE Eclipse


− Permet avec l’installation d’un plug-in X3 d’écrire des traitements X3.

− Amélioration par rapport à l’éditeur de traitement X3 :


> Auto-complétion
> Coloration syntaxique
> Utilisation de Template
> Possibilité d’ajouter différents composant pour l’aide au
développement, un SVN par exemple.
> Possibilité de générer de la documentation à partir des
traitements.

Copyright © Sage 2010 Sage X3 Language 83

Copyright © Sage 2009-2010 Page 73


SAFE X3 LANGUAGE

Outils / Utilitaires

Eclipse IDE

Installation:
Télécharger Eclipse sur le site de sun : http://www.eclipse.org/downloads/
Téléchargez la JVM : http://java.sun.com/javase/downloads/index.jsp
Téléchargez le plugin X3 : http://pluginx3.sage.fr/safex3/studio/update/
Puis installez le plugin : menu « help>Install new software… »

Création d’un projet


Paramétrage :
– Folder (ex: DEMO)
– Hostname (ex: myserver)
– Port (ex: 16000)
– X3 User et X3 Password
– Language (ex: FRA, ENG, ...)
– User et Password (authentification OS)

Insertion de traitement par la fonction « File>Open SAFE X3 Source file »

Copyright © Sage 2009-2010 Page 74


SAFE X3 LANGUAGE

Copyright © Sage 2009-2010 Page 75