Support de formation
Language
Version 6
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
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
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.
Les variables
DECLARATION DE VARIABLES
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).
Copyright © Sage 2010 Sage X3 Language 5
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
− Exemple :
> EXPORT, numéro de compteur incrémenté à chaque export
depuis un modèle. Permet les exports différentiels.
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.
Les variables
− Exemple :
> Le champ adxfname contient les champ de la table appelée,
[G:BPR]adxfname contient donc BPRNUM,BPRNAM…
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
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 :
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)
Les variables
ALIMENTATION DE VARIABLES
Opérations sur les numériques :
• Exemples :
Les variables
ALIMENTATION DE VARIABLES
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]
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]
Les variables
PARTICULARITE DU TRANSCLASSE
• Exemple :
Remarque :
Un champ dimensionné se mouvemente poste par poste
Le trans-classe mouvemente tous les postes des champs dimensionnés
Les variables
PARTICULARITE DU TRANSCLASSE
AVANTAGES :
COMPLEMENT :
Les variables
− Exemple :
> Factures de vente, l’information [M:SIH3]QTY(0), correspond à la
quantité saisie sur la première ligne du tableau, nolign=1.
Les variables
[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
Les variables
• Exemple :
Les variables
Evalue (exp_nom)
• Exemple :
Les variables
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
2. LES FONCTIONS
Les fonctions
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
Les fonctions
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
Sum :
Sum (nomvar) pour une variable dimensionnée, somme de tous les postes
TABLE
adxdlrec nombre d’enregistrements effacés par l’instruction Delete
FICHIER SEQUENTIEL
fstat :
0 ok
1 enregistrement verrouillé
2 à 5 erreur
adxium :
50 ASCII
122 UCS2
autre UTF8
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
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.
APPLICATION
nomap application courante
RESSOURCES
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)
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.
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)
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
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
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
» 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
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
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
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 ] ]
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.
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
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
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
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)
Les instructions
Instruction READ
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 :
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.
Les instructions
permet de faire des boucles de lecture sur une table selon une clé donnée
Exemple :
Les instructions
Instruction FOR-NEXT
Exemple :
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'.
Copyright © Sage 2010 Sage X3 Language 35
Les instructions
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 :
• 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é)
Les instructions
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
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.
Les instructions
Réécriture d’un enregistrement avec les valeurs contenues dans la classe [F].
Exemple :
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
Les instructions
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 :
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)
Les instructions
Exemple :
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.
Les instructions
VERROUILLAGE, DEVEROUILLAGE
Blocage logique
Lock { <liste_symb> | = <exp_char> } [ With Lockwait = <exp_int> ]
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 )
Les instructions
VERROUILLAGE, DEVEROUILLAGE
Blocage physique
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.
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
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.
Les instructions
LES TRANSACTIONS
• Exemple :
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.
Les instructions
LES TRANSACTIONS
• suite :
# procédure d’abandon
$AB_TRT1
Rollback
Call ECR_TRACE(mess(17,107,1),1) From GESECRAN
Return
sous-programme ROLL
Ce sous-programme appelé après le rollback permet de demander à l’utilisateur, s’il veut une nouvelle
tentative.
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
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 ‘,’
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)
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)
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 <> ""
Remarque :
Le traitement réalisé dans cette boucle ne doit pas faire de lecture de table (succession de read)
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
Exemple
Gosub ACTION FROM SUBXXX # traitement SUBXXX
$ACTION
Case ACTION
When "EXEC"
Gosub EXEC
Endcase
Return
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
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
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.
• 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.
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é
Exemple
Funprog CHAR_(CLOB)
# récupérer un clob dans un chaîne de 255
caractères Value Clbfile CLOB
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
Les instructions
ECRANS
Instruction CLALEV
clalev (<classe>)
Exemple :
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.
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
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.
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
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.
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 :
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
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
Afficher un message
Lecture de la trace
TRA=1
Call LEC_TRACE from LECFIC
Ecriture :
1er paramètre : message à afficher
2ème paramètre : type message ( 0 informatif, 1 erreur ) 9 pour le vert, avertissement
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 :
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 :
Impressions>Lecture traces
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.
Find :
Attention ! À la limite dans la clause Where avec cette syntaxe (<>0 ou =0)
( 60 champs alpha ou 60X128 champs numériques)
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.
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 »
Organisation du traitement :
si traitement unique pour action champ et action objet alors placez les actions sur champs en fin de
traitement.
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.
Attention, n’est plus utilisé en V6, les .adx sont les exécutables
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
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
Outils / Utilitaires
> Menu « Outils>Options… » de la page de démarrage.
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
Tabulation :
Permet une tabulation de n caractères
Shift+Tab permet d’enlever une tabulation ( il faut avoir sélectionner la ligne entière )
Outils / Utilitaires
> Debugger : lancement
Outils / Utilitaires
> Debugger : Utilisation
− 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
Outils / Utilitaires
> Debugger : Détail
• 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
• Il faut passer par une trace ou par l'instruction infbox selon les cas.
Outils / Utilitaires
> 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
Outils / Utilitaires
> Maintenance en lignes Développement>Utilitaires>Maintenances>En lignes
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
− 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
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
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
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
Activation trace :
Lance le processus d’analyse
Désactivation trace :
arrête le processus et affiche la trace
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.
− 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
Outils / Utilitaires
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… »