Sie sind auf Seite 1von 75
Safe X3 Support de formation Language Version 6
Safe X3 Support de formation Language Version 6
Safe X3
Support de formation
Language
Version 6
S AFE X3 L ANGUAGE

SAFE X3 LANGUAGE

S AFE X3 L ANGUAGE Copyright © Sage 2009-2010 Page 2
S AFE X3 L ANGUAGE Copyright © Sage 2009-2010 Page 2
S AFE X3 L ANGUAGE

SAFE X3 LANGUAGE

SOMMAIRE

SOMMAIRE

1. LES VARIABLES

2. FONCTIONS

LES

3. VARIABLES SYSTEME

4.

5. LES INSTRUCTIONS

6. MESSAGE D’ERREUR OU D’AVERTISSEMENT

7. GESTION DES TRACES

8. OPTIMISATION DES REQUETES

9. OUTILS / UTILITAIRES

LES

ECLIPSE IDE

3

4

18

22

25

29

57

59

61

63

DES REQUETES 9. OUTILS / UTILITAIRES LES ECLIPSE IDE 3 4 18 22 25 29 57
DES REQUETES 9. OUTILS / UTILITAIRES LES ECLIPSE IDE 3 4 18 22 25 29 57
S AFE X3 L ANGUAGE

SAFE X3 LANGUAGE

1. LES VARIABLES

Les variables

S AFE X3 L ANGUAGE 1. L ES VARIABLES Les variables DECLARATION DE VARIABLES Syntaxe Etendue

DECLARATION DE VARIABLES

Syntaxe Etendue Type interne Nom de variable Dimension (si nécessaire) Global Integer variable_name (nb )
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
possibles Local Mask Masque_name occurences possibles LES VARIABLES DECLAREES SONT AUTOMATIQUEMENT INITIALISEES.

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 Valeurs possibles pour libellé : 0 à 255

+32 767

pour shortint : -32 768 Valeurs possibles pour libellé : 0 à 255 +32 767 Copyright
pour shortint : -32 768 Valeurs possibles pour libellé : 0 à 255 +32 767 Copyright
S AFE X3 L ANGUAGE

SAFE X3 LANGUAGE

Les variables

S AFE X3 L ANGUAGE Les variables DECLARATION DE VARIABLES Etendue des variables Etendue Type interne

DECLARATION DE VARIABLES

Etendue des variables Etendue Type interne Pérennité Global Integer toute la session Local Integer traitement
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
Mask
traitement courant
étiquettes (appelées par Gosub)
sous-programmes (appelés par Call)
Copyright © Sage 2010
Sage X3 Language
4

Les variables (Les classes)

Sage 2010 Sage X3 Language 4 Les variables (Les classes) Syntaxe Commentaires Champ de table (classe
Syntaxe Commentaires Champ de table (classe [F], File) [F:ABR]CHAMP [Ind] ABR = Abréviation Ind =
Syntaxe
Commentaires
Champ de table
(classe [F], File)
[F:ABR]CHAMP [Ind]
ABR = Abréviation
Ind = Indice pour
champ dimensionné
La table doit avoir été ouverte avec
l'abréviation ABR.
( ex. [F:BPC]BPCNUM )
Champ d'écran
(classe [M], Mask)
[M:ABR]CHAMP[Ind]
ABR = Abréviation
Ind = Indice pour
champ dimensionné
Le masque doit avoir été ouvert
avec l'abréviation ABR.
( ex. [M:BPC0]BPCNUM )
Variable locale
[L]VAR
VAR = Nom variable
(classe [L])
Variables globales
[V]VAR
VAR = Nom variable
(classe [V])
Le nom commence généralement
par G (ex. GNBGAUCHE, GUSER).
Compteurs
[C]CPT
CPT = Nom compteur
Stockés dans la table APLCOM .
(classe [C])
Champ technique de table
(classe [G], File)
[G:ABR]CHAMP
ABR = Abréviation
Champs techniques pour chaque
tables ouvertes.
Variables Système
[S]var
var = Nom variable
(classe [S])
Langage Sage X3
Nom en minuscules. Ces variables
sont des mots-clés du langage.
(ex. adxmother, mkstat).
Copyright © Sage 2010
Sage X3 Language
5
du langage. (ex. adxmother, mkstat). Copyright © Sage 2010 Sage X3 Language 5 Copyright © Sage
du langage. (ex. adxmother, mkstat). Copyright © Sage 2010 Sage X3 Language 5 Copyright © Sage
S AFE X3 L ANGUAGE

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 :

: Classe [C] : Les compteurs − Cette classe permet : > La déclaration de compteurs

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

[C] Variables pouvant être dimensionnée. 99 maxi. Stockée dans la table APLCOM. Copyright © Sage 2009-2010
[C] Variables pouvant être dimensionnée. 99 maxi. Stockée dans la table APLCOM. Copyright © Sage 2009-2010
S AFE X3 L ANGUAGE

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

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

> 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

Keyname nom pour chaque clé Keyuniq 1 sans homonyme; 0 avec homonyme Copyright © Sage 2009-2010
Keyname nom pour chaque clé Keyuniq 1 sans homonyme; 0 avec homonyme Copyright © Sage 2009-2010
S AFE X3 L ANGUAGE

SAFE X3 LANGUAGE

Nbind

nb de clés

Nbzon

nb de champs

Tairec

taille enregistrement en nombre d’octets

Les variables

taille enregistrement en nombre d’octets Les variables DECLARATION DE VARIABLES Classe [L] & [V] :

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

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 :

Char : " "

[0/0/0]

8

initialisée Integer, shortint, decimal : 0 Date : Char : " " [0/0/0] 8 Copyright ©
initialisée Integer, shortint, decimal : 0 Date : Char : " " [0/0/0] 8 Copyright ©
S AFE X3 L ANGUAGE

SAFE X3 LANGUAGE

Les variables

S AFE X3 L ANGUAGE Les variables ALIMENTATION DE VARIABLES Opérations sur les numériques : #

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 num1 -= num2 num1 *= num2 num1 /= num2

ajout de num2 à num1 retrait de num2 à num1 num1 est multiplié par num2. le résultat est dans num1 num1 est divisé par num2. le résultat est dans num1

le résultat est dans num1 num1 est divisé par num2. le résultat est dans num1 Copyright
le résultat est dans num1 num1 est divisé par num2. le résultat est dans num1 Copyright
S AFE X3 L ANGUAGE

SAFE X3 LANGUAGE

Les variables

S AFE X3 L ANGUAGE Les variables ALIMENTATION DE VARIABLES Opérations sur les dates : •

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

Opérations sur date

Date – Date

Date +/- nombre donne une date

donne un nombre de jours

Sage X3 Language

10

une date donne un nombre de jours S a g e X 3 L a n
une date donne un nombre de jours S a g e X 3 L a n
S AFE X3 L ANGUAGE

SAFE X3 LANGUAGE

Les variables

S AFE X3 L ANGUAGE Les variables PARTICULARITE DU TRANSCLASSE Le trans-classe permet l’alimentation de chaque

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

TABLE [F:TAB1] TABLE1 [F:TAB1]
TABLE [F:TAB1]
TABLE1 [F:TAB1]
MASK1 [M:ABV1] Copyright © Sage 2010
MASK1 [M:ABV1]
Copyright © Sage 2010

[M:ABV1] = [F:TAB1]

[F:TAB1] = [M:ABV1]

[F:TAB2] = [F:TAB1]

[F:TAB1] = [F:TAB2]

[M:ABV2] = [M:ABV1]

[M:ABV1] = [M:ABV2]

Sage X3 Language

MASK [M:ABV1]
MASK [M:ABV1]
TABLE2 [F:TAB2] MASK2 [M:ABV2]
TABLE2 [F:TAB2]
MASK2 [M:ABV2]

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]

[F] vers une autre classe [F] • D’une classe [M] vers une autre classe [M] Copyright
[F] vers une autre classe [F] • D’une classe [M] vers une autre classe [M] Copyright
S AFE X3 L ANGUAGE

SAFE X3 LANGUAGE

Les variables

S AFE X3 L ANGUAGE Les variables PARTICULARITE DU TRANSCLASSE • Exemple : Local File BPARTNER

PARTICULARITE DU TRANSCLASSE

Exemple :

Local File BPARTNER [BPR]

Read [F:BPR]BPR0 first

If

[S]fstat = 0

# Ouverture de la table BPARTNER

# Lecture du premier enregistrement de la table # 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

poste par poste Le trans-classe mouvemente tous les postes des champs dimensionnés Copyright © Sage 2009-2010
poste par poste Le trans-classe mouvemente tous les postes des champs dimensionnés Copyright © Sage 2009-2010
S AFE X3 L ANGUAGE

SAFE X3 LANGUAGE

Les variables

S AFE X3 L ANGUAGE Les variables PARTICULARITE DU TRANSCLASSE AVANTAGES : En modifiant une table

PARTICULARITE DU TRANSCLASSE

AVANTAGES :X3 L ANGUAGE Les variables PARTICULARITE DU TRANSCLASSE En modifiant une table ou une structure de

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 :alimenté sans test préalable de présence du champ. En plus du trans-classe, faire une alimentation champ

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.

L a n g u a g e 13 Le trans-classe est à favoriser surtout pour
L a n g u a g e 13 Le trans-classe est à favoriser surtout pour
S AFE X3 L ANGUAGE

SAFE X3 LANGUAGE

Les variables

> Bloc tableau d’un écran

L ANGUAGE Les variables > Bloc tableau d’un écran − Les lignes présents sur le bloc

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

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

Indice

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

14

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.

de connaître son nom quand on a le « focus » sur le tableau sans être
de connaître son nom quand on a le « focus » sur le tableau sans être
S AFE X3 L ANGUAGE

SAFE X3 LANGUAGE

Les variables

S AFE X3 L ANGUAGE Les variables Bloc tableau d’un écran • Exemple : #--- Lecture

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

Next

[S]nolign += 1

[M:BPC4]

trans-classe ligne par ligne

complément de mise à jour

= [F:BPD]

[M:BPC4]BPDNAM0(nolign-1) = [F:BPD]BPDNAM(0) [M:BPC4]BPDNAM1(nolign-1) = [F:BPD]BPDNAM(1)

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 test présence des champs désactivables

endif test présence des champs désactivables [M:BPC4]NBDLV =nolign v a r i a b l e

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

• nécessité de tester la présence d’un champ soumis à code activité Copyright © Sage 2009-2010
• nécessité de tester la présence d’un champ soumis à code activité Copyright © Sage 2009-2010
S AFE X3 L ANGUAGE

SAFE X3 LANGUAGE

Les variables

S AFE X3 L ANGUAGE Les variables Affecter une variable dont on construit le nom Assign

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

Les variables

Sage X3 Language

16

variables S a g e X 3 L a n g u a g e 16

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

Next Copyright © Sage 2010 S a g e X 3 L a n g u
Next Copyright © Sage 2010 S a g e X 3 L a n g u
S AFE X3 L ANGUAGE

SAFE X3 LANGUAGE

Les variables

S AFE X3 L ANGUAGE Les variables BLOB & CLOB • Exemple : # Déclaration d'une

BLOB & CLOB

Exemple :

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

# Déclaration d'une variable 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

clob

de

longueur 3

(

Local Clbfile WWCLOB( 3 ) (0

1)

4094

caractères maximum )

# Affectation d’un clob par un autre clobclob [M:XXX]CLOB = [F:XXX]CLOB [M:XXX] = [F:XXX]

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

trans-classe fonctionne pour les Clobs & Blobs
trans-classe fonctionne pour les Clobs & Blobs

trans-classe fonctionne pour les Clobs & Blobs

trans-classe fonctionne pour les Clobs & Blobs

Copyright © Sage 2010

Sage X3 Language

18

Blob et Clob :

On

Pour tester la présence d’un clob ou d’un blob, utiliser : LEN(champ_blob) > 0

ou

peut

passer

un

blob

un

clob

en

argument

d’un

sous-programme.

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

• On peut utiliser toute instruction dédiée aux chaînes pour les clobs Copyright © Sage 2009-2010
• On peut utiliser toute instruction dédiée aux chaînes pour les clobs Copyright © Sage 2009-2010
S AFE X3 L ANGUAGE

SAFE X3 LANGUAGE

2. LES FONCTIONS

Les fonctions

S AFE X3 L ANGUAGE 2. L ES FONCTIONS Les fonctions LES CHAINES DE CARACTERES left$

LES CHAINES DE CARACTERES

left$ ( chaîne, inb ) right$ ( chaîne, ipos ) mid$ ( chaîne, ipos, inb )

seg$ ( chaîne, ideb, ifin ) len ( chaîne ) val ( chaîne ) num$ ( nombre )

tolower ( chaîne )

toupper ( chaîne ) ctrans ( chaîne [, ci, co ] ) vireblc ( chaîne, ioption ) format$ ( cfmt, chaîne )

pat ( chaîne, cmodèle ) « Matching » de chaîne avec le modèle cmodèle

instr ( ipos, chaîne, cssch )

space$ ( inb ) Génère une chaîne constituée de inb blancs

string$ ( inb, chaîne ) ascii ( chaîne ) chr$ ( iascii ) parse ( chaîne [, btoken] ) evalue ( chaîne [,btoken] ) getenv$ ( chaîne )

Extrait les inb premiers caractères de chaîne Extrait les caractères de chaîne à partir de ipos Extrait les inb caractères de chaîne à partir de ipos Extrait la sous-chaîne comprise entre ideb et ifin Longueur de la chaîne Conversion d’une chaîne en numérique Convertit un nombre en chaîne Convertit une chaîne en minuscules Convertit une chaîne en majuscules Filtre les caractères de chaîne Supprime les blancs dans une chaîne Formatage de chaîne avec cfmt

Recherche cssch dans chaîne à partir de ipos

Génère inb fois chaîne Code ASCII du premier caractère de chaîne Retourne le caractère dont le code ASCII est iascii Analyse syntaxique de chaîne ( <> 0 si erreur ) Evaluation de l’expression contenue dans 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

utilisées left$, right$, mid$, num$, vireblc, format$, string$, evalue Copyright © Sage 2009-2010 Page 18
utilisées left$, right$, mid$, num$, vireblc, format$, string$, evalue Copyright © Sage 2009-2010 Page 18
S AFE X3 L ANGUAGE

SAFE X3 LANGUAGE

Les fonctions

S AFE X3 L ANGUAGE Les fonctions LES DATES date$ time$ time day ( date )

LES DATES

date$ time$ time day ( date ) day$ ( date ) month ( date ) month$ ( date ) year ( date ) gdat$ ( ijour, imois, iannée ) nday ( date ) nday$ ( inbjour ) dayn ( date ) week ( date ) aweek ( isemaine, iannée ) eomonth ( date ) addmonth ( date, inb )

format$

Copyright © Sage 2010

Retourne la date du jour (Serveur) Retourne l’heure courante sous la forme HH:MM :SS Heure courante en secondes Extrait le jour d’une date Retourne le nom du jour d’une date Extrait le mois d’une date Retourne le nom du mois d’une date Extrait l’année d’une date Retourne la date correspondant à [ijour/imois/iannée] Retourne le nombre de jours depuis le 1/1/1600 de date Convertit un nbre de jours depuis le 1/1/1600 en date Retourne le numéro de jour dans la semaine de date Retourne le numéro de semaine d’une date Date du début de la semaine numéro isemaine de iannée Retourne la date de la fin du mois d’une date Ajoute inb mois à une date

Mise en forme d’une date

Sage X3 Language

21

Fonctions fréquemment utilisées date$, day, month, year, eomonth, addmonth, format$

fréquemment utilisées date$, day, month, year, eo month, addmonth, format$ Copyright © Sage 2009-2010 Page 19
fréquemment utilisées date$, day, month, year, eo month, addmonth, format$ Copyright © Sage 2009-2010 Page 19
S AFE X3 L ANGUAGE

SAFE X3 LANGUAGE

Les fonctions

S AFE X3 L ANGUAGE Les fonctions LES EXPRESSIONS NUMERIQUES abs ( nombre ) Valeur absolue

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 ) ar2 ( nombre ) arr ( nombre, nprec ) fix ( nombre ) int ( nombre ) fac ( ientier ) anp ( in, ip ) cnp ( in, ip )

[N] Racine carrée Arrondi de nombre à 2 décimales Arrondi de nombre à nprec près Troncature d’un nombre Partie entière d’un nombre Factorielle Arrangements de ip dans in Combinaisons de ip dans in

Format$

Copyright © Sage 2010

Les fonctions

Mise en forme d’un nombre

Sage X3 Language

22

nombre S a g e X 3 L a n g u a g e 22

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

Copyright © Sage 2010

Variable de boucle par défaut de sigma()

Sage X3 Language

23

de boucle par défaut de sigma() S a g e X 3 L a n g
de boucle par défaut de sigma() S a g e X 3 L a n g
S AFE X3 L ANGUAGE

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

sum Sum : Sum ( nomvar ) pour une variable dimensionnée, somme de tous les postes
sum Sum : Sum ( nomvar ) pour une variable dimensionnée, somme de tous les postes
S AFE X3 L ANGUAGE

SAFE X3 LANGUAGE

3. LES VARIABLES SYSTÈME

Les Variables système

L ANGUAGE 3. L ES VARIABLES SYSTÈME Les Variables système TABLE adxdlrec nombre d’enregistrements effacés par

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

adxirs

adxium

Copyright © Sage 2010

séparateur de champs

séparateur d’enregistrements

type de codage

Sage X3 Language

fstat :

0 ok

1 enregistrement verrouillé 2 à 5 erreur

adxium :

50

ASCII

122

UCS2

autre UTF8

25

verrouillé 2 à 5 erreur adxium : 50 ASCII 122 UCS2 autre UTF8 25 Copyright ©
verrouillé 2 à 5 erreur adxium : 50 ASCII 122 UCS2 autre UTF8 25 Copyright ©
S AFE X3 L ANGUAGE

SAFE X3 LANGUAGE

Les Variables système

S AFE X3 L ANGUAGE Les Variables système EN SAISIE pcolor couleur d’affichage du texte dans

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.

Contrairement à date$ qui donne la dat e du jour délivrée par le serveur. Copyright ©
Contrairement à date$ qui donne la dat e du jour délivrée par le serveur. Copyright ©
S AFE X3 L ANGUAGE

SAFE X3 LANGUAGE

Les Variables système

S AFE X3 L ANGUAGE Les Variables système APPLICATION nomap application courante adxmother application mère

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

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 tenant compte de l’ordre hiérarchique, jusqu’à ce qu’il trouve. [S]adxmother(i) = [S]nomap(i+1)

, ce dernier est recherché en fonction de la

7) en

= [S]nomap(i+1) , ce dernier est rech erché en fonction de la 7) en Copyright ©
= [S]nomap(i+1) , ce dernier est rech erché en fonction de la 7) en Copyright ©
S AFE X3 L ANGUAGE

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 :

Direct = pas de proxy

Native = informations fournies par le système

»

Ne fonctionne pas toujours suivant les proxys

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 :

« Add

»

Name

SAFE X3 Studio Update Site 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 »

Work with

Sélectionnez « SAFE X3 Studio Update Site » Cochez « SAFE X3 Studio for Eclipse »

« SAFE X3 Studio Update Site » Cochez « SAFE X3 Studio for Eclipse » ⎝
« SAFE X3 Studio Update Site » Cochez « SAFE X3 Studio for Eclipse » ⎝
S AFE X3 L ANGUAGE

SAFE X3 LANGUAGE

Cliquez sur « Next > », « Next > »

Acceptez les termes de la licence

Cliquez sur« Finish »

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 ».

Interroge tous les sites référencés pour vérifier si des mises à jour sont disponibles.

Revoir la sélection si vous le souhaitez.

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

»

Sélectionner « SAFE X3 Project »

« Next > »

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

»

Sélectionner dans la liste

Filtrer la liste

Saisir directement le nom d’un traitement

Il est aussi possible d’organiser votre projet des dossiers

Clic droit sur un projet, puis « New | Folder »

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

(Ctrl + Espace) sur les mots clés, les variables globales, les variables systèmes Copyright © Sage
(Ctrl + Espace) sur les mots clés, les variables globales, les variables systèmes Copyright © Sage
S AFE X3 L ANGUAGE

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

Personnaliser sa façon de travailler

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 !

Ne pas utiliser le « rename » de fichiers

»

N’est pas répercuté sur le serveur

Suppression d’un fichier du projet

»

Ne supprime pas le fichier sur le serveur

Veiller à désactiver « Build Automatically »

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 :

Serveur

» Le traitement AXDTMAIN doit être présent dans le dossier de référence.

» Ideclient.jar dans

/X3_PUB/X3_ROOT/X3CLI

Eclipse (poste client)

» Java 1.6

Ideclient.jar dans /X3_PUB/X3_ROOT/X3CLI Eclipse (poste client) » Java 1.6 Copyright © Sage 2009-2010 Page 27
Ideclient.jar dans /X3_PUB/X3_ROOT/X3CLI Eclipse (poste client) » Java 1.6 Copyright © Sage 2009-2010 Page 27
S AFE X3 L ANGUAGE

SAFE X3 LANGUAGE

Client X3 (poste client)

Configuration Menu « Outils | Options » Utilisateur X3

»

»

Paramètre AECLIPSE à Oui

Active les interactions avec Eclipse

Chapitre « superviseur »

Groupe « DEV »

Eclipse

»

3.5 SR1 recommandé (Eclipse Platform 3.5.1)

Plugin SAFE X3 Studio version 1.0.2.200911161752 mini En autonome pour accès au serveur

»

»

Moteur >= 15r.120

Lancement Eclipse depuis Client X3

» Moteur >= 16r.114

» CLI.104 mini

Exécution d’un traitement depuis Eclipse

» Moteur >= 16r.115

» Superviseur >=16.002

» CLI.105 mini

Eclipse V5

»

Compilation sur X3 du traitement AXDTMAIN

Mode debug et affichage des logs

»

eclipse -debug -consoleLog

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 »

de la JVM • Plugins • • Voir le contenu de « Error Log » Copyright
de la JVM • Plugins • • Voir le contenu de « Error Log » Copyright
S AFE X3 L ANGUAGE

SAFE X3 LANGUAGE

5. LES INSTRUCTIONS

Les instructions

S AFE X3 L ANGUAGE 5. L ES INSTRUCTIONS Les instructions TABLES Classe [F] : ouverture

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

Close

[ Local ]

File

[ <liste_classe> ]

Fermeture de tables ouvertes par File

Classe [F] par défaut : 1 ère table du dernier Local File
Classe [F] par défaut :
1 ère table du dernier Local 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.

retourne 1 si la classe est accessible. • retourne 0 si elle ne l’est pas. Copyright
retourne 1 si la classe est accessible. • retourne 0 si elle ne l’est pas. Copyright
S AFE X3 L ANGUAGE

SAFE X3 LANGUAGE

Les instructions

S AFE X3 L ANGUAGE Les instructions TABLES Etendue de la Classe [F] • Exemples :

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

• clalev([F:xxx])=0 indique que la table d’abréviation xxx n’est pas ouverte Copyright © Sage 2009-2010 Page
• clalev([F:xxx])=0 indique que la table d’abréviation xxx n’est pas ouverte Copyright © Sage 2009-2010 Page
S AFE X3 L ANGUAGE

SAFE X3 LANGUAGE

Les instructions

S AFE X3 L ANGUAGE Les instructions TABLES Jointure de tables Link <classe> With <classe>

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)

dépassant 255 colonne s provoque une erreur en version DB2 (attention au link) Copyright © Sage
dépassant 255 colonne s provoque une erreur en version DB2 (attention au link) Copyright © Sage
S AFE X3 L ANGUAGE

SAFE X3 LANGUAGE

Les instructions

S AFE X3 L ANGUAGE Les instructions ACCES A LA BASE DE DONNEES Instruction READ Read

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.

dans chaque fichier lié selon la clé et le mode de lecture donnés dans Link. Copyright
dans chaque fichier lié selon la clé et le mode de lecture donnés dans Link. Copyright
S AFE X3 L ANGUAGE

SAFE X3 LANGUAGE

Les instructions

S AFE X3 L ANGUAGE Les instructions ACCES A LA BASE DE DONNEES Instruction FOR-NEXT For

ACCES A LA BASE DE DONNEES

Instruction FOR-NEXT

For

<classe> [ <idf_clé> [ ( <exp_int> ) ] ] [ & Where <condition> ] [ & With Lock | With Stability ]

[ From <exp_clé>

To <exp_clé> ]

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

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)

With Lock" ( ne pas utiliser )

une erreur en version DB2 (attention au link) With Lock" ( ne pas utiliser ) Copyright
une erreur en version DB2 (attention au link) With Lock" ( ne pas utiliser ) Copyright
S AFE X3 L ANGUAGE

SAFE X3 LANGUAGE

Les instructions

S AFE X3 L ANGUAGE Les instructions ACCES A LA BASE DE DONNEES Instruction FOR-NEXT Possibilité

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

Next

Next

prendre en compte For [SOP]SOP0(1) For [SOP]SOP0 Next Next Copyright © Sage 2010 Les instructions Rupture

Copyright © Sage 2010

Les instructions

Rupture sur le 1 er champ de clé
Rupture sur le 1 er champ de clé

Sage X3 Language

34

de clé S a g e X 3 L a n g u a g e

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 2010 S a g e X 3 L a n g u a
Copyright © Sage 2010 S a g e X 3 L a n g u a
S AFE X3 L ANGUAGE

SAFE X3 LANGUAGE

Les instructions

S AFE X3 L ANGUAGE Les instructions ACCES A LA BASE DE DONNEES Restrictions Filter <classe>

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>

le filtre pour la table d’abréviation <classe> Attention : Ne pas oublier de dé-positionner le filtre.

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

Copyright © Sage 2010

Sage X3 Language

Filter :

36

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

toujours actif en retour dans le programme appelant (pas de niveau de localité) Copyright © Sage
toujours actif en retour dans le programme appelant (pas de niveau de localité) Copyright © Sage
S AFE X3 L ANGUAGE

SAFE X3 LANGUAGE

Les instructions

S AFE X3 L ANGUAGE Les instructions MISE A JOUR DE LA BASE DE DONNEES Instruction

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] Trbegin [TEST] Write [TEST] If [S]fstat Rollback Else Commit

Copyright © Sage 2010

:# trans-classe ( alimentation de la classe [F] ) :# début de la transaction :# écriture sur fichier :# en cas de problème quelconque :# la transaction est annulée

:# sinon elle est validée

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.

• [S]fstat indique comment s’est passée l’opération sur la table. Copyright © Sage 2009-2010 Page 36
• [S]fstat indique comment s’est passée l’opération sur la table. Copyright © Sage 2009-2010 Page 36
S AFE X3 L ANGUAGE

SAFE X3 LANGUAGE

Les instructions

Les instructions MISE A JOUR DE LA BASE DE DONNEES Instruction REWRITE Rewrite [ <classe> ]

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

d'une transaction. • Conseil : verrouiller l’enregi strement par ReadLock Copyright © Sage 2009-2010 Page 37
d'une transaction. • Conseil : verrouiller l’enregi strement par ReadLock Copyright © Sage 2009-2010 Page 37
S AFE X3 L ANGUAGE

SAFE X3 LANGUAGE

Les instructions

S AFE X3 L ANGUAGE Les instructions MISE A JOUR DE LA BASE DE DONNEES Instruction

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

Update :

réécrire des enregistrements d’une table avec les valeurs passées en paramètre

réduire les

La

clause Where permet de

enregistrements

à traiter

(important

performances)

39

pour

les

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)

par Update. • Donc à utiliser sur un petit nom bre d’enregistrement (MODIF) Copyright © Sage
par Update. • Donc à utiliser sur un petit nom bre d’enregistrement (MODIF) Copyright © Sage
S AFE X3 L ANGUAGE

SAFE X3 LANGUAGE

Les instructions

S AFE X3 L ANGUAGE Les instructions MISE A JOUR DE LA BASE DE DONNEES Instruction

MISE A JOUR DE LA BASE DE DONNEES

Instruction DELETE

Delete

Delete

Exemple :

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

[ <classe> ] [ <idf_clé> ] [ ( <exp_int> ) ]

[ Where

{<condition>} ]

Suppression des enregistrements sélectionnés

# 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

Delete :

Sage X3 Language

40

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)

le Delete arrête sa suppression et envoie un

Par contre, en inter-blocage ou syntaxe 2,

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.

pour les performances) • La clause Where disparaît dès la fin du Delete. Copyright © Sage
pour les performances) • La clause Where disparaît dès la fin du Delete. Copyright © Sage
S AFE X3 L ANGUAGE

SAFE X3 LANGUAGE

Les instructions

S AFE X3 L ANGUAGE Les instructions VERROUILLAGE, DEVEROUILLAGE Blocage logique Lock { <liste_symb> | =

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

Exemple :

Temps d’attente pour verrouillage :

< 0

0

> 0

Attente infinie jusqu’à libération

Pas d’attente, un seul essai Nombre de secondes d’attente

# 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

blocage logique exemple en livraison automatique des commandes.

41

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 locks symbole est délivré par la variable [S]Adxtlk . ( a ne pas modifier )
les locks symbole est délivré par la variable [S]Adxtlk . ( a ne pas modifier )
S AFE X3 L ANGUAGE

SAFE X3 LANGUAGE

Les instructions

S AFE X3 L ANGUAGE Les instructions VERROUILLAGE, DEVEROUILLAGE Blocage physique Lock <list_classe> [ With

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

Blocage physique :

Sage X3 Language

42

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.

un enregistrement de cette table a déjà été verrouillé depuis un autre poste. Copyright © Sage
un enregistrement de cette table a déjà été verrouillé depuis un autre poste. Copyright © Sage
S AFE X3 L ANGUAGE

SAFE X3 LANGUAGE

Les instructions

S AFE X3 L ANGUAGE Les instructions LES TRANSACTIONS Instruction TRBEGIN Trbegin <idf>[<classe>] |

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

Trbegin :

Sage X3 Language

43

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

transaction • Enlève les locks symbole posés pendant la transaction uniquement Copyright © Sage 2009-2010 Page
transaction • Enlève les locks symbole posés pendant la transaction uniquement Copyright © Sage 2009-2010 Page
S AFE X3 L ANGUAGE

SAFE X3 LANGUAGE

Les instructions

S AFE X3 L ANGUAGE Les instructions LES TRANSACTIONS • Exemple : Call DEBTRANS From GLOCK

LES TRANSACTIONS

Exemple :

Call DEBTRANS From GLOCK

$TRT1

[V]GOK=1

• Exemple : Call DEBTRANS From GLOCK $TRT1 [V]GOK=1 enregistrement verrouillé erreur en lecture (verrouillé)

enregistrement verrouillé

erreur en lecture (verrouillé)