Technique et surcharge Datahub
MONTEE DE VERSION / MIGRATION
Lors d’une montée de version, l’ERP fourni un script SQL de migration qui est susceptible de créer ou modifier les états de l'automate Datahub pour un type de Dataset existant ou pour ajouter un nouveau type de Dataset.
Ce script agit donc au niveau du paramétrage des états de l’automate.
Version | Type de dataset |
---|---|
7.5 | Facture fournisseur |
10.2 | Facture fournisseur, Prévisions de vente et niveau de stock, Temps d’affaire |
10.4 | Import-export xml |
10.5 | Pièce commerciale, Devis travaux, Pré-réception fournisseur |
10.6 | Interventions, Ecritures comptables |
SURCHARGE ETAT AUTOMATE
Généralités
Le paramétrage des états de l’automate donne pour chaque état un nom de module et de fonction Diva, exécutée par l’automate lors du passage de cet état.
Exemple pour le dataset de facture fournisseur:
C’est donc dans ce zoom que l’on va trouver tous les modules et fonctions Diva qui entrent dans le traitement du datahub.
La fonction principale, point d’entrée unique, est sur l'état 100 (module gttmdhb000.dhop fonction Traiter_PivotInitial_FicXml) et joue un rôle majeur puisqu’elle va:
vérifier la structure XML en terme de cohérence de balises
rechercher le type de dataset, et déterminer la nature des fichiers joints ainsi que le code chemin pour le stockage des fichiers
lire les champs principaux, comme la source, le système, le dossier, l'établissement
parcourir, vérifier et déplacer les fichiers compagnons
détecter et traiter les pivot en complétion
selon le type de dataset, lire les champs spécifiques à chaque dataset et les mémoriser
tracer les anomalies
enregistrer un DHBENT numéroté dans la base de données
cette fonction retourne 0 ou 1, le 0 donnant un résultat VRAI
Toutes les autres fonctions sont écrites de manière à retourner VRAI (retour = ‘O') ou FAUX (retour = ‘N’) et indiquer à l’automate le prochain état à exécuter.
Ces fonctions effectuent des tâches qui doivent rester simples, et de manière totalement autonome c’est à dire qu’un fonction ne peut pas supposer que l'état précédent ait été exécuté juste avant. Une fonction qui doit lire le contenu XML d’un fichier compagnon par exemple, devra obligatoirement lire totalement le fichier XML sans utiliser un éventuel cache ou liste garni par une autre fonction.
Les modules sont regroupées par groupes fonctionnels, intégrant généralement les lettre ‘dhb’. On trouve donc GTTMDHB000, GTTMDHBPCE, GATMDHBTPS, A5TMDHBIMPDTR,…
Le champ de l’entête .DHBEtatRef sert pour les critères de regroupement dans le superviseurs.
Lors du codage d’un fonction d’un état il est important de conserver chaque état autonome, c'est à dire de ne pas utiliser une variable ou une liste chargé par un état précédent, car lors de l’exécution réelle il n’y a aucune garantie qu’un état soit exécuté immédiatement suite à son prédécesseur ; l’automate peut avoir été mis en pause puis relancé, ou traiter un autre dataset B avant de revenir à l'état suivant du dataset A
Gestion des erreurs
Exemple de traitement d’un état : GTTMDHBPREV / DHB_Prev_PrevisionsVente_Erreur
En début de fonction, appel a DHB_Trace_Activer_Fic qui va indiquer que l’on souhaite une sortie d’erreur par fichier en plus de la sortie normale
Contrôles de base : dossier connu
Lecture du fichier pivot
Contrôle spécifique au type de dataset ‘PDPREV’ : présence et validité de l’horizon
Boucle sur des données spécifique au type de dataset ‘PDPREV’
Appel, en cas d’erreur à DHB_Trace_Ecrire qui va écrire dans le fichier de trace
Détermination du retour O ou N
Appel à Dhb_Message_Enregistrer pour une trace d’erreur enregistrée au niveau du dataset pour une affichage direct dans le superviseur
Appel à DHB_Trace_Finir pour fermer le fichier et mémoriser le chemin pour une association automatique au DHBENT
Re-injections
Plusieurs fonctions du module GTTMDHB000.dhop servent à fournir le numéro d'état pour la remise dans le circuit automatique data hub.
Par exemple DataHub_Etat_FacFou_Auto fournit le numéro d'état pour la remise dans le circuit auto des factures fournisseur dans le data hub
IMPORT/EXPORT XML
Ce sont les propriétés de l’objet métier associé à chaque table qui indique si la suppression est autorisée.
Exemple A5TMCHKMDIVALTO
On voit ici la propriété .SuppXmlFl qui est positionnée à OUI indiquant que pour cette table MDIVALTO la suppression est autorisée.
Par défaut (.SuppXmlFl non précisé) la suppression n’est pas autorisée
NUMERO DE TICKET
L'entête de dataset est dotée de la zone : Dhbent.SwTicketNo (numérotation automatique sur incrément de la table mSocNo) correspondant au numéro de ticket. Le numéro de ticket, lien entre un dataset et l'appel service web correspondant est visible dans le superviseur du datahub.
Pour permettre à l'appelant d'interroger l'avancement du traitement du dataset, le fichier pivot de demande (le fichier .DHUB), doit impérativement contenir les balises qui vont permettre de stocker le numéro de ticket.
La balise est : <SwTicketNo></SwTicketNo> sans contenu. La balise sera traitée à la volée pour y mettre le numéro de ticket obtenu par le demandeur, et ainsi permettre au datahub de stocker dans la table DHBENT ce numéro de ticket, qui est retourné en réponse à l’appel de service web.
La fonction Ecrire_DataSet_DhbEtat du module A5TMSWAGIL.dhs permet de modifier la construction de la réponse à une demande d'état de dataset lors de l’appel du service web d’interrogation d'état.
Ouvertures (V10.12)
Afin de faciliter la création de flux spécifique, les switch case ont maintenant des ouvertures afin d’ajouter des flux sans cannibaliser de grandes partie du code.
Il suffit de surcharger les fonctions qui finissent en “_spe” (concerne gtttdhb100, gttmdhb000, gttmdhb001)
Exemple :
Ici la fonction “Toolbar_Chargement_Ap_Spe” permet d’ajouter un case pour un flux spécifique sans réécrire toute la fonction existante.
Les fonctions ci-dessous dans le “gttmdhb000” permette d’ajouter un choix de flux dans les listes multichoix des flux existant :
La liste est remplie en premier avec les données du multichoix standard puis fait appel a une ouverture pour ajouter tous les choix spécifiques.