4D v16.3Verrouillage d'enregistrements |
||
|
4D v16.3
Verrouillage d'enregistrements
Verrouillage d'enregistrements
4D et 4D Server gèrent automatiquement les bases en empêchant les conflits entre les process ou entre les utilisateurs. Deux utilisateurs ou deux process ne peuvent pas modifier en même temps le même enregistrement ou le même objet. Le second utilisateur ou process peut toutefois accéder simultanément en "lecture seulement" à l'enregistrement ou à l'objet. Vous devez utiliser les commandes multi-utilisateurs de cette section dans plusieurs cas :
Il y a trois concepts importants à maîtriser lorsqu'on utilise des commandes dans une base multi-process :
Dans les paragraphes suivants, la personne effectuant une opération dans la base multi-utilisateurs est l'utilisateur local. Les autres personnes utilisant la base sont appelées les autres utilisateurs. La discussion est menée du point de vue de l'utilisateur local. De même, du point de vue du multi-process, le process exécutant une opération dans la base est le process courant. Tout autre process en cours d'exécution est désigné comme un autre process. La discussion est menée du point de vue du process courant. Un enregistrement verrouillé ne peut pas être modifié par l'utilisateur local ou le process courant. Un enregistrement verrouillé peut être chargé, mais pas modifié. Un enregistrement est verrouillé quand l'un des autres utilisateurs ou process a chargé l'enregistrement pour effectuer une modification ou quand l'enregistrement est empilé. Seul l'utilisateur qui modifie l'enregistrement perçoit l'enregistrement comme étant non verrouillé. Tous les autres utilisateurs et process perçoivent l'enregistrement comme étant verrouillé, et donc indisponible pour modification. Une table doit être en mode lecture/écriture pour qu'un enregistrement puisse être chargé déverrouillé (modifiable). Chaque table d'une base est soit en mode lecture/écriture, soit en mode lecture seulement pour chaque utilisateur et process de la base. Lecture seulement signifie que les enregistrements de la table peuvent être chargés mais non modifiés. Lecture/écriture signifie que les enregistrements de la table peuvent être chargés et modifiés par un utilisateur/process, si aucun autre utilisateur/process n'a prélablement verrouillé l'enregistrement. Notez que si vous changez l'état d'une table, celui-ci prend effet pour le prochain enregistrement chargé. Si un enregistrement est déjà chargé, la modification de l'état de la table ne l'affecte pas. Lorsqu'une table est en lecture seulement et qu'un enregistrement est chargé, l'enregistrement est toujours verrouillé. En d'autres termes, l'enregistrement peut être affiché, imprimé et utilisé de diverses façons, mais ne peut être modifié. Notez que le mode lecture seulement ne s'applique qu'à la modification d'enregistrements existants. Le mode lecture seulement n'affecte pas la création de nouveaux enregistrements : vous pouvez toujours ajouter des enregistrements à une table en lecture seulement en utilisant les commandes CREER ENREGISTREMENT et AJOUTER ENREGISTREMENT ou les commandes de menu du mode Développement (dans ce cas les enregistrements en cours de création sont verrouillés pour les autres process/utilisateurs). A noter que la commande TABLEAU VERS SELECTION n'est pas affectée par le mode lecture seulement car elle permet aussi bien de créer que de modifier des enregistrements. 4D met automatiquement une table en mode lecture seulement pour les commandes qui ne requièrent pas d'accès en écriture aux enregistrements. Ces commandes sont VISUALISER SELECTION, VALEURS DISTINCTES, ECRITURE DIF, ECRITURE SYLK, EXPORTER TEXTE, _o_GRAPHE SUR SELECTION, IMPRIMER SELECTION, IMPRIMER ETIQUETTES, QR ETAT, SELECTION VERS TABLEAU, SELECTION LIMITEE VERS TABLEAU. Vous pouvez connaître à tout moment l'état d'une table à l'aide de la fonction Etat lecture seulement. Avant d'exécuter ces commandes, 4D sauvegarde l'état courant de la table (lecture seulement ou lecture/écriture) dans le process courant. Une fois la commande exécutée, l'état initial est rétabli. Lorsqu'une table est en lecture/écriture et qu'un enregistrement est chargé, l'enregistrement sera non verrouillé si aucun autre utilisateur ne l'a préalablement chargé. Si l'enregistrement est verrouillé par un autre utilisateur, l'enregistrement est chargé verrouillé et ne peut être modifié par l'utilisateur local. Une table doit être en mode lecture/écriture et l'enregistrement doit être chargé pour qu'il soit déverrouillé et donc modifiable. Si un utilisateur charge un enregistrement d'une table en mode lecture/écriture, aucun autre utilisateur ne peut charger cet enregistrement pour modification. Les autres utilisateurs peuvent toujours, cependant, ajouter des enregistrements dans la table, soit manuellement en mode Développement, soit par les commandes CREER ENREGISTREMENT ou AJOUTER ENREGISTREMENT. Le mode lecture/écriture est le mode par défaut pour toutes les tables quand une base est ouverte et un nouveau process démarré. Vous pouvez utiliser les commandes LECTURE SEULEMENT et LECTURE ECRITURE pour changer l'état d'une table. Si vous voulez changer l'état d'une table pour mettre un enregistrement en lecture seulement ou lecture/écriture, vous devez exécuter la commande avant le chargement de l'enregistrement. Un enregistrement déjà chargé n'est pas affecté par les commandes LECTURE SEULEMENT et LECTURE ECRITURE. Chaque process dispose de son propre état (lecture seulement ou lecture/écriture) pour chaque table dans la base. Par défaut, si vous n'utilisez pas la commande LECTURE SEULEMENT, toutes les tables sont en mode lecture/écriture. Pour que l'utilisateur local puisse modifier un enregistrement, la table doit être en mode lecture/écriture et l'enregistrement doit être chargé et non verrouillé. Chacune des commandes chargeant un enregistrement courant (s'il y en a un) — telles que ENREGISTREMENT SUIVANT, CHERCHER, TRIER, CHARGER SUR LIEN, etc — définit l'état verrouillé ou non verrouillé de l'enregistrement. L'enregistrement est chargé en fonction de l'état courant de sa table (lecture seulement ou lecture/écriture) et sa propre disponibilité. Un enregistrement peut aussi être chargé d'une table liée par une commande activant le lien automatique. Lorsqu'une table est en mode lecture seulement pour un process ou un utilisateur, tout enregistrement de cette table est chargé en mode lecture seulement, ce qui signifie qu'il ne pourra pas être modifié ou supprimé par ce process ou utilisateur. Ce mode est recommandé pour la visualisation et la recherche de données car il n'empêche pas les autres process ou utilisateurs d'accéder en mode lecture/écriture aux enregistrements de la table si nécessaire. Lorsqu'une table est en mode lecture/écriture pour un process ou un utilisateur, tout enregistrement de cette table est chargé en mode lecture/écriture à condition qu'aucun autre process ou utilisateur ne l'ait préalablement verrouillé. Si l'enregistrement a pu être chargé en lecture/écriture, il est déverrouillé pour le process ou utilisateur courant (il peut être modifié et sauvegardé) et il est verrouillé pour les autres process ou utilisateurs. Une table doit être placée en mode lecture/écriture par le process/utilisateur avant tout chargement d'un enregistrement pour modification et sauvegarde. Si un enregistrement doit être modifié, utilisez la fonction Enregistrement verrouille pour tester s'il est ou non verrouillé par un autre utilisateur. Si l'enregistrement est verrouillé (Enregistrement verrouille retourne Vrai), chargez l'enregistrement avec la commande CHARGER ENREGISTREMENT et testez de nouveau le verrouillage. Répétez l'opération jusqu'à ce que l'enregistrement soit libéré (Enregistrement verrouille retourne Faux). Lorsque vous en avez terminé avec les modifications à apporter à un enregistrement, il doit être libéré pour les autres utilisateurs (et donc déverrouillé) avec la commande LIBERER ENREGISTREMENT. Si un enregistrement n'est pas libéré, il reste verrouillé pour tous les autres utilisateurs jusqu'à ce qu'un nouvel enregistrement courant soit sélectionné. Changer l'enregistrement courant d'une table libère automatiquement l'enregistrement courant précédent. Vous devez explicitement appeler LIBERER ENREGISTREMENT si vous ne changez pas l'enregistrement courant. Ce principe ne s'applique qu'aux enregistrements existants : quand un enregistrement est créé, il peut être sauvegardé quel que soit l'état de la table auquel il appartient. Note : Lorsqu'elle est utilisée dans une transaction, la commande LIBERER ENREGISTREMENT libère l'enregistrement courant pour le process qui gère la transaction uniquement. Pour les autres process, l'enregistrement reste verrouillé tant que la transaction n'est pas validée (ou annulée). Utilisez la commande VERROUILLE PAR pour savoir quel utilisateur ou process a verrouillé un enregistrement. Note : Une bonne pratique consiste à placer toutes les tables en mode lecture seulement au démarrage de chaque process (via la syntaxe LECTURE SEULEMENT(*)) puis à placer chaque table en mode lecture/écriture uniquement en cas de besoin. L'accès aux tables en mode lecture seulement est plus rapide et plus économe en mémoire. De plus, le changement d'état d'une table est optimisé en mode client/serveur car il ne provoque pas de trafic réseau supplémentaire : l'information est envoyée au serveur uniquement lors de l'exécution d'une commande nécessitant l'accès adéquat à la table. Cet exemple présente la boucle la plus simple pour charger un enregistrement non verrouillé : LECTURE ECRITURE([Clients]) ` Placer la table en lecture/écriture La boucle s'exécute jusqu'à ce que l'enregistrement soit libéré. Une boucle de ce type ne s'emploie que lorsqu'il est peu probable que l'enregistrement soit verrouillé par quelqu'un d'autre, puisque l'utilisateur aurait à attendre la fin de la boucle. Aussi, une telle boucle est rarement utilisée, sauf si l'enregistrement n'est modifiable que par méthode. Cet exemple utilise la boucle précédente pour charger un enregistrement non verrouillé et modifier l'enregistrement : LECTURE ECRITURE([Stocks]) La commande MODIFIER ENREGISTREMENT prévient automatiquement l'utilisateur si un enregistrement est verrouillé, et interdit sa modification. L'exemple suivant évite la notification automatique par un test préalable de l'enregistrement avec la fonction Enregistrement verrouille. Si l'enregistrement est verrouillé, l'utilisateur peut annuler. Cet exemple teste si l'enregistrement courant est verrouillé pour la table [Commandes]. Si c'est le cas, le process est endormi par la méthode pendant quelques instants. Cette technique peut être utlisée à la fois dans un développement multi-utilisateurs et multi-process : Repeter Certaines commandes du langage effectuent des actions particulières lorsqu'elles rencontrent un enregistrement verrouillé. Voici la liste de ces commandes :
Voir aussi
CHARGER ENREGISTREMENT
|
PROPRIÉTÉS
Produit : 4D
HISTORIQUE
UTILISATION DE L'ARTICLE
4D - Langage ( 4D v16) |