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.
Toutes les surcharges seront dans les scripts « WebhookRules_xxxx ».
Attention les règles métier ne sont appelées que pour la méthode « PUT ».
Squelette de la surcharge:
// WebhookRulesOverload_xxxx
// @description => Overload rules with yours. Return a response and a errorMessage if needed.
//
// @code => Row code. Not exploited at the moment.
// @method => Method used. Only PUT method at the moment.
// @dataInput => Depending of the method. Contains json for the PUT method.
//
// @returns => Response JSON document with two properties :
// response [ required ] => 1 IF all rules are valid or 0 IF at least one rule is not valid
// errorMessage [ optional ] => IF response equal to 0, THEN we display your errorMessage
code = TRANSLATE( "<varscript>arg1</varscript>" )
method = TRANSLATE( "<varscript>arg2</varscript>" )
dataInput = TRANSLATE( "<varscript>arg3</varscript>" )
jsonResponse = DOCUMENT_CREATE_DOCUMENT()
// To complete
…
response = DOCUMENT_SERIALIZE( jsonResponse, "json" )
RETURN( response )
Description des paramètres :
Paramètre | Déscription |
---|---|
En entrée | |
arg1 | code (pas exploité pour l’instant) |
arg2 | méthode (aujourd’hui uniquement la méthode « PUT » est implémentée) |
arg3 | json de l’entité concernée (jsonCustomer, jsonContract, …) |
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 :
- Je ne veux autoriser l’ajout/mise à jour d’un enregistrement dans « sw_data_customer », uniquement s’il s’agit d’un prospect :
IF( EQUALS( method, "PUT" ) )THEN
jsonCustomer = JSON_GET_FROM_PATH( dataInput, "customer" )
IF ( JSON_EXISTS_FROM_PATH( jsonCustomer, "generictype_ID_customerType" ) ) THEN
generictype_ID_customerType = JSON_GET_FROM_PATH( jsonCustomer, "generictype_ID_customerType" )
IF( EQUALS( generictype_ID_customerType , "CUSTOMER_TYPE-CTP" ) == 0 )THEN
DOCUMENT_ADD_PROPERTY_TO_OBJECT( jsonResponse, "response", "0" )
DOCUMENT_ADD_PROPERTY_TO_OBJECT( jsonResponse, "errorMessage", "Specific rule error: Le type doit être prospect (Valeur envoyée : <varscript>generictype_ID_customerType</varscript>)" )
response = DOCUMENT_SERIALIZE( jsonResponse, "json" )
RETURN( response )
ENDIF
ENDIF
ENDIF
-> 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 ».
IF( EQUALS( method, "PUT" ) )THEN
jsonCustomer = JSON_GET_FROM_PATH( dataInput, "customer" )
IF ( JSON_EXISTS_FROM_PATH( jsonCustomer, "dynamicfields" ) ) THEN
jsonDynamicFields = JSON_GET_FROM_PATH( jsonCustomer, "dynamicfields" )
VARSET_SHELL( "errorMessage", "", "FINAL_RulesDynamicFields" )
EXECUTE_SCRIPT_FOREACH_ROW( "FINAL_WebhookRulesDynamicFields_customer", "json", jsonDynamicFields )
errorMessage = VARGET_SHELL( "errorMessage", "FINAL_RulesDynamicFields" )
IF (LEN( "<varscript>errorMessage</varscript>" ) > 0) THEN
error = 1
DOCUMENT_ADD_PROPERTY_TO_OBJECT( jsonResponse, "response", "0" )
DOCUMENT_ADD_PROPERTY_TO_OBJECT( jsonResponse, "errorMessage", "Specific rule error: <varscript>errorMessage</varscript>" )
ENDIF
VARDELGROUP_SHELL( "FINAL_RulesDynamicFields" )
IF EQUALS( "<varscript>error</varscript>", "1" ) THEN
response = DOCUMENT_SERIALIZE( jsonResponse, "json" )
RETURN( response )
ENDIF
ENDIF
ENDIF
Avec le script complémentaire « FINAL_WebhookRulesDynamicFields_customer » utilisé dans « EXECUTE_SCRIPT_FOREACH_ROW » pour boucler sur tous les dynamicfields :
IF EQUALS( "<varscript>fieldName</varscript>", "CLI50" )THEN
IF( EQUALS( "<sql>SELECT '<varscript>fieldValue</varscript>' < 8 </sql>", "1" ) ) THEN
VARSET_SHELL( "errorMessage", "La note administrative du client est inférieure à 8 (champ : <varscript>fieldName</varscript>, valeur envoyée : <varscript>fieldValue</varscript>)", "FINAL_RulesDynamicFields" )
ENDIF
RETURN("breakforeach")
ENDIF
-> Résultat en retour si la règle n’est pas respectée :
Surcharge avant exécution du 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 :
// WebhookOverload_Before // @Description => A script to use before webhook execution // // @tableName => Name on wich table webhook will proceed // @code => Row code. Can be empty depending of the method. It is empty for LIST || PUT. // GET: contains code link to the row to be returned // DELETE: contains code link to the row to be deleted // @method => Method used. Can be GET || LIST || PUT || DELETE // @headerInput => Header input // @dataInput => Data input. Can be empty depending of the method. It is empty for GET || LIST || DELETE. // PUT: contains data to be inserted // @resultCode => IF webhook execution will fail, resultCode is equal to 0. Otherwise, 1. // @errorMessage => Error message associated to the code // // @Returns => Void tableName = TRANSLATE( "<varscript>arg1</varscript>" ) code = TRANSLATE( "<varscript>arg2</varscript>" ) method = TRANSLATE( "<varscript>arg3</varscript>" ) headerInput = TRANSLATE( "<varscript>arg4</varscript>" ) dataInput = TRANSLATE( "<varscript>arg5</varscript>" ) resultCode = TRANSLATE( "<varscript>arg6</varscript>" ) errorMessage = TRANSLATE( "<varscript>arg7</varscript>" ) // For specific case, markForExport property can be changed here. // To do it, a variable is available // VARSET_SHELL( "markForExport", "Can be 0, 1, 2", "WebhookHeader" ) // IF resultCode = 0, THEN all data are empty, except errorMessage. IF( EQUALS( resultCode, "1" ) )THEN ENDIF
Description des paramètres :
Paramètre | Déscription |
---|---|
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é |
En Sortie | |
Aucun |
Exemple d'utilisation :
- Je veux créer une journalisation des informations dans une table spécifique "sw_data_final_log" :
dataInput = REPLACE("<varscript>dataInput</varscript>",";",",")
msg = "message="
msg = CONCAT( msg, "tableName = <varscript>tableName</varscript>-" )
msg = CONCAT( msg, "code = <varscript>code</varscript>-" )
msg = CONCAT( msg, "method = <varscript>method</varscript>-" )
msg = CONCAT( msg, "headerinput = <varscript>headerinput</varscript>-" )
msg = CONCAT( msg, "datainput = <varscript>datainput</varscript>-" )
msg = CONCAT( msg, "resultcode = <varscript>resultcode</varscript>-" )
msg = CONCAT( msg, "errormessage = <varscript>errormessage</varscript>" )
VARADD_DB( "sw_data_final_log", msg )
Surcharge après l'exécution du Webhook
Cette surcharge sera appelée après l'exécution du Webhook. Elle sera dans le script « WebhookOverload_After ».
Squelette de la surcharge :
// WebhookOverload_After // @Description => A script to use after webhook execution // // @tableName => Name on wich table webhook proceeded // @code => Row code. Can be empty depending of the method. It is empty for LIST || PUT. // GET: contains code link to the returned row // DELETE: contains code link to the deleted row // @method => Method used. Can be GET || LIST || PUT || DELETE // @dataInput => Data input. Can be empty depending of the method. It is empty for GET || LIST || DELETE. // PUT: contains data inserted // @dataOuput => Data ouput. Can be empty depending of the method. It is empty for PUT || DELETE. // GET || LIST: contains data returned // @resultCode => IF webhook execution failed, resultCode is equal to 1. Otherwise, 0. // @errorMessage => Error message associated to the code // // @Returns => Void tableName = TRANSLATE( "<varscript>arg1</varscript>" ) code = TRANSLATE( "<varscript>arg2</varscript>" ) method = TRANSLATE( "<varscript>arg3</varscript>" ) dataInput = TRANSLATE( "<varscript>arg4</varscript>" ) dataOutput = TRANSLATE( "<varscript>arg5</varscript>" ) resultCode = TRANSLATE( "<varscript>arg6</varscript>" ) errorMessage = TRANSLATE( "<varscript>arg7</varscript>" )
Description des paramètres :
Paramètre | Déscription |
---|---|
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 du contrôle de validité (0 : OK / 1 : Echec) |
arg7 | message d’erreur si l'exécution du Webhook a échoué |
En Sortie | |
Aucun |
Exemple d'utilisation :
- Je veux créer une journalisation des informations dans une table spécifique "sw_data_final_log" :
dataInput = REPLACE("<varscript>dataInput</varscript>",";",",")
dataOutput = REPLACE("<varscript>dataOutput</varscript>",";",",")
msg = "message="
msg = CONCAT( msg, "tableName = <varscript>tableName</varscript>-" )
msg = CONCAT( msg, "code = <varscript>code</varscript>-" )
msg = CONCAT( msg, "method = <varscript>method</varscript>-" )
msg = CONCAT( msg, "datainput = <varscript>datainput</varscript>-" )
msg = CONCAT( msg, "dataoutput = <varscript>dataoutput</varscript>-" )
msg = CONCAT( msg, "resultcode = <varscript>resultcode</varscript>-" )
msg = CONCAT( msg, "errormessage = <varscript>errormessage</varscript>" )
VARADD_DB( "sw_data_final_log", msg )