Gestion des verrous de document

La table de documents en cours d’exécution (RDT) conserve le nombre de documents ouverts et les verrous de modification dont ils disposent. Vous pouvez placer un verrou de modification sur un document dans le RDT lorsqu’il est modifié par programmation en arrière-plan sans que l’utilisateur voit un document ouvert dans une fenêtre de document. Cette fonctionnalité est souvent utilisée par les concepteurs qui modifient plusieurs fichiers via une interface utilisateur graphique.

Scénarios de support de verrouillage de document

Le fichier « a » est dépendant du fichier « b »

Considérez une situation dans laquelle vous implémentez un éditeur standard « A » pour le type de fichier « a », et chaque fichier de type « a » a une référence à (ou dépendance à) un fichier de type « b ». Un éditeur standard « B » existe pour les fichiers de type « b ». Lorsque l’éditeur « A » ouvre le fichier « a », il récupère la référence au fichier correspondant « b ». Le fichier « b » n’est pas affiché, mais l’éditeur « A » peut le modifier. L’éditeur « A » obtient une référence aux données de document du fichier « b » à partir de la FindAndLockDocument méthode et gère également un verrou de modification sur le fichier « b ». Une fois que l’éditeur « A » a terminé la modification du fichier « b », vous pouvez décrémenter le nombre de verrous de modification sur le fichier « b » en appelant la UnlockDocument méthode. Vous pouvez omettre cette étape si vous aviez appelé la FindAndLockDocument méthode avec le paramètre dwRDTLockType défini sur _VSRDTFLAGS. RDT_NoLock.

Le fichier « b » est ouvert par un autre éditeur

Dans le cas où le fichier « b » est déjà ouvert par l’éditeur « B » lorsque l’éditeur « A » tente de l’ouvrir, il existe deux scénarios distincts à gérer :

  • Si le fichier « b » est ouvert dans un éditeur compatible, vous devez avoir l’éditeur « A » inscrire un verrou de modification de document sur le fichier « b » à l’aide de la RegisterDocumentLockHolder méthode. Une fois que votre éditeur « A » a terminé la modification du fichier « b », annulez l’inscription du verrou de modification de document à l’aide de la UnregisterDocumentLockHolder méthode.

  • Si le fichier « b » est ouvert de manière incompatible, vous pouvez laisser la tentative d’ouverture du fichier « b » par l’éditeur « A » échouer, ou vous pouvez laisser l’affichage associé à l’éditeur « A » partiellement ouvert et afficher un message d’erreur approprié. Le message d’erreur doit indiquer à l’utilisateur de fermer le fichier « b » dans l’éditeur incompatible, puis de rouvrir le fichier « a » à l’aide de l’éditeur « A ». Vous pouvez également implémenter la méthode QueryCloseRunningDocument du Kit de développement logiciel (SDK) Visual Studio pour inviter l’utilisateur à fermer le fichier « b » ouvert dans l’éditeur incompatible. Si l’utilisateur ferme le fichier « b », l’ouverture du fichier « a » dans l’éditeur « A » se poursuit normalement.

Considérations supplémentaires relatives au verrouillage de modification de document

Vous obtenez un comportement différent si l’éditeur « A » est le seul éditeur qui a un verrou de modification de document sur le fichier « b » que vous le feriez si l’éditeur « B » contient également un verrou de modification de document sur le fichier « b ». Dans Visual Studio, le Concepteur de classes est un exemple de concepteur visuel qui ne contient pas de verrou d’édition sur le fichier de code associé. Autrement dit, si l’utilisateur dispose d’un diagramme de classes ouvert en mode Création et que le fichier de code associé s’ouvre simultanément, et si l’utilisateur modifie le fichier de code, mais n’enregistre pas les modifications, les modifications sont également perdues dans le fichier de diagramme de classes (.cd). Si le Concepteur de classes dispose du seul verrou d’édition de document sur le fichier de code, l’utilisateur n’est pas invité à enregistrer les modifications lors de la fermeture du fichier de code. L’IDE demande à l’utilisateur d’enregistrer les modifications uniquement une fois que l’utilisateur ferme le Concepteur de classes. Les modifications enregistrées sont reflétées dans les deux fichiers. Si le Concepteur de classes et l’éditeur de fichiers de code ont conservé des verrous de modification de document sur le fichier de code, l’utilisateur est invité à enregistrer lors de la fermeture du fichier de code ou du formulaire. À ce stade, les modifications enregistrées sont reflétées dans le formulaire et le fichier de code. Pour plus d’informations sur les diagrammes de classes, consultez Utiliser des diagrammes de classes (Concepteur de classes).

Notez que si vous devez placer un verrou d’édition sur un document pour un autre éditeur, vous devez implémenter l’interface IVsDocumentLockHolder .

Plusieurs fois, un concepteur d’interface utilisateur qui modifie les fichiers de code apporte des modifications par programmation à plusieurs fichiers. Dans ce cas, la SaveItemsViaDlg méthode gère l’enregistrement d’un ou plusieurs documents par le biais de la boîte de dialogue Enregistrer les modifications dans les éléments suivants ?