A partir de la version 7
02 2016
La couche verticale, présente depuis les premières versions de l'application, a été
créée pour faciliter le travail des partenaires en permettant le déploiement facile de
tout développement sur différents sites clients.
Depuis lors, le marché a connu des évolutions qui nous ont amené à ajuster ce
modèle pour l'adapter au besoin des clients d'installer des extensions provenant de
partenaires multiples (les législations en particulier).
Nous avons défini des règles afin d'éviter les conflits lorsque des extensions
développées par différents partenaires sont déployées dans les mêmes dossiers.
Nous avons introduit le concept de 'Add-ons' pour désigner les extensions qui
respectent ces règles. De plus, nous nommons 'Assets' les extensions qui ne suivent
pas ces règles.
Nouveautés
La version 7 et les mises à jour suivantes offrent :
• des capacités de codification étendues,
• de nouvelles fonctions de développement,
• de nouvelles fonctionnalités de plateforme,
Ces améliorations nous permettent de répondre à ces nouvelles exigences et facilitent
l'adoption des règles d'Add-on.
En savoir plus
Ce document explique les principales règles de développement d'add-ons, mais ne
remplace pas la formation officielle sur la plateforme technologique Sage qui est
nécessaire à la bonne compréhension et application de ces concepts.
Nouveautés 2
En savoir plus 2
LA PLATEFORME TECHNOLOGIQUE 5
REGLES DE NOMMAGE 8
Code source 12
Données d'administration 12
Factory ID 13
Bonnes pratiques de nommage pour les données d'administration 14
REGLES DE DEVELOPPEMENT 18
États de développement 25
Points d'attention 26
Test 27
Fichier partenaire 29
Lancer l'outil 33
EMBALLAGE 40
Patching 41
Maintenance et support 42
Les développements dans les couches standard et verticales peuvent être partagés et
installés à plusieurs emplacements. Les développements spécifiques ne sont
généralement pas partagés et sont normalement installés sur un emplacement client
unique (ce dernier peut être sur plusieurs dossiers selon le déploiement).
Vous pouvez utiliser la plateforme pour isoler et patcher un développement. Les codes
d'activité sont utilisés pour baliser des éléments ajoutés ou modifiés afin de :
• les protéger de l'application de patch standard ;
• pouvoir les récupérer facilement ;
• pouvoir les désactiver pour certains dossiers.
La plateforme fournit aux partenaires des fonctionnalités pour développer des extensions
tout en ajoutant de nouvelles fonctions ou en personnalisant les fonctions existantes :
• Le code source est séparé et utilise des points d'entrée prédéfinis lors
d'interactions avec le standard ;
• Des actions dédiées, séparées de la couche standard, sont utilisables ;
• Un large ensemble de paramètres est disponible pour personnaliser aisément
l'application :
o Des transactions sont disponibles pour les objets les plus pertinents ;
Les règles de développement des add-ons sont conçus pour éviter les conflits
d'installation ou d'application de patch entre plusieurs add-ons dans un dossier client
unique. Toutefois, l'application de ces règles ne garantit pas que plusieurs add-ons
concernant le même objet fonctionnel interagiront correctement.
Les conflits fonctionnels entre deux add-ons doivent être gérés au cas par cas par
l'équipe de mise en œuvre du projet.
Les règles de développement des add-ons sont conçues pour évoluer au fil du temps afin
d'enrichir les possibilités de co-développement et de prendre en compte les améliorations
de la plateforme.
Ce document décrit les nouveaux concepts introduits dans le modèle de données Version
7, en particulier les fonctionnalités d'administration stockées dans la base de données
MongoDB, ainsi que les nouvelles capacités de développement d'add-ons offertes par la
dernière version d'Enterprise Management.
Les fonctionnalités les plus intéressantes pour le développement d'extensions sont :
A partir de la Version 7
• Extension de codification
• Capacités d'authoring
• Contrôle du développement des programmes
• Nouvelles capacités de modélisation : classes et représentations
A partir de l'Update 8
• Programme d'aiguillage automatique pour les objets et les points d'entrée
• Factory ID
• Outil de licence pour add-ons
La Version 7 apporte des extensions de codification qui nous permettent de proposer une
gamme de codification dédiée pour chaque add-on, évitant les conflits de nommage :
De nouveaux éléments stockés dans la base de données MongoDB sont définis sans
limite de taille de codification.
Les règles de nommage empêchent les conflits entre les extensions de développement
de différents partenaires afin que des extensions ne soient pas écrasées par d'autres
dans la couche verticale.
Depuis la première version de l'application, les plages de nommage étaient les suivantes :
• Couche standard : A-V (A réservé pour le module superviseur)
• Couche verticale : X-Y
• Couche spécifique : Z
Tous les éléments commençant par W correspondent à des éléments générés
automatiquement (comme les transactions).
Il existait des plages dédiées aux menus locaux et aux tables diverses pour la couche
verticale.
Il est facile de comprendre que ces règles sont correctes lorsqu'un partenaire est seul sur
un dossier client.
Cependant, aujourd'hui, nos clients s’attendent à trouver sur le marché différentes
extensions provenant de plusieurs partenaires pour les installer simultanément dans leur
environnement.
Sans fixer de règles, il n'est pas possible de répondre à ces attentes du marché qui créent
des opportunités commerciales pour nous tous.
‘Add-on’ ‘Asset’
Dossier Dossier
d'application d'application
standard standard
Zone de conflit de
nommage
Les extensions de code livrées avec la V7 nous permettent de fournir, sur demande, à
chaque partenaire :
• Un identifiant unique, généralement un code alphanumérique de quatre chiffres ;
Cet identifiant (par exemple, XX12) doit être utilisé au début de chaque nom que vous
créez dans le dictionnaire et dans vos programmes.
Cette règle de nommage s'applique à tous les éléments de dictionnaire qui utilisent la
codification alphanumérique comme les écrans, les classes, les représentations, les
codes d'activité, les actions, le code source, etc.
Vous devez utiliser ces conventions pour toutes les clés, les abréviations, ainsi que les
paramétrages des éléments.
Pour les menus locaux et les tables diverses, les plages 13000-13999 et 18000-29999
sont réservées. Une plage dédiée, en cohérence avec vos besoins, vous sera réservée
sur demande.
L'équipe Sage Global Product Delivery est en charge de l'allocation de code suite à une
demande partenaire.
Les codes sont stockés dans une base de données unique pour empêcher les allocations
doubles.
Les données d'administration (authoring, badges, items de menu, etc.) sont stockées
dans la base de données MongoDB.
Chaque élément de données d'administration doit également être unique et doit contenir
l'identifiant unique (au début, ou inclus dans certains cas spécifiés ci-après).
Si vous possédez une extension existante, créée avant que les nouvelles règles ne soient
définies, il vous faudra bien sûr effectuer un renommage avant de pouvoir commencer le
programme d'add-ons, mais cela vous permettra ensuite d'accéder à de nouvelles
opportunités commerciales.
Si vous développez une nouvelle extension, nous vous conseillons de suivre dès
maintenant les règles de nommage et de développements d'add-ons.
Important ! Tout ce que vous développez doit commencer par ou contenir votre
identifiant unique attribué par Sage.
Par exemple, l'identifiant unique pour Sage Portugal est XX04 et tout ce qui est développé
au Portugal doit commencer par XX04.
Sur demande, Sage fournit à chaque partenaire une plage de menus locaux et de tables
diverses, adaptés selon les besoins. Par exemple, pour Sage Portugal, cette plage est
13220-13259.
Remarque : Pour les tables Transcodage import/export, une règle devrait être livrée
pour empêcher les conflits. Le besoin étant rare, elle n’a pas encore été mise en
œuvre.
Nous allons examiner dans les prochains paragraphes comment procéder pour suivre les
règles de nommage.
Dans la capture d'écran ci-dessous, X1QT représente l'identifiant unique à quatre chiffres
pour le partenaire.
Permettre une codification libre pour les colonnes facilite l'utilisation des affectations de
classe, ce qui simplifie le codage.
Code source
Le nom de tous les scripts que vous créez doit commencer par votre identifiant.
REMINDER
Les entités spécifiques à un client (scripts et dictionnaires) doivent commencer par Z (et être
protégées par un code d'activité pour les entités de dictionnaire).
Une exception existe pour les scripts : un nom qui commence généralement par SPE est
automatiquement proposé pour les développements sur mesure. Comme il n'y en a qu'un, il
n'est pas nécessaire de le modifier.
Données d'administration
Factory ID
Avec la mise à jour 8, toutes les données d'administration peuvent être balisées avec un
Factory ID.
Pour activer cette fonctionnalité, vous devez modifier le fichier nodelocal.js et autoriser
cette fonctionnalité.
En tant que partenaire, vous pouvez définir votre Factory ID dans un profil Sécurité (si
votre fichier nodelocal.js autorise cette option).
Sage utilise cette méthode pour protéger des données livrées et pour empêcher le client
d'effectuer une mauvaise mise à jour. Les données peuvent être dupliquées ("Enregistrer
sous"), mais pas modifiées, ni supprimées.
Nous vous conseillons de donner à votre Factory ID un code commençant par (ou
incluant) votre identifiant unique.
L'outil d'import crée des entrées de menu uniquement pour les fonctions classiques et les
vignettes V6.
À partir de l'Update 9, la règle de nommage pour les éléments créés sur mesure ou les
éléments verticaux est la suivante (FUNCTION représente le code de la fonction) :
• SPE_X3_ERP_FUNCTION pour les fonctions Enterprise Management sur mesure
Il n'est pas nécessaire d'ajouter votre identifiant unique car il devrait déjà être inclus
dans le nom de la fonction.
• Si le rôle est associé à un profil Sécurité ayant un Factory ID, la case à cocher
Marquer les éléments importés en Factory est présente sur la page de
lancement.
Si cette case à cocher est sélectionnée, le préfixe de nommage "VER_" sera
utilisé ;
• Sinon, la règle de nommage qui s'applique est le préfixe "SPE_".
Cela signifie que durant l'exécution de cet outil, un seul type de nommage est utilisé,
indépendamment du nom des fonctions. Par exemple :
• VER_X3_ERP_ZFUNC pourrait être créé dans une exécution d'import si la case à
cocher est sélectionnée, même si la normalisation des fonctions verticales ne
devrait pas utiliser un préfixe Z.
• VER_X3_ERP_XFUNC pourrait être créé dans une exécution d'import si la case à
cocher n'est sélectionnée, même si la normalisation des fonctions sur mesure ne
devrait pas utiliser un préfixe X.
Pour conserver la cohérence globale, nous vous suggérons d'utiliser les mêmes règles si
vous créez une entrée de menu pour une fonction classique, au lieu d'utiliser l'outil
d'import.
Pour les fonctions Syracuse que vous êtes susceptible d'ajouter, il n'existe pas de
fonction d'import qui créera l'entrée pour vous. Vous devrez créer directement votre item,
sous-module ou module de menu.
La normalisation n'est pas encore définie, mais nous vous suggérons :
• D'insérer votre identifiant unique dans le code (au début ou au milieu) ;
• D'inclure le nom de votre add-on dans le titre ;
• D'utiliser le Factory ID pour baliser l'élément.
N'oubliez pas de paramétrer un code d'activité sur l'action dont le nom devrait également
commencer par votre identifiant unique.
Chacune des trois couches, spécifique, verticale et standard, est gérée par un script
séparé.
Attention :
• La table des points d'entrée est chargée comme un ensemble de variables
globales lorsque vous créez une session classique. Si vous modifiez la liste des
points d'entrée, vous devrez vous déconnecter et vous reconnecter pour que la
modification soit prise en compte.
• Lorsque la table est chargée dans la mémoire, un contrôle vérifie que le script
(adx) défini dans la liste de points d'entrée existe. Si ce n'est pas le cas sur le
dossier ou sur un des dossiers parents, le script n'est pas ajouté dans la table
mémoire. Tant que vous ne vous êtes pas déconnecté et que vous n'avez pas
recréé la table mémoire, le script ne s'exécute pas, même si vous l'ajoutez après
la création de session.
Il existe deux variables globales utilisées pour contrôler l'exécution des différents scripts.
• GPV : empêche l'exécution de la couche verticale lorsque paramétrée à 1
• GPE : empêche l'exécution de la couche standard lorsque paramétrée à 1
Ces deux variables sont paramétrées à 0 par le standard avant l'exécution de la boucle
globale.
Puis :
• Si GPV est paramétrée à 1 dans le script spécifique, tous les scripts verticaux
seront ignorés sans s'exécuter (ce comportement devrait être validé au cas par
cas sur un site client).
$ETIQP
# Execute the standard code first
Gosub ACTION From SUBPTH
GPE=1 :# Avoid to reexecute the standard
# Vertical code
……
……
Return
Dans ce cas, il est nécessaire que le troisième script vertical XX34PH78 s'exécute après.
Sur un site client, l'ordre d'exécution des différents scripts verticaux doit être élaboré en
fonction des besoins.
Ce sont des cas exceptionnels et ils doivent être vérifiés sur un site client car il n'est pas
possible de gérer et d'anticiper toutes les combinaisons de scripts verticaux.
Remarque : Dans des cas vraiment exceptionnels, où l'ordre doit être différent en
fonction du point d'entrée, un des scripts verticaux doit être séparé pour répondre à ce
besoin spécifique sur le site client, car il n'existe aucune modélisation pour gérer cette
exigence.
• En revalidation de dossier :
Le script vertical, lorsqu'il existe sur un objet, est automatiquement inséré dans la
table des points d'entrée.
Avec les autres modèles, pour lesquels le programme d'aiguillage n'est pas créé
automatiquement, vous devrez gérer l'aiguillage manuellement.
D'un point de vue théorique, ce travail doit être fait pour les :
• Actions
• Consultations
• Modèles import / export
• États
D'un point de vue pratique, les consultations, les modèles d'import/export et les états sont
généralement dupliqués lorsque vous souhaitez les personnaliser. Il faut donc vous
concentrer principalement sur les scripts associés aux actions.
Pour garder le même ordre d'appel pour chaque action du modèle, utilisez cette syntaxe
simple pour le programme d'aiguillage :
CNSCSOSPE
X1CNSCSOSPE
$ACTION
Pour différencier l'ordre des appels en fonction des actions, utilisez cette syntaxe :
X1CNSCSOSPE
$ACTION
Case ACTION
$ACTION
When “OUVRE”
Case ACTION
Gosub ACTION From X1CNSCSOSPE
When “OUVRE” Gosub OUVRE
Gosub ACTION From YCNSCSOSPE
…
When Default
When Default
Gosub ACTION From YCNSCSOSPE
Endcase
Gosub ACTION From X1CNSCSOSPE
Return
Endcase
Return
Ce patch est toujours intégré Ce patch sera intégré par le client si aucun
autre add-on ou asset n'existe sur les
mêmes fonctions core.
Sinon, ce patch ne pourra pas être intégré
pour éviter l'écrasement des traitements
existants. Les traitements d'aiguillage
doivent être mis à jour manuellement.
États de développement
Les états standards sont développés avec l'outil Crystal Report.
Voici quelques conseils pour le développement des états.
Points d'attention
Faites attentions, lorsque vous complétez une fonction core. Si la couche verticale (ou la
couche spécifique dans certains dictionnaires) est déjà utilisée par add-on ou un asset
vertical, ne forcez pas le traitement d'aiguillage existant qui appartient à cet add-on
ou cet asset vertical.
Dans cette situation et pour vos développements futurs, vous devez utiliser la stratégie du
traitement d'aiguillage qui appelle votre propre traitement applicatif.
• Pour utiliser un point d'entrée, utilisez la stratégie du traitement d'aiguillage pour
aider la mise à jour des traitements d'aiguillage ;
• Créez un patch séparé pour ces traitements et placez un exemple de ce que devrait
être le traitement source dans un répertoire dédié appelé "ADDSRC" que vous livrez
avec le patch ;
• Complétez le fichier "lisez-moi" avec la référence des traitements d'aiguillage et le
traitement core correspondant.
Test
Pour tester une fonction core :
• Vérifiez la fonctionnalité globale de la fonction core, une fois que les add-ons et les
assets ont été ajoutés ;
• Vérifiez le traitement d'aiguillage dans la couche verticale, et même dans la couche
spécifique pour certains dictionnaires dans les points d'entrée ;
• Vérifiez que les actions de champ coexistantes fonctionnent ensemble dans un écran core
;
À partir de l'Update 8, vous pouvez, en tant que partenaire, gérer les licences pour votre
add-on et contrôler l'accès avec la même structure qu'en standard.
La règle principale est de définir la structure de l'application qui est décrite dans un fichier
appelé Fichier de règles, et de donner accès aux fonctions ou services avec les
limitations décrites dans un fichier de licence.
Le programme de contrôle utilisera le concept de badges et de fonctions clés, et
autorisera un accès complet aux fonctions clés si le nombre d'utilisateurs concurrents du
badge défini dans la licence n'est pas dépassé.
Les licences d'add-ons sont importées vers le serveur comme une licence standard.
L'utilisation de cet outil est optionnelle. Vous pouvez protéger vos add-ons avec vos
propres mécanismes.
Fichier partenaire
Extrayez votre clé publique et envoyez-la à l'ADV en demandant que votre fichier
partenaire soit signé par Sage.
Vous recevrez un fichier partenaire signé de la clé privé de Sage.
Ce fichier partenaire inclut :
• Votre identifiant en tant que partenaire ;
• Votre adresse ;
• Votre clé publique ;
• Une plage de codification autorisée pour vos solutions verticales ;
• Une signature électronique par Sage qui scelle votre fichier partenaire.
Introduction
D'un autre côté, le processus de patching de cette technologie est lourd et difficile à
automatiser, en particulier parce que les conflits et erreurs relatifs à la liberté donnée
nécessitent des rectifications manuelles lorsqu'ils se produisent.
Cela est particulièrement critique pour la mise en œuvre Cloud parce que les clients
souhaitent dans le même temps :
• Pouvoir avoir des développements sur mesure ou verticaux sur ces environnements ;
• S'assurer que l'application des patchs standard peut se faire automatiquement sans
conflits.
C'est pourquoi il est nécessaire de restreindre la manière par laquelle les partenaires
peuvent créer des développements sur mesure et/ou verticaux. Cela est possible en
définissant des règles donnant des normes, mais aussi en restreignant les modifications
de dictionnaire. Ces règles sont non seulement obligatoires en mise en œuvre Cloud,
mais elles sont également critiques pour garantir à tous les clients des procédures de
mise à niveau sans problème.
Un outil de vérification qui s'exécute sur les environnements existants a été créé. Cet outil
est amélioré dans la mise à jour 10 et ce document décrit toutes les règles qui seront
vérifiées par cette dernière version.
Cet outil vérifie uniquement la cohérence des dictionnaires (métadonnées). À l'avenir,
nous comptons améliorer l'outil pour vérifier les sources également.
Dans la conception actuelle du dictionnaire, il peut être difficile de suivre ces règles dans
certains cas, en particulier avec le Code classique. Le code Syracuse a été conçu pour
permettre le respect des règles dans ces cas.
Lancer l'outil
L'outil est fourni comme une fonction classique appelée ACTLSPE. Il inclut une fenêtre
permettant de saisir des paramètres supplémentaires. Il doit être exécuté sur le dossier
dans lequel le développement vertical et/ou sur mesure a été effectué.
Les paramètres à renseigner sont :
- Les dossier à tester ;
- Le dossier de référence (en général le dossier d'application).
Convention de nommage
Le premier point important est que les conventions de nommage sont données afin de
gérer les conflits potentiels entre les partenaires qui fournissent des développements ou
add-ons verticaux. Chaque partenaire souhaitant développer de telles fonctionnalités
reçoit des plages de codification. La règle est la suivante :
• Les noms de plages d'add-ons commencent par X ;
• Les noms de plages verticales commencent par Y ;
• Les noms de plages sur mesure commencent par Z.
Cette règle s'applique uniquement pour le niveau le plus élevé d'imbrication associé à
l'élément. Par exemple :
• Un écran vertical doit suivre la règle de nommage, mais les sous-éléments (champs)
peuvent être nommés librement ;
• Sur un écran standard, les champs verticaux ajoutés doivent suivre la règle de
nommage ;
• La même règle s'applique aux colonnes et indices de tables, noms de collection ou
méthodes sur les classes et représentations, etc.
Les éléments contrôlés par la règle de nommage sont: les tables, les écrans, les fenêtres,
les objets, les consultations, les actions, les types de données, les classes, les
représentations, les codes d'activité, les définitions de paramètres, les scripts et les états.
Les sous-éléments d'éléments standard sont vérifiés selon ce qui a été défini auparavant.
Les tables diverses et menus locaux ont des plages numériques.
Certains éléments de dictionnaires sont considérés comme étant non standard bien qu'ils
ne commencent ni par X, Y ou Z :
Tout élément suivant ces règles de nommage est un élément non standard qui doit être
protégé par un code d'activité commençant par X, Y ou Z. Tout élément qui ne respecte
pas la convention de nommage et qui n'est pas présent dans le dossier d'application est
un élément non standard ajouté qui ne suit pas la convention de nommage (c'est une
erreur).
Champ standard dans Paramétrer un code d'activité Les champs désactivés sont
écran standard spécifique sur un champ standard invisibles mais existent
pour le rendre spécifique Un toujours. Cela doit être éviter
risque existe si le code d'activité pour empêcher tout impact
est paramétré à Inactif. Un bon sur le standard.
moyen de modérer ce risque est
de rendre le code d'activité
dépendant de TRU.
Écran standard Ajouter des champs ou sections
spécifiques
Fenêtre standard Ajouter des onglets et boutons
spécifiques, affecter des codes
d'activité standard aux boutons
standard pour les désactiver
Toute entité (fenêtre, Créer un nouvel élément
écran, table, objet, spécifique
action, menu local, table
Désactiver une action
diverse, etc.)
Affecter des noms de scripts standard en affectant GPE est
spécifiques ou verticaux dans le risqué et devrait être interdit ;
dictionnaire mais cela n'est pas contrôlé
pour le moment.
Les éléments de dictionnaire commençant par W sont exclus du fichier trace (le système
considère que la cohérence a déjà été vérifiée sur la source des éléments de la
génération).
Ajouter des boutons aux fenêtres standard est parfois nécessaires, mais cela crée des
problèmes que nous ne pouvons résoudre correctement :
• Seules quatre valeurs sont disponibles pour les extensions non-standard ;
• Les conflits entre les extensions verticales ne peuvent être résolus et
nécessitent un contrôle particulier lorsque plusieurs extensions verticales sont
installées ensemble.
Pour les normalisations effectuées pour la Version 7, il est possible de créer autant de
liens que nécessaires, et leur nom est codifié.
Tous les messages et textes sont stockés dans des fichiers dédiés.
Un processus et des outils existent pour traduire l'application.
Un add-on doit être traduit et livré au moins en anglais et dans la langue locale gérée par
le partenaire.
Vous pouvez également utiliser l'outil de documentation inclus dans l'application pour livrer une
aide en ligne pour les champs et fonctions.
Veuillez vous reporter à la documention Comment écrire la documentation disponible sur le Centre
d'aide en ligne pour en savoir plus sur l'outil de documentation livré avec la plateforme.
Le nom des fichiers patch devrait suivre des règles de nommage pour bénéficier de
contrôles de séquence automatiques fournis par la plateforme.
La règle de nommage des fichiers de patch est la suivante :
<AddOnId>_<AddOnPatchNumber>_<X3RequiredPatchLevel>_<X3Version>.dat
• AddOnId : identifiant de l'add-on (ne doit pas être P, réservé pour les patchs
Sage standard)
• AddOnPatchNumber : numéro d'ordre de séquence utilisé pour identifier
divers fichiers de patch d'add-onsx
• X3RequiredPatchLevel : numéro d'ordre de séquence utilisé pour identifier
divers fichiers de patch d'add-ons
• X3Version : version du produit avec laquelle la liste de patchs d'add-ons est
compatible
Maintenance et support
Le développeur de l'add-on doit gérer le processus de maintenance de l'add-on. Dès
qu'une liste de patchs standard est livrée, le développeur doit vérifier que le dernier
package d'add-on est compatible avec la nouvelle liste de patchs. Si ce n'est pas le cas,
une nouvelle version de l'add-on doit être fournie sous un mois. Les informations de
compatibilité entre les packages d'add-ons et les listes de patchs standard doivent être
communiquées par le partenaire.
Le développeur de l'add-on doit également fournir le support pour ses propres add-ons.
Le développeur fournira dans la version suivante du pack des corrections aux problèmes
de l'add-on signalés par les clients. Des correctifs peuvent également être fournis en
fonction de la gravité du problème :
• Pour un problème mineur : pas d'action ;
• Pour un problème majeur : livrer un correctif au client concerné (si nécessaire) ;
• Pour un problème important/bloquant ayant un impact sur plusieurs clients : livrer un
correctif aux clients concernés et publier une nouvelle version du pack de l'add-on.