Aller directement à la fin des métadonnées
Aller au début des métadonnées

Vous regardez une version antérieure (v. /wiki/spaces/UDW57/pages/10570957058/WebHooks+Sp+cifiques) de cette page.

afficher les différences afficher l'historique de la page

« Afficher la version précédente Vous regardez la version actuelle de cette page. (v. 8) afficher la version suivante »

Déclaration webhook

Dans Divalto weavy Studio : Outils > Gérer les webhooks

Webhook

Le webhook ne nécessite aucune authentification mais doit être lié à un compte API public.

Son URL d’appel sera de la forme : https://api.weavy.divalto.com/v1/entrypoints/{companyCode}/webhook/?c={codeEntryPoint}

Code utilisateur : Code du webhook

Lors de la création d’un webhook spécifique, il est conseillé d’utiliser un code utilisateur bien identifiable.

Les webhooks n'étant pas surchargeables, ceci permettra d’identifier correctement les webhooks standards des webhooks spécifiques.

Utilisez le préfixe “SPE”.

Le code du webhook commencera donc par SPEWHK_….

Libellé : Libellé du webhook

Description : Description

Code script : Code du script qui sera appelé lors de l’exécution du webhook

Compte API : Compte utilisateur de type API publique qui sera utilisé pour l’authentification

URL : Url qui permettra d’appeler le webhook

Process

C’est l'équivalent du webhook, mais le process nécessite une authentification préalable avec un compte utilisateur valide.

Les scripts utilisés seront exactement pareils, il n’y a aucune différence entre un webohook et un process.

Son URL d’appel sera de la forme : https://api.weavy.divalto.com/v1/entrypoints/{companyCode}/process/?c={userCode}

Code utilisateur : Code du process

Lors de la création d’un process spécifique, il est conseillé d’utiliser un code utilisateur bien identifiable.

Les process n'étant pas surchargeables, ceci permettra d’identifier correctement les process standards des process spécifiques.

Utilisez le préfixe “SPE”.

Le code du process commencera donc par SPEPRO_….

Libellé : Libellé du process

Description : Description

Code script : Code du script qui sera appelé lors de l’exécution du process. C’est exactement le même script que pour un webhook.

Compte API : On utilisera automatiquement le compte utilisé pour l’authentification

URL : Url qui permettra d’appeler le process

Présentation

Lors de la création d’un nouveau webhook, cinq scripts sont obligatoires.

Pour le détail des scripts, vous pourrez vous appuyer sur ce qui a été effectué dans les scripts des webhooks standards.

Des exemple précis mais non exhaustifs seront données dans la suite de ce document.

Script d’entrée : Ce script est appelé dans la déclaration du webhook.

Le code du script devra être de la forme : {Prefix}_Webhook{EntityName}

Script de définition : C'est dans ce script que l'on déclare la définition de l'entité. C'est une "carte d'identité" qui va définir les champs, les filtres, etc...

Le code du script devra être de la forme : {Prefix}_WebhookDefinition_{entityname}.

Script de surcharge de définition : Il est obligatoire même pour un webhook spécifique.

Le code du script devra être de la forme : {Prefix}_WebhookDefinitionOverload_{entityname}.

Vous pouvez vous contenter de la trame de base, vu que votre définition sera déjà dans le script de définition.

Script de règles : C’est dans ce script que l’on applique les règles métiers. Ces règles s’appliqueront lors de la méthode PUT (ajout/mise à jour).

Le code du script devra être de la forme : {Prefix}_WebhookRules_{entityname}

Script de surcharge de règles : Il est obligatoire même pour un webhook spécifique.

Le code du script devra être de la forme : {Prefix}_WebhookRulesOverload_{entityname}.

Vous pouvez vous contenter de la trame de base, vu que vos règles seront déjà dans le script de règles.

Créer webhook sur table standard

Création d’un nouveau webhook sur la table standard “sw_data_supplier” qui contient des champs spécifiques en surcharge FINAL.

On peut voir également que le champ “final_suppliercategory_ID” s’appuie sur une table spécique “sw_data_final_suppliercategory”.

Dictionnaire :

Script d’entrée : FINAL_WebhookSupplier

tableName   = "supplier"
entityName  = "supplier"

INCLUDE( "FuncWebhook_BuildEndpoint" )

Script de définition : FINAL_WebhookDefinition_supplier

// FINAL_WebhookDefinition_supplier
// Webhook definition
tableName             = "supplier"
specificOverload      = CALL_SCRIPT( "FINAL_WebhookDefinitionOverload_<varscript>tableName</varscript>" )
tableSchema           = DB_GET_TABLEINFO( "sw_data_<varscript>tableName</varscript>" )
tableSchemaDocument   = DOCUMENT_CREATE_FROM_JSON( tableSchema )
languageCode          = VARGET_SHELL( "languageCode", "WebhookDefinition" )
authorizedTables      = TRANSLATE( "[{'tableName':'<varscript>tableName</varscript>'}]" )

JSONFieldsDefinition = TRANSLATE( "
  { 
    'languageCode': '<varscript>languageCode</varscript>',
    'strictFilterMode': 1,
    'relatedTablesCount': 0,
    'relatedTables': [ ],
    'authorizedTables': <varscript>authorizedTables</varscript>,
    'simpleFieldsList': 'CodeSupplier,label',
    'extendedFieldsListToExclude': '',
    'defaultFilters': [
     
    ],
    'strictFilters': [
      
    ],
    'strictOrderBy': [
    
    ],
    'outOfMainTableFields': [
      
    ],
    'standardOverload': {
      
    },
    'specificOverload':
    <varscript>specificOverload</varscript>,
    'simpleFields': [],
    'extendedFields': [],
    'strictFilterFields': [],
    'defaultFilterFields': [],
    'strictOrderByFields': []
  }
" )

INCLUDE( "FuncWebhook_BuildDefinition" )

Script de surcharge de définition : FINAL_WebhookDefinitionOverload_supplier

// FINAL_WebhookDefinitionOverload_supplier

languageCode     = VARGET_SHELL( "languageCode", "WebhookDefinition" )

specificOverload = TRANSLATE( "
  {
    'simpleFieldsList': 'CodeSupplier,label,city',
    'extendedFieldsListToExclude': '',
    'relatedTablesCount': 2,
    'relatedTables': [ 'final_customer_ID', 'final_suppliercategory_ID' ],
    'authorizedTables': [ {'tableName':'supplier'}, {'tableName':'final_supplieraddress'}, {'tableName':'product'} ],
    'cascadeDeleteTables': [ {'tableName':'final_supplieraddress'} ],
    'fieldsList': {
      'final_customer_ID': {
        'targetTableName': 'sw_data_customer',
        'targetFieldName': 'name'
      },
      'final_suppliercategory_ID': {
        'canGetDefinitionList': 1,
        'definitionLabelFieldName': 'final_label'
      }
    },
    strictFilters: [
      
    ],
    'strictOrderBy': [
      
    ],
    'outOfMainTableFields': [
      
    ]
  }
" )

RETURN( "<varscript>specificOverload</varscript>" )

Script de règles : FINAL_WebhookRules_supplier

// FINAL_WebhookRules_supplier

code      = TRANSLATE( "<varscript>arg1</varscript>" )
verb      = TRANSLATE( "<varscript>arg2</varscript>" )
dataInput = TRANSLATE( "<varscript>arg3</varscript>" )

tableName               = "supplier"
entity                  = "supplier"
internalcode            = ""
codeTableName           = TRANSLATE( "code<varscript>tableName</varscript>" )
codeEntityName          = TRANSLATE( "code<varscript>entity</varscript>" )
internalcodeEntityName  = TRANSLATE( "internalcode<varscript>entity</varscript>" )
scriptOverload          = TRANSLATE( "FINAL_WebhookRulesOverload_<varscript>entity</varscript>" )

jsonResponse                        = DOCUMENT_CREATE_DOCUMENT()
ruleFields                          = DOCUMENT_CREATE_OBJECT( jsonResponse, "ruleFields" )
ruleOverloadFields                  = DOCUMENT_CREATE_OBJECT( jsonResponse, "ruleOverloadFields" )
ruleFieldsAdditionalTables          = DOCUMENT_CREATE_OBJECT( jsonResponse, "ruleFieldsAdditionalTables" )
ruleOverloadFieldsAdditionalTables  = DOCUMENT_CREATE_OBJECT( jsonResponse, "ruleOverloadFieldsAdditionalTables" )

// STANDARD RULES

IF( EQUALS( verb, "PUT" ) )THEN
  
  IF ( JSON_EXISTS_FROM_PATH( dataInput, entity ) == 0 ) THEN
    
    DOCUMENT_ADD_PROPERTY_TO_OBJECT( jsonResponse, "response", "0" )
    DOCUMENT_ADD_PROPERTY_TO_OBJECT( jsonResponse, "errorMessage", "Standard rules error: Missing <varscript>entity</varscript> object in json data" )
    
    response = DOCUMENT_SERIALIZE( jsonResponse, "json" )
    RETURN( response )
    
  ENDIF
    
  jsonDataInput = JSON_GET_FROM_PATH( dataInput, entity )
  VARINITIALIZE_SCRIPT_BYJSON( jsonDataInput )
  
  
  IF ((LEN( code ) == 0) && (JSON_EXISTS_FROM_PATH( jsonDataInput, "<varscript>codeEntityName</varscript>" ))) THEN
    
    code = JSON_GET_FROM_PATH( jsonDataInput, "<varscript>codeEntityName</varscript>" )
    
  ENDIF
  
  IF ( JSON_EXISTS_FROM_PATH( jsonDataInput, "<varscript>internalcodeEntityName</varscript>" ) ) THEN
    
    internalcode = JSON_GET_FROM_PATH( jsonDataInput, "<varscript>internalcodeEntityName</varscript>" )
    
  ENDIF
  
  row_ID  = CALL_SCRIPT( "Func_GetIDFromCode", "sw_data_<varscript>tableName</varscript>", "<varscript>code</varscript>", "<varscript>internalcode</varscript>" )
  
ENDIF

// Rule overload
ruleOverloadJsonResponse = CALL_SCRIPT( scriptOverload, code, verb, dataInput, ruleOverloadFields )

IF( JSON_EXISTS_FROM_PATH( ruleOverloadJsonResponse, "response" ) )THEN
  
  response = JSON_GET_FROM_PATH( ruleOverloadJsonResponse, "response" )
      
  IF( EQUALS( response, "0" ) )THEN
    
    IF( JSON_EXISTS_FROM_PATH( ruleOverloadJsonResponse, "response" ) )THEN
      
      errorMessage = JSON_GET_FROM_PATH( ruleOverloadJsonResponse, "errorMessage" )
      DOCUMENT_ADD_PROPERTY_TO_OBJECT( jsonResponse, "errorMessage", errorMessage )

    ELSE
      
      DOCUMENT_ADD_PROPERTY_TO_OBJECT( jsonResponse, "errorMessage", "Specific rules error: No error message defined" )
      
    ENDIF
    
    DOCUMENT_ADD_PROPERTY_TO_OBJECT( jsonResponse, "response", response )
    response = DOCUMENT_SERIALIZE( jsonResponse, "json" )
    RETURN( response )
  
  ENDIF

ENDIF

DOCUMENT_ADD_PROPERTY_TO_OBJECT( jsonResponse, "response", "1" )
response = DOCUMENT_SERIALIZE( jsonResponse, "json" )
RETURN( response )

Script de surcharge de règles : FINAL_WebhookRulesOverload_supplier

// FINAL_WebhookRulesOverload_supplier

code          = TRANSLATE( "<varscript>arg1</varscript>" )
verb          = TRANSLATE( "<varscript>arg2</varscript>" )
dataInput     = TRANSLATE( "<varscript>arg3</varscript>" )
ruleFields    = TRANSLATE( "<varscript>arg4</varscript>" )

jsonResponse = DOCUMENT_CREATE_DOCUMENT()

response = DOCUMENT_SERIALIZE( jsonResponse, "json" )
RETURN( response )

Compléments :

Pour être tout à fait complet, on peut voir dans notre exemple que l’on veut afficher les données de la table spécifique liée “sw_data_final_suppliercategory” et mettre à jour “sw_data_final_supplieraddress“.

Pour la mise à jour de “sw_data_final_supplieraddress“, une description est donnée dans le chapitre sur la création d’un webhook sur une table spécifique.

Pour l’affiche des données liées dans “sw_data_final_suppliercategory“, il faut donc au minimum également ajouter les deux scripts de définition de cette table.

FINAL_WebhookDefinition_final_suppliercategory :

 // FINAL_WebhookDefinition_suppliercategory
// Webhook definition
tableName             = "final_suppliercategory"
specificOverload      = CALL_SCRIPT( "FINAL_WebhookDefinitionOverload_<varscript>tableName</varscript>" )
tableSchema           = DB_GET_TABLEINFO( "sw_data_<varscript>tableName</varscript>" )
tableSchemaDocument   = DOCUMENT_CREATE_FROM_JSON( tableSchema )
languageCode          = VARGET_SHELL( "languageCode", "WebhookDefinition" )
authorizedTables      = TRANSLATE( "[{'tableName':'<varscript>tableName</varscript>'}]" )

JSONFieldsDefinition = TRANSLATE( "
  { 
    'languageCode': '<varscript>languageCode</varscript>',
    'strictFilterMode': 1,
    'relatedTablesCount': 0,
    'relatedTables': [ ],
    'authorizedTables': <varscript>authorizedTables</varscript>,
    'simpleFieldsList': 'CodeSupplier,label',
    'extendedFieldsListToExclude': '',
    'defaultFilters': [
     
    ],
    'strictFilters': [
      
    ],
    'strictOrderBy': [
    
    ],
    'outOfMainTableFields': [
      
    ],
    'standardOverload': {
      
    },
    'specificOverload':
    <varscript>specificOverload</varscript>,
    'simpleFields': [],
    'extendedFields': [],
    'strictFilterFields': [],
    'defaultFilterFields': [],
    'strictOrderByFields': []
  }
" )

INCLUDE( "FuncWebhook_BuildDefinition" )

FINAL_WebhookDefinitionOverload_final_suppliercategory :

// FINAL_WebhookDefinitionOverload_suppliercategory

languageCode     = VARGET_SHELL( "languageCode", "WebhookDefinition" )

specificOverload = TRANSLATE( "
  {
    'extendedFieldsListToExclude': '',
    'fieldsList': {

    },
    strictFilters: [
      
    ],
    'strictOrderBy': [
      
    ],
    'outOfMainTableFields': [
      
    ]
  }
" )

RETURN( "<varscript>specificOverload</varscript>" )

Créer webhook sur table spécifique

Création d’un nouveau webhook sur la table spécifique “sw_data_final_supplieraddress”.

Dictionnaire :

FINAL_WebhookSupplierAddress

FINAL_WebhookDefinition_final_supplieraddress

FINAL_WebhookDefinitionOverload_final_supplieraddress

FINAL_WebhookRules_final_supplieraddress

FINAL_WebhookRulesOverload_final_supplieraddress

Compléter webhook existant

FINAL_WebhookDefinition_interventionoperationrange

FINAL_WebhookDefinition_interventionoperationtype

  • Aucune étiquette