MercatorPenguin 2.0 permet la modification des fiches de signalétique (clients, fournisseurs, articles, contacts, comptes généraux, projets, prospects, ...). Par défaut, MercatorPenguin ne peut modifier que le record de la table de base du signalétique. Il n'a pas la possibilité d'agir sur les tables enfants (TARCLi, ARTFOU, TACTSIG, ...). Toutefois, cette limite peut être aisément contournée en utilisant la technique décrite dans cet exemple.
L'accès à une fiche de signalétique en modification dans MercatorPenguin se fait toujours au départ d'un bundle de type "Liste", via un bouton SigEditButton, dont les propriétés suivantes doivent être spécifiées :
- Module = nom court du signalétique (CLI, FOU, STOCK, TACT, GEN, PROJ, XLEAD, YPREST, ...)
- IdSig = identifiant de la fiche que l'on souhaite modifier. Si ce paramètre est vide, alors une nouvelle fiche sera créée.
<m:SigEditButton Text="Modifier" Font="Small" Module="CLI" IdSig="@C_ID" />
Le layout d'une fenêtre de modification dans MercatorPenguin doit être créé en XAML via le menu "Outils / Ecrans Signalétiques / Penguin" de Mercator.
Il convient de faire une version distincte par langue utilisée. (Seules les langues réellement utilisées doivent être complétées). Ce paramétrage XAML utilise essentiellement les EditControls.
Le fichier zip ci-joint contient quelques exemples de paramétrages.
En ce qui concerne les modifications de fiches de signalétique, MercatorPenguinServer est sollicité à deux reprises :
- Pour la lecture des données
- Pour l'enregistrement des données créées / modifiées.
MercatorPenguinServer étant par définition stateless, il n'y a aucune relation entre ces deux étapes.
A chaque étape, MercatorUi.Main est utilisé et l'utilisateur actif correctement initialisé. Dès lors, ces propriétés statiques contiennent toujours la valeur correspondant à l'utilisateur de MercatorPenguin :
- MercatorUi.Globals.Langue
- MercatorUi.Globals.UserId
- MercatorUi.Globals.CurrentUser
- MercatorUi.Globals.CurrentUserRecord
- ...
Les droits d'accès sont aussi vérifiés.
Lors de la première étape, si un customizer existe et implémente l'interface IStringUpdater, un code personnalisé permettra de modifier la requête de lecture des données.
Lors de la sauvegarde des données, tout customizer implémentant l'interface ISqlCommandUpdater sera pris en compte pour modifier la requête de mise à jour des données. Si une nouvelle fiche est créée, la procédure standard de calcul d'un nouvel ID sera appelée et, par conséquence, un éventuel customizer implémentant INewSigId. Notons que la création de nouvelles fiches n'est pas possible si le mode de création des ID est "manuel".
Dans tout code C#, utilisez ce test pour savoir si le customizer fonctionne sous MercatorPenguinServer :
if (MercatorUi.Globals.IsMercatorPenguinServer)
{
...
}
Notes :
- En ce qui concerne les articles, MercatorPenguinServer prend bien en compte l'option "Prix automatique à la validation" afin de déclencher l'exécution du script de recalcul.
- Si les champs x_modiftag nécessaires pour les configurations multi-sites sont présents, ceux-si sont bien pris en compte.
Il n'y a pas de mécanisme qui avertirait que la fiche en cours de modification aurait pu être modifiée par un autre utilisateur entre le moment de la lecture et celui de l'enregistrement des données. Toutefois, lors de cet enregistrement, le record complet correspondant à cette fiche est à nouveau lu et seules les valeurs des champs repris dans le paramétrage XAML sont portées en modification de ce record.
A télécharger :
0000002821.zip (10 Kb - 08/08/2022)