J'ai une application Notes qui est utilisée hors ligne sur une réplique locale la plupart du temps. Les utilisateurs peuvent créer et mettre à jour des documents. Sur le serveur, un agent traite tous les nouveaux documents.
L'idée est qu'une fois que l'agent a traité les documents, les utilisateurs ne sont plus autorisés à mettre à jour les documents.
En général, c'est assez simple à configurer en définissant l'accès auteur sur les documents traités par l'agent.
Mais, comme les utilisateurs travaillent sur la réplique locale et que l'agent s'exécute sur le serveur, ce scénario est possible:
Existe-t-il un moyen de s'assurer que l'utilisateur ne peut plus mettre à jour un document une fois qu'il est répliqué sur le serveur. Ou existe-t-il un moyen de forcer l'agent à s'exécuter lors de la réplication et à répliquer immédiatement la mise à jour d'accès?
Je pensais créer un bouton sur lequel l'utilisateur peut cliquer pour répliquer / mettre à jour tous les documents, mais pour éviter les utilisateurs qui oublient de cliquer sur le bouton, je préfère les paramètres de réplication par défaut pour m'assurer que tout est répliqué lorsque cela est possible. p >
3 Réponses :
Quand j'ai étudié il y a quelques années, la réplication fait un "pull", puis un "push", donc faire quelque chose sur le serveur ne fonctionnera pas. Il existe plusieurs options.
Je ne sais pas ce que vous voulez dire avec l'option 1. Comment puis-je récupérer la date de réplication? L'application est destinée à être utilisée via Nomad à l'avenir, les appels d'API win ne sont donc pas une option.
L'option 1 est que l'agent serveur met à jour autre chose que le document de l'utilisateur. Selon ce qui se passe, cela peut être possible ou non. La date de réplication peut être récupérée de plusieurs manières. L'un est un bouton / agent local pour appeler NotesDatabase.replicate, qui enregistre également localement l'heure à laquelle il a été exécuté. Un autre est un agent sur le serveur pour mettre à jour un document de minuterie, s'exécutant toutes les minutes (l'interface graphique pour les agents n'affiche que 5 minutes minimum et le défilement ne le permet, mais vous pouvez entrer "1" pour qu'il s'exécute toutes les minutes). J'ajouterais 1 minute à la valeur stockée - j'espère que vous devinerez pourquoi ;-)
Au lieu d'utiliser les champs Auteur pour la "mauvaise" raison, j'ajouterais un champ Statut non modifiable, avec des valeurs telles que "Initial", "Prêt" et tout le reste dont vous pourriez avoir besoin. Ensuite, la réplication doit être configurée différemment, en utilisant une formule qui ne réplique que les documents avec Status! = "Initial". L'utilisateur peut avoir 2 boutons pour enregistrer un document: l'un enregistre simplement dans la base de données locale et l'autre change également le statut en Prêt. Une fois Status = "Ready", l'utilisateur ne peut plus modifier le document.
Au fait, avez-vous défini la réplication de documents sur "Fusionner les conflits"? Vous pourriez réduire considérablement le nombre de conflits.
Cela peut fonctionner, mais échoue toujours si l'utilisateur oublie de cliquer sur le bouton «Prêt». Le "Fusionner les conflits" est défini, mais il permet toujours aux utilisateurs d'apporter des modifications qui ne seront pas traitées (ou traitées incorrectement) par l'agent.
Si l'utilisateur oublie de cliquer sur Enregistrer et transmettre, l'état ne changera pas et le document ne sera pas répliqué et donc pas traité par le serveur.
Une alternative serait de configurer le formulaire de sorte que l'utilisateur n'enregistre jamais réellement le document localement. Au lieu de cela, le document est envoyé par courrier électronique au serveur où un agent déclenché par la distribution du courrier effectue la mise à jour réelle. Lorsque l'agent a terminé la mise à jour, il renvoie un e-mail à l'utilisateur lui indiquant que les mises à jour sont disponibles et lui demandant de se répliquer afin de les récupérer. Si le client Notes est réellement utilisé pour le courrier électronique, vous pouvez probablement même insérer un bouton dans le courrier électronique et dire "Cliquez ici pour répliquer et ouvrir votre document".