Guide complet du langage de script Sage X3
Maîtrisez le développement et la personnalisation avec le langage 4GL de Sage X3

Fondamentaux du langage de script Sage X3
Le langage de script Sage X3 est un langage 4GL propriétaire développé spécifiquement pour l'ERP Sage X3. Ce langage présente des similitudes notables avec C++, offrant aux développeurs une syntaxe familière tout en conservant ses spécificités métier.
Contrairement aux langages généralistes, ce langage propriétaire de Sage est optimisé pour les opérations de gestion d'entreprise et l'intégration avec les modules Sage X3. Il permet de créer des packages et des scripts personnalisés adaptés aux besoins spécifiques de chaque organisation.
L'environnement de développement principal est Eclipse, qui offre des fonctionnalités avancées comme le débogage, la gestion des verrous de fichiers et l'édition de code. Les développeurs peuvent également utiliser l'éditeur de script intégré pour les modifications rapides.
Une caractéristique importante du langage est sa gestion automatique de la casse : les mots-clés sont reconnus indépendamment de leur casse, et les variables sont automatiquement converties en majuscules. Cette fonctionnalité garantit une cohérence dans le code et évite les erreurs de frappe courantes.
Pour débuter, il est essentiel de configurer correctement l'accès aux dictionnaires de scripts et de comprendre la structure des dossiers X3 versus les dossiers d'application pour éviter les pertes de personnalisations lors des mises à jour.

Syntaxe et mots-clés essentiels
Le langage de script Sage X3 repose sur un ensemble de mots-clés spécifiques qui définissent sa syntaxe et ses fonctionnalités. Ces mots-clés sont reconnus indépendamment de leur casse, ce qui signifie que For, FOR ou fOr sont identiques pour l'interpréteur. Cette caractéristique impose des règles strictes de nommage pour éviter les conflits avec les mots réservés du langage.
Les variables publiques sont automatiquement converties en majuscules par l'éditeur de script. Par exemple, une variable nommée foo sera automatiquement réécrite en FOO. Cette convention garantit la cohérence du code et facilite la maintenance.
Les mots-clés du langage sont classés en plusieurs catégories selon leur statut :
- Public : mots-clés disponibles sans restriction depuis la version 6
- New : nouvelles instructions introduites en version 7
- Deprecated : mots-clés déconseillés pour le développement version 7
- Internal : réservés aux couches superviseur
Les instructions de contrôle constituent l'épine dorsale du langage. L'instruction If...Then...Else...Endif permet les tests conditionnels, tandis que les boucles For...Next et While...Wend gèrent les itérations. La syntaxe Case...When...Endcase offre une alternative élégante aux conditions multiples.
La gestion des données s'effectue principalement via les mots-clés Read, Write, Update et Delete pour les opérations de base de données. Les fichiers séquentiels utilisent Openi, Openo, Rdseq et Wrseq pour les opérations d'entrée/sortie.
Les déclarations de variables suivent une syntaxe précise : Local Integer COUNTER pour un entier local, Char CUSTOMER_NAME pour une chaîne de caractères, ou Date ORDER_DATE pour une date. Le mot-clé Global permet de déclarer des variables accessibles dans toute l'application.
La gestion des erreurs utilise l'instruction Onerrgo pour définir un point de branchement en cas d'erreur, associée à Resume pour reprendre l'exécution normale. Cette approche structurée garantit la robustesse des scripts développés.

Gestion des classes et instances
La gestion des classes et instances constitue un aspect fondamental du développement avancé en Sage X3. Cette approche orientée objet permet de créer des structures de données complexes et réutilisables.
La déclaration d'une instance s'effectue avec l'instruction Local Instance suivie du nom de l'instance et de la classe utilisée :
Local Instance MYINSTANCE Using C_CLASSNAME
Cette déclaration crée un pointeur vers une instance, initialisé par défaut avec la valeur null. La création effective de l'instance nécessite l'utilisation de l'instruction Newinstance :
MYINSTANCE=Newinstance C_CLASSNAME AllocGroup Null
Le paramètre AllocGroup permet de grouper plusieurs instances pour une gestion mémoire optimisée. Lorsque plusieurs instances partagent le même groupe d'allocation, elles peuvent être libérées simultanément.
L'accès aux propriétés d'une instance utilise la syntaxe point : INST.PROP. Cette notation supporte les propriétés imbriquées comme SALESORDER.LINE(5).DISCOUNT(3).RATE pour accéder à des collections d'objets.
La libération de la mémoire s'effectue avec FreeInstance pour une instance unique ou FreeGroup pour toutes les instances d'un groupe d'allocation. Les conventions de nommage suivent des règles strictes : les codes superviseur commencent par "A", les développements spécifiques utilisent "X", "Y" ou "Z", et les méthodes internes débutent par un underscore.
Développement de scripts personnalisés
Le développement de scripts personnalisés dans Sage X3 s'articule autour de trois types principaux de fenêtres, chacune offrant des possibilités spécifiques d'adaptation aux besoins métier. Cette approche modulaire permet une personnalisation fine des processus tout en maintenant la cohérence avec l'architecture globale du système.
Les fenêtres de type Object constituent l'épine dorsale des transactions principales de Sage X3. Ces écrans s'appuient sur des objets métier prédéfinis et bénéficient automatiquement de toute la logique applicative associée. Pour personnaliser ces fenêtres, il est essentiel de respecter les conventions de nommage établies : les codes spécifiques doivent commencer par "X", "Y" ou "Z", tandis que les codes application utilisent les lettres "B" à "V". Cette approche garantit la compatibilité avec les futures mises à jour du système.
Les fenêtres Miscellaneous offrent une liberté totale de conception et représentent le terrain d'expression privilégié pour les développements spécifiques. Ces écrans permettent d'implémenter des fonctionnalités entièrement personnalisées, comme la désactivation conditionnelle de boutons ou la création d'interfaces utilisateur adaptées aux processus métier particuliers. L'utilisation de scripts dans ces fenêtres nécessite une maîtrise approfondie du langage 4GL de Sage X3 et de ses instructions spécialisées.
La validation des données représente un cas d'usage critique dans le développement de scripts personnalisés. Par exemple, l'implémentation d'une validation de format PAN nécessite l'utilisation d'instructions conditionnelles combinées à des fonctions de manipulation de chaînes. Cette approche garantit l'intégrité des données saisies tout en fournissant un retour utilisateur approprié.
L'automatisation des processus s'appuie sur les capacités avancées du langage de script, notamment les boucles "For...Next" et les structures conditionnelles "If...Endif". Ces constructions permettent de traiter automatiquement des volumes importants de données ou d'enchaîner des opérations complexes. La gestion des erreurs via "Onerrgo" assure la robustesse de ces automatisations.
Les fenêtres Inquiry se spécialisent dans la présentation de données et nécessitent une approche particulière en termes de performance. L'utilisation judicieuse des instructions "Columns" et "Filter" permet d'optimiser les requêtes tout en maintenant une interface utilisateur réactive. Ces écrans bénéficient également des capacités de tri et de filtrage avancées du langage de script.
Intégration et communication avec la base de données
L'interaction avec la base de données constitue le cœur du développement de scripts Sage X3. Le langage 4GL offre des mécanismes puissants pour gérer les opérations CRUD (Create, Read, Update, Delete) et maintenir l'intégrité des données dans l'environnement ERP.
Les opérations de lecture s'effectuent principalement via les instructions Read et For. L'instruction Read permet d'accéder à un enregistrement spécifique, tandis que For crée un curseur pour parcourir plusieurs enregistrements. Le système gère automatiquement les buffers [F] pour optimiser les performances d'accès aux données.
Pour les opérations d'écriture, Sage X3 propose Write pour l'insertion, Rewrite pour la modification et Delete pour la suppression. L'instruction Writeb offre une version bufferisée pour améliorer les performances lors d'insertions multiples. Ces opérations respectent automatiquement les contraintes définies dans les dictionnaires de données.
La gestion des transactions s'appuie sur les instructions Trbegin, Commit et Rollback. Le système maintient automatiquement l'état transactionnel via la variable adxlog, permettant de vérifier si une transaction est active. Cette approche garantit la cohérence des données même en cas d'erreur.
L'intégration SQL directe est possible via l'instruction Execsql pour les requêtes complexes. Cependant, il est recommandé d'utiliser les mécanismes natifs du langage pour préserver l'intégrité référentielle et bénéficier des optimisations automatiques.
Les bonnes pratiques incluent l'utilisation de filtres appropriés avec l'instruction Filter, la gestion des verrous via Readlock, et l'optimisation des requêtes avec les hints de base de données. La variable fstat permet de contrôler le statut des opérations pour une gestion d'erreur robuste.
Optimisation et débogage des scripts
L'optimisation et le débogage des scripts Sage X3 sont essentiels pour maintenir des performances élevées et assurer la fiabilité des développements. Le système offre plusieurs outils et techniques pour identifier et résoudre les problèmes.
La gestion des erreurs s'appuie sur des variables système dédiées comme errn pour le numéro d'erreur, errm pour le message détaillé, et errl pour la ligne d'erreur. L'instruction Onerrgo permet de rediriger l'exécution vers un label spécifique en cas d'erreur, tandis que Resume termine la gestion d'exception.
Les outils de débogage incluent l'instruction Dbgaff pour ouvrir le débogueur et la variable dbgmode pour activer ou désactiver le débogage. La fonction dbgbreakpoint permet de gérer les points d'arrêt dynamiquement.
Pour l'optimisation des performances, surveillez les variables adxftl et adxwrb qui définissent respectivement la taille du cache pour les opérations de lecture et d'écriture. Utilisez fstat pour vérifier le statut des opérations de base de données.
Les bonnes pratiques incluent l'utilisation de noms de variables explicites, la documentation du code avec des commentaires, et la gestion appropriée de la mémoire avec FreeInstance et FreeGroup. Évitez de modifier les scripts standard et privilégiez les points d'entrée pour les personnalisations.
Chargement...
Les questions fréquentes
Le langage de script Sage X3 est un langage de programmation de quatrième génération (4GL) qui a été spécifiquement conçu et développé pour l'ERP Sage X3. Ce langage propriétaire constitue l'épine dorsale du développement personnalisé au sein de l'environnement Sage X3.
Voici ses principales caractéristiques :
- Similitudes avec C++ : Le langage de script Sage X3 présente des similarités syntaxiques avec le C++, ce qui facilite sa prise en main pour les développeurs familiers avec les langages orientés objets classiques. Cette parenté permet une courbe d'apprentissage plus rapide pour les programmeurs expérimentés.
- Gestion automatique de la casse : Une caractéristique notable est sa gestion automatique de la casse des caractères, ce qui simplifie l'écriture du code et réduit les erreurs potentielles liées à la sensibilité à la casse.
- Environnement de développement intégré : Le développement s'effectue dans un environnement Eclipse adapté, offrant des fonctionnalités modernes comme l'auto-complétion, le débogage en temps réel et la gestion de versions, ce qui améliore significativement la productivité des développeurs.
- Optimisation métier : Le langage est spécifiquement optimisé pour les opérations de gestion d'entreprise, avec des fonctionnalités intégrées pour la manipulation des données commerciales, la gestion des transactions et les processus métier.
Dans la pratique, ce langage joue un rôle crucial dans :
- La création de packages personnalisés pour étendre les fonctionnalités standard de Sage X3
- Le développement de scripts sur mesure pour répondre aux besoins spécifiques des entreprises
- L'automatisation des processus métier
- L'intégration avec d'autres systèmes d'information
Le langage de script Sage X3 possède une syntaxe structurée avec des conventions spécifiques :
Conventions de nommage :
- Les noms de variables doivent commencer par une lettre
- Les caractères autorisés sont : A-Z, 0-9 et _
- La longueur maximale est généralement de 30 caractères
Catégories de mots-clés :
- Public : Accessibles par tous les développeurs
- New : Nouvelles fonctionnalités introduites
- Deprecated : Fonctionnalités amenées à disparaître
- Internal : Usage interne uniquement
Instructions de contrôle principales :
- If...Then...Else...End : Structures conditionnelles
If condition Then instructions Else instructions End
- For...Next : Boucles avec compteur
For i = 1 To 10 instructions Next
- While...Wend : Boucles conditionnelles
While condition instructions Wend
Gestion des données :
- Read : Lecture d'enregistrements
- Write : Création d'enregistrements
- Update : Modification d'enregistrements
- Delete : Suppression d'enregistrements
Exemples de déclaration de variables :
Local Integer i Local String custName Local Date orderDate Local Decimal amount
La gestion de la casse est insensible pour les mots-clés (IF ou if sont équivalents), mais il est recommandé de suivre les conventions d'écriture de la documentation officielle pour une meilleure lisibilité du code.
La gestion des classes et instances dans Sage X3 s'articule autour de plusieurs concepts et mécanismes clés :
1. Déclaration d'instances
La déclaration d'instances se fait via la commande Local Instance. Par exemple :Local Instance GSTOCK Stock
Local Instance GARTFOU ArtFou
2. Création d'instances
Pour créer une nouvelle instance, on utilise la fonction Newinstance :Stock = Newinstance(GSTOCK)
ArtFou = Newinstance(GARTFOU)
3. Gestion de la mémoire
La gestion de la mémoire est assurée par AllocGroup qui permet de regrouper les instances et de les libérer ensemble. Cela évite les fuites mémoire :Local Numeric handle
handle = AllocGroup
4. Accès aux propriétés
L'accès aux propriétés des instances se fait via la notation point :Stock.ITMREF = 'ART001'
Stock.STOFCY = 'DEPOT1'
5. Conventions de nommage
- Classes : Commencent par G (ex: GSTOCK, GARTFOU)
- Méthodes : Utilisent le CamelCase (ex: CreateStock, UpdateQuantity)
- Variables d'instance : En majuscules (ex: ITMREF, STOFCY)
6. Bonnes pratiques
- Toujours libérer les instances après utilisation
- Grouper les instances liées dans le même AllocGroup
- Documenter les classes et méthodes
- Respecter les conventions de nommage
Cette gestion structurée des classes et instances permet un développement plus robuste et maintenable dans Sage X3.
Dans Sage X3, il existe trois types principaux de fenêtres pour le développement de scripts personnalisés :
1. Les fenêtres Object (Objets)
- Utilisées pour la gestion des données principales et des transactions
- Convention de nommage : GESXXX où XXX représente un code spécifique à l'objet
- Personnalisation possible via :
- Modification des champs et leurs propriétés
- Ajout de contrôles et validations
- Intégration de sous-fenêtres
2. Les fenêtres Miscellaneous (Diverses)
- Dédiées aux traitements spécifiques et utilitaires
- Convention de nommage : SUBXXX pour les sous-programmes
- Personnalisation via :
- Création de processus automatisés
- Intégration de fonctions spécifiques
- Paramétrage des interfaces utilisateur
3. Les fenêtres Inquiry (Consultation)
- Conçues pour l'affichage et la consultation des données
- Convention de nommage : CONSXXX pour les consultations
- Personnalisation possible par :
- Création de vues personnalisées
- Configuration des filtres et critères de recherche
- Mise en place d'exports de données
Bonnes pratiques de développement :
- Respecter strictement les conventions de nommage
- Documenter systématiquement les personnalisations
- Optimiser les performances des requêtes
- Mettre en place des contrôles de saisie appropriés
- Tester rigoureusement avant mise en production
- Maintenir une cohérence dans l'interface utilisateur
L'optimisation de l'intégration et de la communication avec la base de données dans Sage X3 nécessite plusieurs approches complémentaires :
1. Optimisation des opérations CRUD
- Utiliser les instructions Read optimisées pour limiter le volume de données récupérées
- Implémenter des filtres pertinents dans les requêtes pour cibler précisément les données nécessaires
- Privilégier les transactions par lots pour les opérations d'insertion/mise à jour massives
2. Gestion efficace des transactions
- Mettre en place des points de validation (commits) réguliers pour les longues transactions
- Utiliser les mécanismes de verrouillage appropriés pour éviter les conflits
- Implémenter une gestion d'erreur robuste avec rollback automatique
3. Bonnes pratiques d'intégration SQL
- Éviter les requêtes imbriquées complexes qui peuvent impacter les performances
- Utiliser des index appropriés sur les champs fréquemment utilisés
- Optimiser les jointures pour réduire le temps de traitement
4. Maintenance de l'intégrité des données
- Mettre en place des contraintes de validation au niveau de la base de données
- Implémenter des procédures de contrôle de cohérence régulières
- Maintenir des logs détaillés des opérations critiques
Exemple pratique de requête optimisée :
READ [Table] {
Fields: [champ1, champ2, champ3],
Filter: { condition1: 'valeur1', condition2: 'valeur2' },
Sort: { champ1: 'ASC' },
Limit: 100
}
Ces optimisations permettront d'améliorer significativement les performances tout en maintenant l'intégrité des données dans Sage X3.
Pour optimiser et déboguer efficacement les scripts Sage X3, plusieurs outils et pratiques sont recommandés :
1. Outils de débogage intégrés
- Utilisation des variables système :
- errn : code d'erreur numérique
- errm : message d'erreur
- errl : ligne d'erreur
- Instruction Onerrgo pour la gestion personnalisée des erreurs
- Utilisation du débogueur intégré pour l'exécution pas à pas
2. Stratégies d'optimisation des performances
- Limitation des requêtes SQL en utilisant des jointures appropriées
- Utilisation de variables locales plutôt que globales
- Optimisation des boucles et des structures conditionnelles
- Indexation appropriée des tables fréquemment utilisées
3. Gestion de la mémoire
- Libération systématique des ressources après utilisation
- Évitement des fuites mémoire en fermant les curseurs
- Utilisation de structures de données appropriées
- Nettoyage des variables temporaires
4. Bonnes pratiques de développement
- Organisation modulaire du code
- Utilisation de noms de variables explicites
- Implémentation de la gestion d'erreurs
- Tests unitaires réguliers
5. Documentation du code
- Commentaires clairs et pertinents
- Documentation des paramètres et valeurs de retour
- Description des modifications majeures
- Maintien d'un journal des changements
6. Techniques de débogage avancées
- Journalisation des événements critiques
- Points d'arrêt stratégiques
- Traces d'exécution
- Analyse des performances avec les outils intégrés