WebHooks Surcharges

Surcharge des définitions

Correspond à la définition du webhook.
Toutes les surcharges seront dans les scripts « WebhookDefinitionOverload_xxxx ».
Pour le mode LIST et GET, permet :

  • d’exclure des champs que l’on ne veut jamais retourner.

  • de définir la valeur à retourner dans le champ

Pour le mode LIST, permet :

  • de définir des filtres spécifiques

  • de définir des tris spécifiques

Pour le mode PUT, permet :

  • de donner des noms plus explicites au champs à renseigner

  • de rendre obligatoire un champ et sa valeur

  • de ne pas insérer/mettre à jour la valeur d'un champ

  • de définir un champ comme obsolète

Pour le mode DEFINITION, permet :

  • de lister les valeurs d'un champ de type foreign

  • d'ajouter des champs additionnels en plus du code et du libellé

Par défaut, tous les champs sont présents dans le webhook, donc également les champs surchargés.

Squelette de la surcharge

WebhookDefinitionOverload_xxx // WebhookDefinitionOverload_xxx // @Description => Overload webhook definition languageCode = VARGET_SHELL( "languageCode", "WebhookDefinition" ) specificOverload = TRANSLATE( " { 'extendedFieldsListToExclude': '', 'fieldsList': { }, strictFilters: [ ], 'outOfMainTableFields': [ ] } " ) RETURN( "<varscript>specificOverload</varscript>" )

Liste des champs à exclure

Permet de lister les champs étendus à exclure pour les webhooks en mode LIST et GET (par défaut on retourne tous les champs).

Syntaxe

'extendedFieldsListToExclude': 'field1,field2,field3,...'

Exemple

Je ne veux pas retourner les champs serialnumber et location

'extendedFieldsListToExclude': 'serialnumber,location'

Champs

Permet de lister des champs qui demandent un traitement spécial pour être affichés en mode LIST et GET ou pour la mise à jour en mode PUT. Par défaut pour les clés étrangères spécifiques on retourne toujours le code de la table étrangère. Il n’y a donc pas besoin de traitement spécifique pour ces cas si le code suffit.

Syntaxe

Description syntaxe

Propriété

Mode utilisation

Description

Propriété

Mode utilisation

Description

fieldsList

type

LIST, GET

Type du champ dans le résultat (bloc "fieldList"). En standard on a : varchar, text, int, double, bool, datetime, timestamp, foreignkey, mediumblob.

length

LIST, GET

Longueur du champ dans le résultat (bloc "fieldList)". En standard renseigné pour varchar, text.

label

LIST, GET

Libellé du champ dans le résultat (bloc "fieldList)". En standard on retourne la clé de traduction en fonction du code langue du json.

targetTableName

LIST, GET

Nom de la table liée pour les clés étrangères. A utiliser uniquement pour un champ spécifique qui pointe vers une table standard.

targetFieldName

LIST, GET

Nom du champ à afficher pour les clés étrangères.

fieldNameToShow

LIST, GET

Permet de changer le nom du champ en retour au lieu d’avoir le nom du champ en base de données. Ex : baseuser_ID -> Utilisateur du client

alias

PUT

Permet de changer le du nom du champ à renseigner afin qu’il soit plus explicite. L’alias ne doit pas comporter d’espaces. Permet de se détacher de la base de données. Ex : city -> Ville

mandatory

PUT

Permet de rendre un champ obligatoire dans le json. Valeurs possibles : 0, 1 (Par défaut on aura : 0 - Champ non obligatoire)

cannotBeNull

PUT

Permet de rendre la valeur d'un champ obligatoire dans le json (c'est-à-dire que la valeur ne peut être à chaine vide ou null). Valeurs possibles : 0, 1 (Par défaut on aura : 0 - Valeur du champ non obligatoire)

canGet

LIST, GET

Permet d'exclure un champ. Valeurs possibles : 0, 1 (Par défaut on aura : 1 - Champ retourné).

canInsert

PUT

Permet de ne pas insérer la valeur d'un champ lors d'un ajout. Valeurs possibles : 0, 1 (Par défaut on aura : 1 - Insérer valeur)

canUpdate

PUT

Permet de ne pas mettre à jour la valeur d'un champ lors d'une mise à jour. Valeurs possibles : 0, 1 (Par défaut on aura : 1 - Mettre à jour valeur)

deprecated

PUT

Permet de ne plus prendre en compte un champ devenu obsolète. Il ne sera ni vérifié, ni inséré, ni mis à jour. Valeurs possibles : 0, 1 (Par défaut on aura : 0 - Non déprécié)

checkForeign

PUT

Permet de ne pas contrôler la valeur d'une foreignkey. Valeurs possibles : 0, 1 (Par défaut on aura : 1 : Contrôler la foreignkey)

canGetDefinitionList

DEFINITION

Permet de lister les valeurs d'une foreignkey. Valeurs possibles : 0, 1 (Par défaut on aura : 0 - Ne pas lister les valeurs)

definitionLabelFieldName

DEFINITION

Permet de donner le champ à utiliser pour afficher le libellé dans la liste. (Si non renseigné on utilisera le champ "label" s'il existe dans la table). Possibilité d'utiliser des fonctions mysql pour par exemple concaténer le nom et le prénom dans la liste des utilisateurs : 'definitionLabelFieldName': 'CONCAT_WS(' ',lastName,firstName)'

definitionFilter

DEFINITION

Permet de filtrer les enregistrements retournés. Ex pour ne pas afficher les ressources matérielles et les équipes dans la liste des utilisateurs : 'definitionFilter': 'resourcetype_ID IS NULL AND teamtype_ID IS NULL'

definitionExtraFields

DEFINITION

Permet d'ajouter des champs additionnels en plus du code et du libellé

dataType

DEFINITION, PUT

Permet de donner le type de data pour une foreignkey pointant vers une table generictype afin de filtrer et contrôler les données

foreignParent

LIST, GET

Nom de la clé étrangère dans la table principale. Cas très particulier où on veut pointer vers une table de niveau +2. Sera combiné avec « outOfMainTableFields » Ex d’utilisation en standard : sw_data_intervention -> sw_datacustomeraddress -> sw_data_customer (ici « customeraddress_ID » pour notre exemple) Permet donc dans notre exemple de retourner une info de la table « sw_data_customer »

outOfMainTableFields (utilisé uniquement en combinaison avec foreignParent)

fieldname

LIST, GET

Nom de la clé étrangère dans la table de niveau +1 (ici « customer_ID » pour notre exemple)

tableName

LIST, GET

Nom de la table liée de niveau +1 (ici « sw_data_customeraddress » pour notre exemple)

Pour rappel en mode LIST et GET la réponse du webhook prend la forme ci-dessous :

Exemples impactant la structure du json

  • J’ai un champ spécifique « Catégorie tarif » (final_pricecategory_ID_tarCod) que je veux rendre obligatoire dans le json et dont la valeur doit être renseignée :

-> Résultat :

Si le champ n'est pas présent dans le json :

Si la valeur du champ n'est pas renseignée dans le json :

Exemples impactant le réponse dans le bloc "data": [...]

Ce bloc contient la valeur des champs retournés.

  • Je ne veux pas retourner les champs serialnumber et location

On pourrait considérer que ceci est redondant avec 'extendedFieldsListToExclude', mais il s'agit ici d'une autre façon d'arriver à la même chose mais en plus il permet d'exclure les champs pour le 'resultType' en 'simple'.

  • Pour les champs « codecustomer », « name » et « baseuser_ID », je veux afficher « Code du client », « Nom du client » et « Utilisateur lié au client » :

-> Résultat :

Avant :

Après :

  • J’ai un champ standard « Utilisateur » (baseuser_ID) qui pointe vers une table standard (sw_data_baseuser) et qui affiche par défaut le « nom » (lastName) et je veux le changer pour afficher le « code » (CodeBaseuser) :

Si je veux afficher les « initiales » (initials) :

-> Résultat :

Avant :

Après avec code :

Après avec initiales :

  • J’ai un champ spécifique « Catégorie tarif » (final_pricecategory_ID_tarCod) qui pointe vers une table standard (sw_data_pricecategory) pour lequel je veux afficher le « code » de cette table (CodePricecategory) :

Si je veux afficher le « libellé » (label) :

-> Résultat :

Avec code :

Avec libellé :

  • J’ai un champ spécifique « Code remise » (final_t035_ID) qui pointe vers une table spécifique (sw_data_final_t035) pour lequel je veux afficher le « libellé » de cette table (final_lib) :

Si je veux afficher le code (codefinal_t035) : je n’ai rien à faire en spécifique, il s’affichera tout seul (si jamais je ne veux pas l’afficher il faudra l’exclure dans « extendedFieldsListToExclude »)

-> Résultat :

Avec code (automatique) :

Avec libellé :

  • Exemple 1 du cas particulier de la clé étrangère de niveau + 2 (cas traité en standard)

Depuis la table intervention, je veux remonter vers la table des adresses client puis vers le client pour afficher son code :

-> Résultat :

  • Exemple 2 du cas particulier de la clé étrangère de niveau + 2

Depuis la table client, je veux remonter vers la table des groupes clients puis vers le client principal du groupe pour afficher son siret et renommer l’intitulé :

sw_data_customer.customergroup_ID -> sw_data_customergroup

sw_data_customergroup.customer_ID -> sw_data_customer

-> Résultat :

Exemples impactant le réponse dans le bloc "fieldList": [...]

Ce bloc contient la description des champs retournés.

Pour rappel il n'y a aucun contrôle de cohérence. A vous de définir vos besoins selon l'interprétation que vous voulez en faire.

Ce bloc "fieldList" peut être utile pour construire une grille d'affichage en utilisant le label pour le titre de la colonne, le type pour formater la colonne et length pour définir la largeur de la colonne.

  • Je veux changer le type, la longueur et le libellé du champ « name »

-> Résultat :

Avant :

Après :

  • Je veux changer le libellé du champ « name » en fonction d'une clé de traduction par rapport à la langue courante du json :

-> Résultat :

  • Je veux changer le libellé du champ « name » en fonction d'une clé de traduction en allemand :

-> Résultat :

  • Je veux définir un nouveau type et la vrai longueur pour le champ « generictype_ID_country », qui en standard est une foreignkey forcément sans longueur :

-> Résultat :

Avant :

Après :

Exemples impactant l'ajout et la mise à jour

  • En ajout/mise à jour je veux donner des noms plus explicites pour certains champs :

-> Résultat :

Avant :

Après :

  • J’ai un champ spécifique « Catégorie tarif interne » (final_pricecategory_ID_tarCodInternal) pour lequel je veux interdire toute mise à jour que ce soit en ajout ou en mise à jour d'enregistrement même si une valeur est passée dans le json car il est géré en interne :

  • J'ai un champ spécifique « Code test » (final_test_ID), que je ne veux plus gérer car il est obsolète :

Exemples impactant la définition

  • J’ai un champ spécifique « Catégorie tarif interne » (final_pricecategory_ID_tarCodInternal) pour lequel je veux lister toutes les valeurs (code et libellé de la table sw_data_pricecategory) :

-> Résultat :

  • En plus du code et du libellé, je veux savoir s'il s'agit d'un tarif particulier (champ tarifPart de la table sw_data_pricecategory) et je veux lui donner un nom lisible "tarif particulier" :

-> Résultat :

  • En complément, je veux également retourner la valeur d'un champ (originalCode) qui correspond à une foreign (champ generictype_ID_tarifType de la table sw_data_pricecategory) :

-> Résultat :

  • Si je veux filtrer les valeurs retournées uniquement sur les tarifs dont le champ « Tarif particulier » (tarifPart) est à 0 :

Filtres

Permet de rajouter des filtres spécifiques pour interroger les données en mode LIST.

Syntaxe

Description syntaxe

fieldName : nom du champ sur lequel on veut filtrer des données

operator : opérateur de filtre

Les opérateurs disponibles sont :

Opérateur

Correspondance MySql

Opérateur

Correspondance MySql

Null

IS NULL

NotNull

IS NOT NULL

Equal

=

NotEqual

<>

Greater

>

GreaterOrEqual

>=

Less

<

LessOrEqual

<=

Contains

LIKE %...%

In

IN

Between

BETWEEN

StartsWith

LIKE ...%

EndsWith

LIKE %...

Pour un filtre sur une clé étrangère l’opérateur doit toujours avoir la valeur « In »

targetField : ID de la table principale. A utiliser uniquement pour les filtres avec clé étrangère.

query : requête de filtre avec jointure vers la table étrangère qui doit retourner l’ID de la table principale. A utiliser uniquement pour les filtres avec clé étrangère.

Exemples

  • Je veux filtrer mes clients sur un champ standard « N° de téléphone » (phoneNumber) :

-> Appel webhook avec le filtre :

  • Je veux filtrer mes clients sur un champ standard « Date de fin des congés » (vacationEnd) sur une date précise ou une plage de dates :

Remarque : on peut voir ici la manière de cumuler plusieurs filtres sur le même champ en utilisant la propriété "targetField" pour le 2eme filtre.

-> Appel webhook avec le filtre sur une date :

-> Appel webhook avec le filtre sur une plage de dates :

  • Je veux filtrer mes clients sur un champ spécifique « Catégorie tarif » (final_pricecategory_ID_tarCod) qui pointe vers une table standard (sw_data_pricecategory) :

-> Appel webhook avec le filtre :

  • Je veux filtrer mes clients sur un champ spécifique « Code remise » (final_t035_ID) qui pointe vers une table spécifique (sw_data_final_t035) :

-> Appel webhook avec le filtre :

  • Je veux filtrer mes clients sur un champ personnalisé « Capital (Keuros) » (v_A101) avec l’opérateur >= :

-> Appel webhook avec le filtre :

Tris

Permet de rajouter des tris spécifiques pour interroger les données en mode LIST.

Syntaxe

Description syntaxe

name : nom du tri, il doit être unique, il peut être intéressant de reprendre le nom des champs et l'ordre du tri comme mnémonique (non obligatoire)

field : nom du champ sur lequel on veut trier les données

order : ordre de tri

Les ordres de tris disponibles sont :

Ordre

Description

Ordre

Description

asc

tri ascendant

desc

tri descendant

Les tris ne sont possibles que sur les champs de la table principale du webhook.

Exemples

  • Je veux trier mes clients sur les champs standards « Code postal » (postalCode) et « Ville » (city) de manière ascendante :

-> Appel webhook avec le tri :

  • Je veux trier mes clients sur les champs standards « Date de fin des congés » (vacationEnd) descendante et sur le « Nom » (name) ascendant :

-> Appel webhook avec le tri :

  • Je veux trier mes clients sur un champ personnalisé « Capital (Keuros) » (v_A101) de manière descendante :

-> Appel webhook avec le filtre :

Surcharge des règles métier

Correspond au contrôle des règles métiers, qui par exemple peut interdire un ajout/mise à jour si certaines conditions ne sont pas respectées.

Cette surcharge permet également d'initialiser des champs selon le besoin.

Toutes les surcharges seront dans les scripts « WebhookRules_xxxx ».

Squelette de la surcharge

Description des paramètres

En entrée :

  • arg1 : code (pas exploité pour l’instant)

  • arg2 : méthode : PUT, GET, LIST, DELETE

  • arg3 : json de l’entité concernée (jsonCustomer, jsonContract, …)

  • arg4 : objet vide, qui permet d'initialiser des champs

En sortie :

  • Si toutes les règles spécifiques mise en place sont valides alors le script doit retourner « reponse » avec la valeur « 1 » (se fait de manière implicite si non précisé).

  • Si au moins une règle spécifique mise en place n’est pas valide alors le script doit retourner « response » avec la valeur « 0 » et un message d’erreur « errorMessage ».

Exemples pour le contrôle des règles métier

  • Je ne veux autoriser l’ajout/mise à jour d’un enregistrement dans « sw_data_customer », uniquement s’il s’agit d’un prospect :

-> Résultat en retour si la règle n’est pas respectée :

  • Je ne veux autoriser l’ajout/mise à jour d’un enregistrement dans « sw_data_customer », uniquement si un champ personnalisé « Note administrative » (CLI_50) est >= 8.

Pour rappel les champs personnalisés, peuvent être mis à jour par le bloc json « dynamicFields ».

Avec le script complémentaire « FINAL_WebhookRulesDynamicFields_customer » utilisé dans « EXECUTE_SCRIPT_FOREACH_ROW » pour boucler sur tous les dynamicfields :

-> Résultat en retour si la règle n’est pas respectée :

Exemples pour l’initialisation des champs

  • Je veux mettre un commentaire dans le champ « comment » de « sw_data_customer » si certaines informations sont incomplètes.

  • Je veux initialiser un champ spécifique « final_contract_ID_default » de « sw_data_customer ».

Pour initialiser un champ de type foreignKey, il est impératif de passer le code de l’enregistrement et pas son ID.

Surcharge avant exécution webhook

Cette surcharge sera appelée entre le contrôle de validité et des règles du webhook et son exécution.

Elle sera dans le script « WebhookOverload_Before ».

Squelette de la surcharge

Squelette de la surcharge :

Description des paramètres

En entrée :

  • arg1 : table principale du webhook

  • arg2 : code de l’enregistrement pour les méthodes GET et DELETE (non utilisé pour les méthodes LIST et PUT)

  • arg3 : nom de la méthode (GET, LIST, PUT, DELETE)

  • arg4 : json du header

  • arg5 : json de l’entité concernée (jsonCustomer, jsonContract, …) pour la méthode PUT (non utilisé pour les méthodes GET, LIST et DELETE)

  • arg6 : code résultat du contrôle de validité (0 : Echec / 1 : Ok)

  • arg7 : message d’erreur si le contrôle de validité a échoué

  • arg8 : objet contenant toutes les données, si les autres arguments ne suffisent pas

  • arg9 : entité qui permet de différencier des webhooks différents qui utilisent la même table

En sortie : /

Exemple d'utilisation

  • Je veux loger les informations dans une table spécifique « sw_data_final_log » :

 

Surcharge après exécution webhook

Cette surcharge sera appelée après l’exécution d’un webhook.

Elle sera dans le script « WebhookOverload_After ».

Squelette de la surcharge

Description des paramètres

En entrée :

  • arg1 : table principale du webhook

  • arg2 : code de l’enregistrement pour les méthodes GET et DELETE (non utilisé pour les méthodes LIST et PUT)

  • arg3 : nom de la méthode (GET, LIST, PUT, DELETE)

  • arg4 : json de l’entité concernée (jsonCustomer, jsonContract, …) pour la méthode PUT (non utilisé pour les méthodes GET, LIST et DELETE)

  • arg5 : json en sortie pour les méthodes GET et LIST (non utilisé pour les méthodes PUT et DELETE)

  • arg6 : code résultat de l’exécution du webhook (0 : OK / 1 : Echec)

  • arg7 : message d’erreur si l’exécution du webhook a échoué

  • arg8 : action effectuée (insert / update / select / delete)

  • arg9 : objet contenant toutes les données, si les autres arguments ne suffisent pas

  • arg10 : entité qui permet de différencier des webhooks différents qui utilisent la même table

En sortie : /

Exemple d'utilisation

  • Je veux loger les informations dans une table spécifique « sw_data_final_log »