DOCUMENTATION EN LIGNE
DE WINDEVWEBDEV ET WINDEV MOBILE

Aide / WLangage / Gestion des bases de données / HFSQL / Fonctions HFSQL
  • Quels fichiers de données peuvent être répliqués ?
  • Paramètres de la synchronisation
  • Blocage d'enregistrements pendant la réplication journalée
  • Erreurs de doublons et/ou d'intégrité
  • Variables automatiquement initialisées dans la procédure WLangage
  • Exemple : Répliquer les données même si un conflit est intervenu (utilisation d'une procédure WLangage) :
  • Réplication et fonction EspaceSignificatif
  • Durée de vie du réplica transportable
  • Réplication et filtre
WINDEV
WindowsLinuxUniversal Windows 10 AppJavaEtats et RequêtesCode Utilisateur (MCU)
WEBDEV
WindowsLinuxPHPWEBDEV - Code Navigateur
WINDEV Mobile
AndroidWidget AndroidiPhone/iPadWidget IOSApple WatchMac CatalystUniversal Windows 10 App
Autres
Procédures stockées
HSynchroniseRéplica (Fonction)
En anglais : HSynchronizeReplica
ODBCOLE DBNon disponible avec ces types de connexion
Synchronise le réplica maître et le réplica abonné : les opérations effectuées sur un des réplicas sont transférées dans l'autre réplica.
Cette fonction est utilisable aussi bien lors d'une réplication journalée (entre des fichiers de données HFSQL) que lors d'une réplication universelle.
Remarques :
  • Dans le cas d'une réplication journalée, seuls les fichiers de données présents dans l'analyse avec l'option "Gérer la réplication pour ce fichier" seront pris en compte.
  • HFSQL Client/Serveur Seule la réplication universelle fonctionne avec des fichiers de données HFSQL Client/Serveur.
  • Universal Windows 10 AppAndroidWidget AndroidiPhone/iPad Seule la réplication universelle est disponible.
Avertissement
A partir de la version 17, les fichiers de la réplication créés avec une application/site en version 17 ou supérieure ne pourront pas être manipulés avec une application/site en version 16 ou inférieure.
Les applications/sites en version 17 ou supérieure continuent de manipuler les fichiers de réplication créés avec une application/site en version 16 ou inférieure.
WINDEVWEBDEV - Code ServeurEtats et RequêtesCode Utilisateur (MCU)AjaxHFSQL ClassicHyper File 5.5
// Application "Saisie de Commande" par des VRP
// Bouton "[Rentrer les commandes dans la Base]"
// (la base est sur "X:\CORPDATA")
HSynchroniseRéplica("X:\CORPDATA", "C:\ABONNE", rplVersMaître)
WINDEVWEBDEV - Code ServeurEtats et RequêtesCode Utilisateur (MCU)AjaxHFSQL ClassicHyper File 5.5
// Application "Catalogue" par des VRP
// Bouton "[Récupérer les nouvelles références]"
// (la base est sur "X:\CORPDATA")
HSynchroniseRéplica("X:\CORPDATA", "", rplVersAbonné)
WINDEVWEBDEV - Code ServeurEtats et RequêtesCode Utilisateur (MCU)AjaxHFSQL ClassicHyper File 5.5
// A Montpellier : Préparation de l'envoi des messages à Paris
HCréeRéplicaTransportable("P:\MSG\MSG.RPM", "Paris", "c:\temp\MsgMPL.WDZ")
// Envoi du fichier (par FTP par exemple)
FTPEnvoie(NumConnexion, "c:\temp\MsgMPL.WDZ", ...
"FTP.PCSOFT_PARIS.FR\MSG\MsgMPL.WDZ")
----------------
// A Paris : Récupération des messages de Montpellier
HSynchroniseRéplica("Z:\MSG", "\\FTPSERVEUR\MSG\MsgMPL.WDZ", rplVersMaître)
Syntaxe

Synchronisation avec gestion de conflit automatique Masquer les détails

<Résultat> = HSynchroniseRéplica(<Réplica maître> , <Réplica abonné> , <Sens de la réplication> [, <Gestion des conflits>])
<Résultat> : Booléen
  • Vrai si l'opération a réussi,
  • Faux sinon.
<Réplica maître> : Chaîne de caractères
Localisation du réplica maître. Ce paramètre peut correspondre selon le sens et le type de la réplication :
  • au chemin du fichier de réplication (fichier xxxx.RPM) de la base maître.
  • au nom de fichier transportable créé avec la fonction HCréeRéplicaTransportable.
  • à une chaîne vide (""). Les fichiers de données en cours sont considérés comme étant la base maître. Le fichier correspondant au réplica maître (.RPM) est recherché soit dans le répertoire de réplication spécifié dans l'analyse (par défaut, sous-répertoire RPL des fichiers de données), soit dans le répertoire spécifié avec la fonction HChangeRepRpl.
En général, ce chemin correspond soit au chemin complet d'un fichier présent sur un répertoire réseau, soit au chemin d'un réplica transportable (clé USB, attachement email, fichier récupéré par FTP).
Pour plus de détails, consultez les remarques.
<Réplica abonné> : Chaîne de caractères
Localisation du réplica abonné. Ce paramètre peut correspondre selon le sens et le type de réplication :
  • au chemin du fichier de réplication (fichier xxxx.RPL) de la base abonnée.
  • au nom de fichier transportable créé avec la fonction HCréeRéplicaTransportable
  • à une chaîne vide (""). Les fichiers de données en cours sont considérés comme étant la base abonnée. Le fichier correspondant au réplica abonné (.RPL) est recherché soit dans le répertoire de réplication spécifié dans l'analyse (par défaut, sous-répertoire RPL des fichiers de données), soit dans le répertoire spécifié avec la fonction HChangeRepRpl.
En général, ce chemin correspond soit au chemin complet d'un fichier présent sur un répertoire réseau, soit au chemin d'un réplica transportable (clé USB, attachement email, fichier récupéré par FTP).
Pour plus de détails, consultez les remarques.
<Sens de la réplication> : Constante de type entier
Sens dans lequel la réplication doit être effectuée :
rplBidirectionnelMise à jour de la base de données maître ET de la base de données abonnée.

Réplication universelle : la réplication bidirectionnelle n'est pas disponible.
rplVersAbonnéMise à jour de la base de données abonnée en fonction de la base de données maître.

<Réplica Maître> correspond au réplica transportable crée depuis la base maître, <Réplica Abonné> correspond au réplica abonné
rplVersMaitreMise à jour de la base de données maître en fonction de la base de données abonnée.

<Réplica Maître> correspond au réplica maître, <Réplica Abonné> correspond au réplica transportable créé depuis la base abonnée.
<Gestion des conflits> : Constante optionnelle de type Entier
Constante indiquant le mode de gestion des conflits :
rplAbonnePrioritaireLes données présentes dans la base de données abonnée sont prioritaires lors de la réplication.
rplMaitrePrioritaire
(Valeur par défaut)
Les données présentes dans la base de données maître sont prioritaires lors de la réplication.
rplPlusRécentPrioritaireLes données les plus récentes sont prioritaires. Attention, les données les plus récentes sont évaluées par rapport à l'heure sur le poste abonné.
Attention : Par défaut, le maître est prioritaire : dans le cas d'une réplication abonné vers maître, les données du maître ne seront pas mises à jour. Pensez à utiliser une autre constante (rplPlusRécentPrioritaire par exemple).

Synchronisation avec gestion de conflit personnalisée (procédure WLangage) Masquer les détails

<Résultat> = HSynchroniseRéplica(<Réplica maître> , <Réplica abonné> , <Sens de la réplication> [, <Procédure de filtre>])
<Résultat> : Booléen
  • Vrai si l'opération a réussi,
  • Faux sinon.
<Réplica maître> : Chaîne de caractères
Localisation du réplica maître. Ce paramètre peut correspondre selon le sens et le type de la réplication :
  • au chemin du fichier de réplication (fichier xxxx.RPM) de la base maître.
  • au nom de fichier transportable créé avec la fonction HCréeRéplicaTransportable.
  • à une chaîne vide (""). Les fichiers de données en cours sont considérés comme étant la base maître. Le fichier correspondant au réplica maître (.RPM) est recherché soit dans le répertoire de réplication spécifié dans l'analyse (par défaut, sous-répertoire RPL des fichiers de données), soit dans le répertoire spécifié avec la fonction HChangeRepRpl.
En général, ce chemin correspond au chemin complet d'un fichier présent sur un répertoire réseau, soit d'un chemin d'un réplica transportable (clé USB, attachement email, fichier récupéré par FTP).
Pour plus de détails, consultez les notes.
<Réplica abonné> : Chaîne de caractères
Localisation du réplica abonné. Ce paramètre peut correspondre selon le sens et le type de réplication :
  • au chemin du fichier de réplication (fichier xxxx.RPL) de la base abonnée.
  • au nom de fichier transportable créé avec la fonction HCréeRéplicaTransportable
  • à une chaîne vide (""). Les fichiers de données en cours sont considérés comme étant la base abonnée. Le fichier correspondant au réplica abonné (.RPL) est recherché soit dans le répertoire de réplication spécifié dans l'analyse (par défaut, sous-répertoire RPL des fichiers de données), soit dans le répertoire spécifié avec la fonction HChangeRepRpl.
En général, ce chemin correspond au chemin complet d'un fichier présent sur un répertoire réseau, soit d'un chemin d'un réplica transportable (clé USB, attachement email, fichier récupéré par FTP).
Pour plus de détails, consultez les remarques.
<Sens de la réplication> : Constante de type entier
Sens dans lequel la réplication doit être effectuée :
rplBidirectionnelMise à jour de la base de données maître ET de la base de données abonnée.

Réplication universelle : la réplication bidirectionnelle n'est pas disponible.
rplVersAbonnéMise à jour de la base de données abonnée en fonction de la base de données maître.

<Réplica Maître> correspond au réplica maître, <Réplica Abonné> correspond au réplica transportable créé depuis la base abonnée.
rplVersMaîtreMise à jour de la base de données maître en fonction de la base de données abonnée.

<Réplica Maître> correspond au réplica transportable crée depuis la base maître, <Réplica Abonné> correspond au réplica abonné
<Procédure de filtre> : Nom de procédure optionnel
Nom d'une procédure WLangage existant dans le projet WINDEV ou WEBDEV (ce nom doit être entouré par des guillemets). Vous devez créer cette procédure dans votre application. Cette procédure n'attend aucun paramètre.
Cette procédure est appelée avant chaque opération réalisée sur le fichier destination. Plusieurs variables sont utilisables dans cette procédure.
Si cette procédure renvoie Faux, l'opération n'est pas effectuée. Cette procédure permet par exemple :
  • de filtrer les enregistrements à ne pas répliquer.
  • de gérer les cas de conflits, en réglant les valeurs avant qu'une erreur de doublons n'apparaisse.
Pour plus de détails, consultez l'exemple de HSynchroniseRéplica.
Remarques
WINDEVWEBDEV - Code ServeurEtats et RequêtesCode Utilisateur (MCU)AjaxHFSQL ClassicHyper File 5.5Connecteurs Natifs (Accès Natifs)

Quels fichiers de données peuvent être répliqués ?

La synchronisation peut être effectuée :
  • soit entre deux bases de données reliées par le réseau.
  • soit entre une base de données et un réplica transportable (créé par la fonction HCréeRéplicaTransportable).
Il n'est pas possible de réaliser une réplication vers un réplica transportable. Il est nécessaire de créer un réplica transportable avec la base de données et répliquer à partir de la base de données distante.
Attention : Si vous effectuez une mise à jour automatique de vos fichiers de données, il est nécessaire de synchroniser tous les réplicas avant cette opération. En effet, dans le cas contraire, toutes les modifications effectuées depuis la dernière synchronisation et la modification automatique seront perdues.

Paramètres de la synchronisation

Le tableau ci-dessous présente les différentes combinaisons de paramètres à utiliser en fonction du type et du sens de réplication :
Sens de réplicationParamètre <Réplica Maître>Paramètre <Réplica Abonné>Paramètre <Sens de la réplication>
Réplication du maître vers l'abonné
Cette réplication est effectuée sur le poste abonné
Nom du réplica transportable (*.RPA) créé depuis le maître, avec son éventuel cheminNom du réplica abonné (*.RPL), avec son éventuel chemin.rplVersAbonné
Réplication de l'abonné vers le maître
Cette réplication est effectuée sur le poste maître
Nom du réplica maître (*.RPM), avec son éventuel chemin.Nom du réplica transportable (*.RPA) créé depuis l'abonné, avec son éventuel chemin.rplVersMaître
WINDEVWEBDEV - Code ServeurEtats et RequêtesCode Utilisateur (MCU)AjaxHFSQL ClassicHyper File 5.5

Blocage d'enregistrements pendant la réplication journalée

Pendant la réplication, le fichier JournalOpération.Fic est bloqué : il est impossible d'écrire, de modifier ou d'enregistrer des enregistrements dans les fichiers journalés de la base de données destination.
WINDEVWEBDEV - Code ServeurEtats et RequêtesCode Utilisateur (MCU)AjaxHFSQL ClassicHyper File 5.5

Erreurs de doublons et/ou d'intégrité

En cas d'erreur de doublons ou d'intégrité, le mécanisme standard de gestion automatique des erreurs est déclenché. Si le moteur HFSQL renvoie une erreur, la réplication est interrompue : seule une partie des données est alors répliquée.
Réplication universelle : Si une erreur d'intégrité se produit lors de la réplication, la réplication continuera mais la fonction renvoie Faux.
Pour avoir le détail des erreurs, il est nécessaire de parcourir les sous-erreurs HFSQL avec la fonction HErreur (avec les constantes hSousErrPremier et hSousErrSuivant) puis d'utiliser la fonction HErreurInfo.
WINDEVWEBDEV - Code ServeurEtats et RequêtesCode Utilisateur (MCU)AjaxHFSQL ClassicHyper File 5.5Connecteurs Natifs (Accès Natifs)

Variables automatiquement initialisées dans la procédure WLangage

VariableTypeDescription et valeur
RPL.FichierChaîne de caractèresNom du fichier dont les données vont être répliquées
RPL.OpérationConstante de type EntierOpération HFSQL qui va être répliquée :
  • rplHAjoute : réplication d'un ajout
  • rplHModifie : réplication d'une modification
  • rplHSupprime : réplication d'une suppression
RPL.ConflitConstante de type EntierIndique si un conflit est détecté lors de la réplication. Les valeurs possibles sont les suivantes :
  • rplPasDeConflit : aucun conflit n'a été détecté
  • rplConflitModification : Enregistrement a été modifié à la fois sur le réplica source et sur le réplica destination
  • rplConflitSuppression : Enregistrement supprimé sur le réplica destination et modifié ou supprimé sur le réplica source.
Pour forcer la réplication en cas de conflit, initialisez la variable RPL.Conflit avec la constante rplPasDeConflit.

Dans le cas contraire, la réplication sera effectuée uniquement si le conflit est un conflit de modification et si les données à répliquer proviennent de la base de données maître.
RPL.SensConstante de type EntierIndique le sens de la réplication (utile lors d'une réplication bi-directionnelle) :
  • rplVersAbonné : réplication du maître vers l'abonné
  • rplVersMaître : réplication de l'abonné vers le maître
RPL.NumOpérationEntierNuméro de l'opération en cours. Cette valeur est comprise entre 1 et RPL.MaxOpération. Cette variable permet de gérer simplement une jauge de progression.
RPL.MaxOpérationEntierNombre total d'opérations à répliquer. Cette variable permet de gérer simplement une jauge de progression.
RPL.AliasSourceChaîne de caractèresNom de l'alias Source du fichier répliqué (RPL.Fichier). Ce fichier contient les valeurs des rubriques qui vont être copiées (fonction HModifie) ou ajoutées (fonction HAjoute) dans le fichier en cours de réplication.
RPL.AliasDestinationChaîne de caractèresNom de l'alias Destination du fichier répliqué (RPL.Fichier). Ce fichier contient les valeurs des rubriques avant la copie ou la suppression dans le fichier en cours de réplication.
WINDEVWEBDEV - Code ServeurEtats et RequêtesCode Utilisateur (MCU)AjaxHFSQL ClassicHyper File 5.5Connecteurs Natifs (Accès Natifs)

Exemple : Répliquer les données même si un conflit est intervenu (utilisation d'une procédure WLangage) :

Cet exemple permet de forcer la réplication des données même si un conflit de modification intervient. Il suffit de forcer la valeur de la variable RPL.Conflit avec la constante rplPasDeConflit.
SI RPL.Conflit = rplConflitModification ALORS
RPL.Conflit = rplPasDeConflit
RENVOYER Vrai
FIN

Réplication et fonction EspaceSignificatif

La réplication est incompatible avec l'utilisation de la fonction EspaceSignificatif dans le code de l'application cliente. Cette fonction change le comportement de HFSQL. L'utilisation de cette fonction dans l'application cliente peut affecter l'efficacité de la réplication.
Depuis la version 21 update 3 (version 210065), les fonctions de synchronisation (réplication universelle programmée ou assistée) renvoient une erreur à l'application cliente si la fonction EspaceSignificatif a été appliquée pour l'un au moins des fichiers répliqués.

Durée de vie du réplica transportable

Le réplica est détruit à la fin de la réplication en cas de réussite. En effet, rejouer le réplica engendre des erreurs (par exemple, un ajout donne une erreur de doublon). Le réplica utilise le fichier .syn qui lui aussi est détruit (un autre fichier .syn le remplace avec les informations inutiles purgées).
Un réplica "transportable" est déplacé (copié) entre le maître et l'abonné ou entre l'abonné et le maître. Pour conserver une archive, il suffit de conserver le fichier source (celui créé par la fonction HCréeRéplicaTransportable).

Réplication et filtre

Lors du parcours des données à répliquer, la réplication tient compte des filtres positionnés par la fonction HFiltre.
Ainsi, dans le cas d'une réplication universelle programmée sans serveur de réplication, il est possible d'utiliser la fonction HFiltre pour limiter les données à synchroniser.
A l'inverse, dans le cas d'une réplication effectuée via un serveur de réplication, il faut veiller à désactiver tous les filtres avant d'effectuer la réplication avec la fonction HSynchroniseRéplica.
Remarque : La fonction HFerme permet de supprimer tous les filtres définis par la fonction HFiltre sur un fichier de données.
Composante : wd290rpl.dll
Version minimum requise
  • Version 9
Documentation également disponible pour…
Commentaires
Cliquez sur [Ajouter] pour publier un commentaire

Dernière modification : 16/03/2023

Signaler une erreur ou faire une suggestion | Aide en ligne locale