Technique et surcharge Services web
Appel de service web en GraphQL
Le GraphQL est un langage de requêtes et un environnement d'exécution open-source qui propose une alternative aux API REST. Il est utilisé, notamment dans des services publics.
Les instructions Diva d'appel de services web permettent de traiter ce type de langage, car les interactions se font avec des couches de niveau basses par les instructions WebRequestxxxx.
Envoi de message GraphQL
Un token doit être stocké par ailleurs.
L’envoi se fait en méthode POST avec transmission du TOKEN et du type dans le Header et le corps du message est MESSAGEBODY dont on trouve deux exemples plus bas.
Exemple de message d’interrogation
Exemple de message de mise à jour/mutation
Modules en surcharge de service web
Tous les services web ont une partie du code plus ou moins importante surchargeable, soit pour le traitement métier ou le mapping de champs.
Modules pour SW REST - WEB SERVICE INFINITY
Code service web | Modules de surcharges | Remarques |
---|
Code service web | Modules de surcharges | Remarques |
---|---|---|
associer_fichier | a5tmswinfinity | Ouvertures |
interrogation_encours | (aucun) | Appel du tunnel via RCPM000 |
integration_ecriture | cctmswinfinity | Ouvertures |
integration_reglement | rctmswinfinity |
|
interroger_stock | gttmswinfinity
gttmmapping | Ouvertures Remplir_Interroger_Stock_Json fait le traitement Mapping de champs existant |
interrogation_ouvrage | (aucun) |
|
integration_dtr | gttmdtr200 | Ouvertures |
interroger_resume_affaire | gatmmapping | Mapping de champs possible |
interrogation_commande | gttmmapping | Mapping de champs existant |
integration_piece | gttmswinfinity gttmmapping | Ouvertures Mapping de champs existant |
integration_equipement | gttmswinfinity gttmmapping | Ouvertures Mapping de champs existant |
Modules pour SW SOAP- SYNCHRO INFINITY AGILEO
Code service web | Modules de surcharges | Remarques |
---|---|---|
interroger_stock | gttmswdav | Remplir_Interroger_Stock fait le traitement |
interroger_resume_affaire | gatmswagil | Remplir_interroger_resume_affaire fait le contrôle |
Surcharge pour Agiléo
Entités Agiléo
Ajouter de nouvelles ENTITES disponibles dans le studio DS-agileo.
Pour rajouter des recordSQL à la liste des entités disponible dans le studio DS-agileo il faut déclarer en public les recordSQL dans une surcharge du module A5tmswagil.dhop
Et rajouter le traitement des recordSQL déclarés dans la fonction lire_ENTITES_SPE
Lecture de données de recordSQL déclarés en surcharge
La commande INFOS_INFINITY permet de lire les données d'un recordSQL déclaré en surcharge à condition de respecter les règles suivantes :
-La déclaration du recordSQL doit être faite dans une surcharge du module A5TMSWAGIL.dhop
-La fonction Desc_champ_spe doit être présente dans le module de surcharge
Attention : ne pas oublier l'option KeepDataNames
Surcharge pour nouvelles actions de service web
Pour créer de nouveaux services web, il est possible de développer directement un nouveau Service Web Harmony (action des services) qui fera appel a un nouveau traitement Diva.
Il est également possible de créer des actions spécifiques a l'intérieur du service web existant, par exemple SYNCHRO_INFINITY_AGILEO ou WEB_SERVICE_INFINITY.
La réalisation se fait en deux surcharges : une pour aiguiller la demande d'action métier vers un module, l'autre pour traiter la demande
Surcharge pour router vers le module traitement
Pour qu'elles soient traitées par les Web Service Diva existant, il existe une ouverture dédiée vers une fonction
'A5TTSWAGIL / Traitement_specifique' pour a5ppswagil qui correspond a SYNCHRO_INFINITY_AGILEO
'A5TTSWINFINITY / SW_Infinity_JSON_Traitement_specifique' pour a5ppswinfinity qui correspond a WEB_SERVICE_INFINITY
Il faut donc ajouter dans ces fonctions les NOMS D'ACTION métier a traiter en complément du standard, et indiquer dans quel MODULE le traitement se fait.
Le nom d'action est nécessairement identique au nom de la fonction Diva qui effectue le traitement.
Exemple : on traite ici une nouvelle action métier MAFONCTIONXML qui va faire appel a la fonction MaFonctionXml dans le module A5UMSWAGIL.dhop
Surcharge pour le traitement
Le traitement prend en entrée la chaîne de paramètres reçus par le service web.
La chaine en retour doit indiquer le résultat du traitement, qu'il soit en réussite ou en échec, et pour quelles raisons.
Exemple : on traite ici la partie métier dans A5UMSWAGIL.dhop. La fonction reçoit un xml en entrée et construit un xml de sortie.
Paramétrage SW REST en cas de surcharge de recordSql
Le fichier DhsDivaltoServiceDivaApiRest_ParamERP.xml indique les options du traitement des appels REST de lecture par RecordSql .
RecordSql ERP
Pour un appel des recordSql standard ERP Infinity, ce paramétrage n'est pas utille, car le service web RecordSql va charger par défaut les compléments nécessaires.
Dans le cas d'une surcharge, il peut s'avérer nécessaire de compléter ce paramétrage
DhsDivaltoServiceDivaApiRest_ParamERP.xml.xml
<?xml version="1.0" encoding="utf-8"?>
<params>
<commontables>
<!-- <dhoq Name="gtrstab.dhoq" RecordSQL="TABLECOMMUNE" Read="1" /> -->
<!--<dhoq Name="pprsdos.dhoq" RecordSQL="PDOSSIER" Read="1" RecordSQLbis="DOSSIER"/> -->
<!--<dhoq Name="ccrsdos.dhoq" RecordSQL="DOSEXP" Read="1" /> -->
<!--<dhoq Name="qursdos.dhoq" RecordSQL="EXPERT_QUAL" Read="1" /> -->
<!--<dhoq Name="gmrsdos.dhoq" RecordSQL="EXPERT_GRM" Read="1" /> -->
<!--<dhoq Name="corsdos.dhoq" RecordSQL="EXPERT_CONT" Read="1" /> -->
<!--<dhoq Name="dorsdos.dhoq" RecordSQL="EXPERT_DDOC" Read="1" /> -->
<!--<dhoq Name="gtrsdos.dhoq" RecordSQL="DOSSIERCRM" Read="1" /> -->
<!-- <dhoq Name="wmrstab.dhoq" RecordSQL="TCOMMUN" Read="1" /> -->
</commontables>
<commonfields>
<!--<field Name="DOS" /> -->
<!--<field Name="DOSCPT" /> -->
<!--<field Name="ETB" /> -->
<!--<field Name="DEPO" /> -->
</commonfields>
<commonoptions>
<!-- <namepathobjets Value="Objets" /> -->
<!-- <namefileimplicites Value="ImplicitesDefaut.xml" /> -->
<!-- <namefileconnexions Value="connexions.xml" /> -->
<!-- <userdhoq Value="a5rsdos.dhoq" /> -->
<!-- <userrecordsql Value="UTILISATEUR" /> -->
<!-- <userwhere Value="Equal_User" /> -->
<!-- <userwherefield Value="USERX" /> -->
<!-- <authdhoq Value="a5rsdos.dhoq" /> -->
<!-- <authrecordsql Value="APPLIAUTORIS" /> -->
<!-- <authwhere Value="Equal_Userx" /> -->
<!-- <authwherefield Value="USERX" /> -->
<!-- <authfieldapplic Value="APPLIC" /> -->
<!-- <namerecordmz Value="MZ" /> -->
</commonoptions>
</params>
Balises COMMONTABLE
Après avoir chargé un utilisateur, le service web charge une liste de tables qui correspondent aux différents « flags et options » de l’utilisateur. Cces flags et options servent dans les requêtes sql, par exemple pour savoir si une table doit être lu dans le dossier spécifique de l’entreprise ou dans le dossier général 999. Ces valeurs servent donc dans les clés de recherche des requêtes sql.
C’est une liste, on peut donc ajouter des lignes a cette liste.L’ordre de lecture se fait selon l’ordre de cette liste.
Le but est de garder en mémoire toutes les noms « table.nom du champs » avec la « valeur du champ », pour toutes les tables qui sont décrites dans cette liste .
Exemple si la clé de recherche d’un au record sql est where TABLECOMMUNE .type001 = ‘1’ => on va pouvoir résoudre ce cas car on connait alors la valeur de TABLECOMMUNE .type001 pour cet utilisateur qui peut être 0 ou 1
Chaque ligne comporte :
le nom du dhog,
le nom de la table
read
1 => lire la table
0 => il n’y a pas de lecture de la table, cela sert si on veut désactiver une ligne mais sans perdre l’information que contenait cette ligne
RecordSQLbis => selon la version de l’erp ,le nom de la table à changée, si la table recordsql n’existe pas alors le moteur fait la recherche sur la table record sql bis
Balises COMMONFIELDS
Liste des champs que l'on souhaite charger en plus dans les recordsql pour avoir la bonne valeur par exemple MZ.DOS = ‘xxx’
Dans les requêtes sql, les clés se basent sur ce type de champ, on charge donc directement leurs valeurs
Balises COMMONOPTIONS
Liste des informations nécessaires pour charger et traiter les dhoq. Usage réservé
Paramétrage SW REST des environnements
Le fichier DhsDivaltoServiceDivaApiRest_ListENV.xml concerne la gestion des environnements REST.
Le paramétrage dans ce fichier est optionnel. Par défaut lors d'un appel du service web (qui se fait avec indication de l'environnement), les données de description des environnements sont chargées à partir de la base de registre windows.
Il est possible de gérer les environnements en dehors du mode regedit en mettant les valeurs des description des environnements
La requête d’authentification indique un environnement et le service web REST charge les valeurs de l’environnement
en lisant la base de registre, mais on peut mettre ces valeurs directement dans le xml DhsDivaltoServiceDivaApiRest_ListENV.xml
<?xml version="1.0" encoding="utf-8"?>
<params>
<envs>
<env Name="ERP213" Path="xxxxxxx,null,null, " Default="0" />
<env Value="ERP214" Path="xxxxxxx,nul … etc "/>
<env Value="ERP215" Forcer="1" />
</envs>
</params>
Name ou Value indique le nom de l’environnement
Path indique la ligne qui est comme celle qui est dans regedit au chapitre environnement
Avec on peut mettre
Default="1" ;indique l’environnement par défaut si la requête ne contient pas d’environnement
Ou bien ( mais pas les deux ca n’a pas de sens )
Forcer="1" ;indique qu’on veut toujours forcer l’environnement, le champ qui provient de la requête est ignoré et il est toujours remplacer par celui qui est écrant dans Name ou Value .
DhsDivaltoServiceDivaApiRest_ListENV.xml
<envs>
<!-- <env Name="ERP213" Path="xxxxxxx,null,null," Default="0" /> -->
<!-- <env Name="ERP214" Path="xxxxxxx,null,null," Default="1" /> -->
</envs>
Développement WebHook
Depuis une exécutions sur le serveur, un programme diva peut connaitre des informations de paramétrage, comme le numéro de webhook pour une action de service et inversement.
public function char GetWebHookAction (action,&err)
;permet de récupérr le code webhook à partir d'un code action service web
1 action A
1 err X
public function char GetWebHookActionNext (&err)
;permet de récupérer le suivant après un appel à GetWebHookAction lorqu'il y a plusieurs webhook pour la même action
1 err X
Il est possible d’appeler directement un webhook avec les instructions WebRequest