Freigeben über


Aktive Dokumenttabelle

Die IDE Standard enthält die Liste aller aktuell geöffneten Dokumente in einer internen Struktur, die als laufende Dokumenttabelle (RDT) bezeichnet wird. Diese Liste enthält alle geöffneten Dokumente im Arbeitsspeicher, unabhängig davon, ob diese Dokumente derzeit bearbeitet werden. Ein Dokument ist ein Element, das beibehalten wird, einschließlich Dateien in einem Projekt oder der Standard Projektdatei (z. B. eine VCXPROJ-Datei).

Elemente der Tabelle "Laufendes Dokument"

Die ausgeführte Dokumenttabelle enthält die folgenden Einträge.

Element Beschreibung
Dokumentmoniker Eine Zeichenfolge, die das Dokumentdatenobjekt eindeutig identifiziert. Dies wäre der absolute Dateipfad für ein Projektsystem, das Dateien verwaltet (z. B. C:\MyProject\MyFile). Diese Zeichenfolge wird auch für Projekte verwendet, die in anderen Speichern als Dateisystemen gespeichert sind, z. B. gespeicherte Prozeduren in einer Datenbank. In diesem Fall kann das Projektsystem eine eindeutige Zeichenfolge erstellen, die erkannt und möglicherweise analysiert werden kann, um zu bestimmen, wie das Dokument gespeichert wird.
Hierarchiebesitzer Das Hierarchieobjekt, das das Dokument besitzt, wie durch eine IVsHierarchy Schnittstelle dargestellt.
Artikel-ID Elementbezeichner für ein bestimmtes Element innerhalb der Hierarchie. Dieser Wert ist für alle Dokumente in der Hierarchie eindeutig, die dieses Dokument besitzen, aber dieser Wert ist nicht garantiert für unterschiedliche Hierarchien eindeutig.
Document Data-Objekt Dies ist mindestens ein IUnknown

-Objekts. Die IDE erfordert keine bestimmte Schnittstelle über die IUnknown Schnittstelle hinaus für das Dokumentdatenobjekt eines benutzerdefinierten Editors. Für einen Standard-Editor ist jedoch die Implementierung der IVsPersistDocData2 Schnittstelle des Editors erforderlich, um Dateipersistenzaufrufe aus dem Projekt zu behandeln. Weitere Informationen finden Sie unter Speichern eines Standarddokuments.
Flags Flags, die steuern, ob das Dokument gespeichert wird, ob eine Lese- oder Bearbeitungssperre angewendet wird usw. können angegeben werden, wenn dem RDT Einträge hinzugefügt werden. Weitere Informationen finden Sie unter der _VSRDTFLAGS-Enumeration.
Anzahl der Sperren bearbeiten Anzahl der Bearbeitungssperren. Eine Bearbeitungssperre gibt an, dass ein Editor das Dokument zur Bearbeitung geöffnet hat. Wenn die Anzahl der Bearbeitungssperren auf Null übergegangen ist, wird der Benutzer aufgefordert, das Dokument zu speichern, wenn es geändert wurde. Beispielsweise wird jedes Mal, wenn Sie ein Dokument in einem Editor mit dem Befehl "Neues Fenster" öffnen, eine Bearbeitungssperre für dieses Dokument im RDT hinzugefügt. Damit eine Bearbeitungssperre festgelegt werden kann, muss das Dokument über eine Hierarchie oder Element-ID verfügen.
Lesen der Sperranzahl Anzahl der Lesesperren. Eine Lesesperre gibt an, dass das Dokument durch einen Mechanismus wie einen Assistenten gelesen wird. Eine Lesesperre enthält ein Dokument, das im RDT aktiv ist, während angegeben wird, dass das Dokument nicht bearbeitet werden kann. Sie können eine Lesesperre auch dann festlegen, wenn das Dokument nicht über eine Hierarchie oder Element-ID verfügt. Mit diesem Feature können Sie ein Dokument im Arbeitsspeicher öffnen und in das RDT eingeben, ohne dass das Dokument im Besitz einer Hierarchie ist. Dieses Feature wird selten verwendet.
Sperrhalter Eine Instanz einer IVsDocumentLockHolder Schnittstelle. Der Sperrhalter wird von Features wie Assistenten implementiert, die Dokumente außerhalb eines Editors öffnen und bearbeiten. Ein Sperrhalter ermöglicht es dem Feature, dem Dokument eine Bearbeitungssperre hinzuzufügen, um zu verhindern, dass das Dokument geschlossen wird, während es noch bearbeitet wird. Normalerweise werden Bearbeitungssperren nur von Dokumentfenstern (d. a. Editoren) hinzugefügt.

Jedem Eintrag im RDT ist eine eindeutige Hierarchie oder Element-ID zugeordnet, die in der Regel einem Knoten im Projekt entspricht. Alle dokumente, die zum Bearbeiten zur Verfügung stehen, gehören in der Regel einer Hierarchie. Einträge, die im RDT-Steuerelement vorgenommen wurden, welches Projekt oder – genauer gesagt – welche Hierarchie derzeit das Dokumentdatenobjekt bearbeitet. Mithilfe der Informationen im RDT kann die IDE verhindern, dass ein Dokument von mehreren Projekten gleichzeitig geöffnet wird.

Die Hierarchie steuert auch die Persistenz von Daten und verwendet die Informationen im RDT, um die Dialogfelder "Speichern " und "Speichern unter " zu aktualisieren. Wenn Benutzer ein Dokument ändern und dann im Menü "Datei" den Befehl "Beenden" auswählen, fordert sie die IDE mit dem Dialogfeld "Änderungen speichern" auf, um sie alle Projekte und Projektelemente anzuzeigen, die derzeit geändert wurden. Auf diese Weise können Benutzer auswählen, welche dokumente gespeichert werden sollen. Die Liste der zu speichernden Dokumente (d. h. diese Dokumente mit Änderungen) wird aus dem RDT generiert. Alle Elemente, die beim Beenden der Anwendung im Dialogfeld "Änderungen speichern" angezeigt werden sollen, sollten Datensätze im RDT enthalten. Die RDT-Koordinaten, welche Dokumente gespeichert werden und ob der Benutzer zur Eingabe eines Speichervorgangs aufgefordert wird, indem die werte verwendet werden, die im Eintrag "Flags" für jedes Dokument angegeben sind. Weitere Informationen zu den RDT-Flags finden Sie in der _VSRDTFLAGS Enumeration.

Sperren bearbeiten und Sperren lesen

Bearbeitungssperren und Lesesperren befinden sich im RDT. Das Dokumentfenster erhöht und erhöht die Bearbeitungssperre. Wenn ein Benutzer also ein neues Dokumentfenster öffnet, wird die Bearbeitungssperre um eins erhöht. Wenn die Anzahl der Bearbeitungssperren null erreicht, wird die Hierarchie signalisiert, die Daten für das zugeordnete Dokument beizubehalten oder zu speichern. Die Hierarchie kann dann die Daten auf beliebige Weise speichern, einschließlich der Aufbewahrung als Datei oder als Element in einem Repository. Sie können die Methode in der LockDocumentIVsRunningDocumentTable Schnittstelle verwenden, um Bearbeitungssperren und Lesesperren hinzuzufügen, und die UnlockDocument Methode, um diese Sperren zu entfernen.

Wenn das Dokumentfenster für einen Editor instanziiert wird, fügt der Fensterrahmen normalerweise automatisch eine Bearbeitungssperre für das Dokument im RDT hinzu. Wenn Sie jedoch eine benutzerdefinierte Ansicht eines Dokuments erstellen, das kein Standarddokumentfenster verwendet (d. h. die Schnittstelle wird nicht implementiert IVsWindowFrame ), müssen Sie ihre eigene Bearbeitungssperre festlegen. In einem Assistenten wird beispielsweise ein Dokument bearbeitet, ohne in einem Editor geöffnet zu werden. Damit Dokumentsperren von Assistenten und ähnlichen Entitäten geöffnet werden können, müssen diese Entitäten die IVsDocumentLockHolder Schnittstelle implementieren. Rufen Sie die Methode auf, und übergeben Sie Ihre IVsDocumentLockHolder Implementierung, um den RegisterDocumentLockHolder Dokumentsperrhalter zu registrieren. Dadurch wird dem RDT Der Dokumentsperrhalter hinzugefügt. Ein weiteres Szenario für die Implementierung eines Dokumentsperrhalters ist, wenn Sie ein Dokument über ein spezielles Toolfenster öffnen. In diesem Fall können Sie das Toolfenster nicht schließen lassen. Durch die Registrierung als Dokumentsperrhalter im RDT kann die IDE ihre Implementierung der CloseDocumentHolder Methode aufrufen, um das Schließen des Dokuments aufzufordern.

Andere Verwendungsmöglichkeiten der Tabelle "Laufendes Dokument"

Andere Entitäten in der IDE verwenden das RDT, um Informationen zu Dokumenten abzurufen. Der Quellcodeverwaltungs-Manager verwendet z. B. das RDT, um dem System mitzuteilen, ein Dokument im Editor neu zu laden, nachdem es die neueste Version der Datei abgerufen hat. Dazu sucht der Quellcodeverwaltungs-Manager nach den Dateien im RDT, um festzustellen, ob eine dieser Dateien geöffnet ist. Wenn dies der Name ist, überprüft der Quellcodeverwaltungs-Manager zunächst, ob die Hierarchie die ReloadItem Methode implementiert. Wenn das Projekt die ReloadItem Methode nicht implementiert, sucht der Quellcodeverwaltungs-Manager direkt nach einer Implementierung der ReloadDocData Methode für das Dokumentdatenobjekt.

Die IDE verwendet auch das RDT, um ein geöffnetes Dokument (in den Vordergrund zu bringen) wiederzuverwenden, wenn ein Benutzer dieses Dokument anfordert. Weitere Informationen finden Sie unter Anzeigen von Dateien mithilfe des Befehls "Datei öffnen". Führen Sie eine der folgenden Schritte aus, um zu ermitteln, ob eine Datei im RDT geöffnet ist.

  • Fragen Sie den Dokumentmoniker (d. h. den vollständigen Dokumentpfad) ab, um herauszufinden, ob das Element geöffnet ist.

  • Verwenden Sie die Hierarchie- oder Element-ID, um das Projektsystem nach dem vollständigen Dokumentpfad zu fragen und dann das Element im RDT nach oben zu suchen.

Siehe auch