Autodesk Vault verfolgt das geläufige PDM Konzept eines lokalen Workspace, in den Dateien heruntergeladen werden, wenn sie aus Vault geöffnet werden. Checkt man eine Datei nach dem Öffnungsbefehl nicht aus, sondern betrachtet sie lediglich, setzt Vault für diese Datei einen Schreibschutz im Dateisystem. Folgerichtig wird die Schreibbarkeit einer Datei nach einem Check-Out darüber geregelt, dass der Schreibschutz auf Dateisystemebene entfernt wird:

Eingecheckte Datei mit Read Only Attribute
Man kann auf zweierlei Weise mittels iLogic prüfen, ob eine Datei ausgechecked ist:
- Methode 1 | Abfrage über die Vault API
- Seit Inventor 2024 stellt Autodesk die Möglichkeit bereit über iLogic Abfragen an die Vault API zu senden. Dafür steht die iLogicVaultClass Class bereit und besitzt auch eine Methode iLogicVaultClass.GetVaultFileStatus, um Informationen zum Dateistatus zu erhalten. Autodesk stellt Beispiel-Code in Form einer Funktion bereit, die als Return Value ein Dictionary liefert, in denen alle Informationen zum Dateistatus enthalten sind:
Public Function GetVaultFileStatus( LocalFullFileName As String ) As Dictionary(Of String, String)Problem: Ich habe nicht länger Zugriff auf eine laufende Vault Instanz und kann über die Funktionsweise keinerlei Auskunft geben. ¯\(ツ)/¯
- Methode 2 | Abfrage des Schreibschutzes der Datei
- Über iLogic kann dem aktiven Dokument der volle Pfad über das Property Document.FullFileName entnommen werden. Dieser Pfad kann mittels der FileInfo Class genutzt werden, um über das Property FileInfo.IsReadOnly einen bool’schen Wert über den Status des Schreibschutzes zu erhalten.
Die zweite Methode wird in diesem Post näher erklärt.
Funktion mit Boolean Return Value
Der einfachste Weg zum Erfragen des Schreibschutzstatus ist die Auslagerung der gesamten Logik in eine eigene Funktion, die am Ende einen bool’schen Wert als Return Value liefert. Als Funktionsparameter wird der FullFileName übergeben. Ist die Datei schreibgeschützt, wird der Wert True zurückgegeben.
Private Function IsWriteProtected(FullFileName As String) As Boolean
Dim oFileInfo As New IO.FileInfo(sFullFileName)
If oFileInfo.IsReadOnly Then
Return True
Else
Return False
End If
End FunctionZum Thema Funktionen ist in dieser Serie bereits ein Post erschienen: iLogic: Struktureller Aufbau
Vollständiges Beispiel
Diese Funktion kann nun in einer Hauptroutine genutzt werden:
Sub Main()
Dim oDoc As Document = ThisDoc.Document
If IsWriteProtected(oDoc.FullFileName) Then
Logger.Warn("Datei ist schreibgeschützt.")
Exit Sub
Else
Logger.Info("Datei ist nicht schreibgeschützt.")
' Hier kann Code platziert werden, der nur
' in ausgecheckten Dateien ausgeführt wird.
End If
End Sub
Private Function IsWriteProtected(sFullFileName As String) As Boolean
Dim oFileInfo As New IO.FileInfo(sFullFileName)
If oFileInfo.IsReadOnly Then
Return True
Else
Return False
End If
End FunctionZu Beachten
Der Schreibschutz auf Dateiebene ist kein 100% sicherer Marker, ob eine Datei wirklich ausgechecked ist. Am Ende gibt es immer noch den wild-klickenden unbedarften User, der es am Ende schafft eine eingecheckte Datei lokal zu modifizieren:
Im Falle einer lokalen Modifikation würde eine iLogic beim Ausführen der Funktion IsWriteProtected() melden, dass die Datei schreibbar ist, obwohl sie nicht auf den aktuellen User ausgechecked ist. Der iLogic Code würde laufen. Gleichzeitig würden aber die Änderungen, die eine iLogic am Dokument vorgenommen hat, nicht in Vault vorhanden sein.