Version minimum

Date de mise à jour

5.4 / 5.5 / 5.6 / 5.7 / 6.0 (selon le besoin)

Fonctionnalité

Sur le même principe que les webhooks qui permettent à un logiciel externe de mettre à jour des données dans Divalto weavy, on veut cette fois que Divalto weavy mette à jour des données dans un logiciel externe par l’intermédiaire notamment de webservices.

Tables

Champs

Les champs suivis sont ceux dont « DataTracking » est coché dans le dictionnaire pour la table que l’on veut gérer

Exemple :

Variables

Fonctionnement

Alimentation de la FIFO

Traitement de la FIFO

Les lignes de la FIFO dont le statut est A traiter ou En erreur sont traitées selon leur ordre d'arrivée (First In First Out).
Si une ligne est en erreur, on ne traite pas les lignes suivantes. Après n tentatives en échec (variable ExternalDataUpdateAsync.Retries) un mail est envoyé à un administrateur (variable Portal.Administrator.Email).

Exemple d'email :

Les lignes de la FIFO peuvent être traitées de plusieurs manières :

Gestion de la FIFO

Une console d'administration appelée « Echanges externes » est disponible dans le menu « Administration ».
Elle permet de suivre le traitement des enregistrements de la FIFO avec possibilité de télécharger les json d'origine (données de la table weavy concernée) et le json envoyé à l'application externe.
On peut également statuer sur les éventuels enregistrements en erreur avec possibilité de :

La possibilité est également donnée de lancer le traitement manuellement après avoir statué sur les erreurs (Bouton « Lancer le traitement des lignes »).

Paramétrage

L'interfaçage avec un logiciel externe demande forcément du scripting.
A cet effet il a été prévu plusieurs fonctions de surcharge afin de construire les modèles de données et de les transmettre :

Exemple de script à surcharger pour les équipements :

// ManageExtDataUpdateAsyncOverload_Equipment
// @description                 => Manage equipment data to transmit on external software.
//
// @rowCode                     => codeequipemnt
// @rowID                       => equipment_ID
// @action                      => INSERT, UPDATE, DELETE
// @status                      => status in the fifo table : TO_BE_TREATED, ERROR
// @dataEntity                  => data from sw_data_equipment in json format
// @manualPreemptive            => user wait of infos (0/1)
// @origin                      => to identify the origin of the data
// @externaldataupdateasync_ID  => current fifo ID
// @entityBeforeValues          => json of values before change (depends if property DataTracking of the column is set in dictionary)
// @entityAfterValues           => json of values after change (depends if property DataTracking of the column is set in dictionary)
//
// @returns                     => 0 : error / 1 : ok / 2 : ignored
//

rowCode                     = TRANSLATE( "<varscript>arg1</varscript>" )
rowID                       = TRANSLATE( "<varscript>arg2</varscript>" )
action                      = TRANSLATE( "<varscript>arg3</varscript>" )
status                      = TRANSLATE( "<varscript>arg4</varscript>" )
dataEntity                  = TRANSLATE( "<varscript>arg5</varscript>" )
manualPreemptive            = TRANSLATE( "<varscript>arg6</varscript>" )
origin                      = TRANSLATE( "<varscript>arg7</varscript>" )
externaldataupdateasync_ID  = TRANSLATE( "<varscript>arg8</varscript>" )
entityBeforeValues          = TRANSLATE( "<varscript>arg9</varscript>" )
entityAfterValues           = TRANSLATE( "<varscript>arg10</varscript>" )

dataSent              = VARGET_SHELL( "dataSent", "ManageExtDataUpdateAsync" )
lastError             = VARGET_SHELL( "lastError", "ManageExtDataUpdateAsync" )
jsonDocReturnedInfos  = VARGET_SHELL( "jsonDocReturnedInfos", "ManageExtDataUpdateAsync" )


// To complete in overload


lastError = "Not supported in standard. You must manage the equipment data to sent in overload." // comment in overload

IF ( manualPreemptive == "1" ) THEN
  //if manualPreemptive we can return infos to user in json format
  //resultOk : 1=Ok, 0=Error
  //errorMessage : error message
  //returnedCode : code
  //returnedDetails : object of details
  //DOCUMENT_SET_PROPERTY_TO_OBJECT( jsonDocReturnedInfos, "resultOk", ... )
  //DOCUMENT_SET_PROPERTY_TO_OBJECT( jsonDocReturnedInfos, "errorMessage", ... )
  //DOCUMENT_SET_PROPERTY_TO_OBJECT( jsonDocReturnedInfos, "returnedCode", ... )
  //DOCUMENT_SET_PROPERTY_TO_OBJECT( jsonDocReturnedInfos, "returnedDetails", "property1", ... )
  //DOCUMENT_SET_PROPERTY_TO_OBJECT( jsonDocReturnedInfos, "returnedDetails", property2 ... )
ENDIF

VARSET_SHELL( "lastError", lastError , "ManageExtDataUpdateAsync" )
VARSET_SHELL( "dataSent", dataSent , "ManageExtDataUpdateAsync" )

RETURN( "0" ) // to be changed in overload (0 : error / 1 : ok)

Particularités

Une liaison avec Divalto infinity est implémentée en standard.
Les fonctions de script ont été surchargées au niveau DIVINF du master infinity afin de construire le json, d'appeler le webservice infinity et de gérer le retour.

Sont gérés :

Il existe une fonction de script DIVINF_Func_GetInfinityWebServiceInfo qui retourne les informations nécessaires au lancement des webservices infinity.
Elle permet de retourner :

  • URL du webservice : Cette url est enregistrée dans la table sw_data_externalurl avec le code "WSDIVA". Elle est paramétrée lors du provisioning dans infinity (zoom des chemins). Elle est importée dans weavy par ControlCenter External URL vX.6 puis backend 20. Base Info - ExternalUrl.

  • Action du webservice : cette action est définie en dur avec WEB_SERVICE_INFINITY. S'il faut la modifier il faudra surcharger cette fonction.

// DIVINF_Func_GetInfinityWebServiceInfo
// @description => Get infos for webservice infinity
// @returns     => 0 : error / 1 : ok
// @returned variables
// InfinityWebServiceUrl : Infinity server URL for the call of the WebService
// InfinityWebServiceAction : Infinity diva action to push in the web method
// InfinityWebServiceErrorMsg : Error message if returns is 0

InfinityWebServiceUrl     = VARGET_DBSQL( "select url from sw_data_externalurl where codeexternalurl='WSDIVA'" )
InfinityWebServiceAction  = "WEB_SERVICE_INFINITY"
InfinityWebServiceErrorMsg   = ""
ret = 1

IF (EQUALS( InfinityWebServiceUrl, "" )) THEN
  InfinityWebServiceErrorMsg = "Infinity server URL for the call of the WebService is not informed (Table=sw_data_externalurl, Code='WSDIVA')"
  ret = 0
ENDIF

VARSET_SHELL( "InfinityWebServiceUrl", InfinityWebServiceUrl, "InfinityWSinfo" )
VARSET_SHELL( "InfinityWebServiceAction", InfinityWebServiceAction, "InfinityWSinfo" )
VARSET_SHELL( "InfinityWebServiceErrorMsg", InfinityWebServiceErrorMsg, "InfinityWSinfo" )

RETURN( ret )