Zum Hauptinhalt springen

iLogic: Schreibschutz von Dateien prüfen

·480 Wörter·3 min·
Inhaltsverzeichnis
Artikelserie: Inventor iLogic
Teil 18 - iLogic: Schreibschutz von Dateien prüfen

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:

Read Only Dateistatus

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 Function

Zum 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 Function

Zu 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.

Artikelserie: Inventor iLogic
Teil 18 - iLogic: Schreibschutz von Dateien prüfen