Présentation
...
Le système écrira une ligne dans
sw_sys_brokermessage
. Table à ne pas altérer.Le service
broker-message-gateway
parcours parcourt tous les projets et regarde s'il y a des messages à envoyer au serveurRabbitMQ
.Le service
JobCenter
crée les queues de messages dansRabitMQ
au démarrage et gère le dispatching, qui au final appel lescript d'endpoint
définis dans lenotifications managment
du studio.
...
Le nombre d'élément maximum de ce tableau pour un appel de script est défini par le paramètre 'Packet Pack size
' dans l'écran de configuration des notifications. Se référer à la page Traquer une table et un champ pour visualiser ce paramètre.
Anti-loop
Par défaut, un script appelé via datatracking
n'ira pas déclencher un nouvel appel lors de la modification d'une table. Ceci pourrait créer des boucles infinies.
Cependant, il existe une fonction SwingScript nommée DATA_TRACKING
permettant d'indiquer explicitement de déclencher le datatracking
sur une ligne.
A utiliser en connaissance de cause. Il faut être certain de maitriser le cycle d’exécution.
...
Vérifier dans la table
sw_sys_brokermessage
que le champlogs
n'est pas rempli.Vérifier les data du
bodyData
dans le champmessageBody
de la tablesw_sys_brokermessage
en faisant clique droitCopy content
et en l’enregistrant dans un fichier .txtUtiliser la fonctionnalité
script tester
directement depuis lestudio
afin de s’assurer de ne pas avoir d’erreur de script.
Exemple pratique
Cet extrait provient du standard.
Bloc de code | ||
---|---|---|
| ||
// Script d'endpoint // Nous récupérons la variable bodyData afin de la parser dans le script de parsing EXECUTE_SCRIPT_FOREACH_ROW( "SysNotification_Customer_ParseForEach", "json", "<varscript>bodyData</varscript>" ) // Script de parsing // Initialisation des variables contenant les data nécessaires du bodyData rowid = TRANSLATE( "<varscript>rowid</varscript>" ) action = TRANSLATE( "<varscript>action</varscript>" ) device_ID = TRANSLATE( "<varscript>device_ID</varscript>" ) entity = "customer" baseentity_ID = VARGET_DBSQL( "SELECT baseentity_ID FROM sw_data_baseentity WHERE codebaseentity = '<varscript>entity</varscript>'" ) messageToSubscribers = "" // Surcharge messageOverloadToSubscribers = CALL_SCRIPT( "SysNotificationOverload_Customer", rowid, action ) translationKeyToSubscribers = "" // Initialisation de variable dépendantes de l'entité principale. name, city, postalCode. entityDataQuery = TRANSLATE( " SELECT t.code<varscript>entity</varscript> AS entityCode, t.name, t.city, t.postalCode FROM sw_data_<varscript>entity</varscript> AS t WHERE <varscript>entity</varscript>_ID = '<varscript>rowid</varscript>' " ) VARINITIALIZE_SCRIPT_BYSQL( "<varscript>entityDataQuery</varscript>" ) // Echappement des appostrophes. name = REPLACE( "<varscript>name</varscript>", "'", "''" ) city = REPLACE( "<varscript>city</varscript>", "'", "''" ) // Condition sur chaque actions IF( EQUALS( action, "1" ) )THEN actionKey = "insert" ENDIF IF( EQUALS( action, "2" ) )THEN actionKey = "update" translationKeyToSubscribers = TRANSLATE( "NotificationModel_<varscript>entity</varscript>_<varscript>actionKey</varscript>" ) ENDIF IF( EQUALS( action, "4" ) )THEN actionKey = "delete" ENDIF IF( LEN( messageOverloadToSubscribers ) > 0 )THEN messageToSubscribers = TRANSLATE( "<varscript>messageOverloadToSubscribers</varscript>" ) ENDIF // Notification des subscribers IF( ( LEN( messageToSubscribers ) > 0 ) || ( LEN( translationKeyToSubscribers ) > 0 ) )THEN CALL_SCRIPT( "FuncSysNotification_NotifySubscription", actionKey, device_ID, entity, rowid, baseentity_ID, "NOTIFICATION", messageToSubscribers, translationKeyToSubscribers, "REPLACE( REPLACE( REPLACE( REPLACE( ltMessage.text, '%codecustomer%', '<varscript>entityCode</varscript>' ), '%name%', '<varscript>name</varscript>' ), '%city%', '<varscript>city</varscript>' ), '%postalCode%', '<varscript>postalCode</varscript>' )") ENDIF |