DMS Datenraum

Hotline Blog: Office Manager DMS

Dokumentenmanagement und digitale Archivierung

März
08
2026

Dateizugriffsrechte über zugeordneten Kontakt definieren

Kategorie: Administration, Automatisieren
Support-Recherche: Kontakte, Makro-Editor


Ich habe einen besonderen Wunsch zu den Zugriffsrechten. Die Berechtigungen für Dokumente sollen über den Kontakt definiert sein. Wenn ein Dokument zu einem bestimmten Kunden gehört, dürfen nur ausgewählte DMS-Anwendende das Dokument öffnen. Wie kann ich das realisieren?

Das ist zwar keine Grundfunktion, es lässt sich aber mit einem Skript erledigen. Office Manager DMS ist hier ja besonders flexibel. Beachten Sie, dass sich die Dateizugriffsrechte nur mit Office Manager Enterprise verwalten lassen, diese Edition ist also Systemvoraussetzung.

Kontakt → Dateirechte → Eventskript → Zugriffsrechte

Übersicht – was wir im Folgenden machen

Die Enterprise-Edition erlaubt individuelle Dateizugriffsrechte für jedes Dokument, lesen Sie hierzu bitte die Dokumentation. Zu beachten ist, dass die Berechtigungen nur für die Dokumentendatei gelten, der Archivdatensatz ist weiterhin für alle sichtbar, die das Archiv öffnen dürfen. Dies ist beabsichtigt. Alle User sehen, dass ein gesuchtes Dokument vorhanden ist, müssen sich aber bei Bedarf an eine berechtigte Person wenden.

Wir werden der Kontaktverwaltung ein neues Datenfeld für die Zugriffsrechte hinzufügen. Dem Kontakt (Kunde, Lieferant o. ä.) lässt sich dann eine Berechtigung für die Dokumente zuweisen. Wird ein neues Dokument für diesen Kontakt hinzugefügt oder ein bestehender Datensatz geändert, erbt die Dokumentendatei diese Zugriffsrechte.

Die folgende Schritt-für-Schritt-Anleitung ist umfangreich, im Kern geht es aber nur um diese fünf Punkte:

  • Gewünschte Dateizugriffsrechte festlegen und ereignisgesteuertes Scripting zulassen
  • Der Kontaktdatenbank das Datenfeld „docaccessrights“ hinzufügen und im Layout platzieren
  • Die Auswahlliste für das Datenfeld mit den Dateizugriffsrechten füllen
  • Das Skript im Makroeditor bearbeiten
  • Die neue Funktionalität testen

Schritt-für-Schritt-Anleitung

Die Funktionalität einrichten

  1. Wählen Sie den Menübefehl Datei | Optionen | Einstellungen und wechseln Sie zur Seite Sicherheit | Dokumente.
  2. Die gewünschten Zugriffsrechte erstellen. Hier werden die Windows-Rechte des Active Directory für Benutzer und/oder Gruppen als Grundlage genutzt.
    Dateizugriffsrechte definieren
  3. Zur Seite Sicherheit wechseln und die Option Ereignisgesteuertes Scripting zulassen aktivieren.
  4. Klick auf OK, um die Einstellungen zu speichern und das Fenster zu schließen. Die Administrator-Ebene nicht beenden, falls danach gefragt wird.
  5. Im Hauptfenster zur Ansicht der Kontakte wechseln.
  6. Menü Datei | Datenbank | Anpassen | Felder definieren. Sicherstellen, dass im Fenstertitel „Felder definieren: Kontaktdatenbank …“ steht. Sonst zurück zum vorherigen Schritt.
  7. Das Datenfeld für die Berechtigungen anlegen: Klick auf den Mausschalter Neu.
    Feldname = „docaccessrights“, Datentyp = „Zeichenkette“, Feldgröße = „40“.
    Bei Kommentar können Sie den Link zu diesem Blogartikel hinterlegen. So sehen Sie später wozu das Datenfeld dient.
    Zur Seite Ansicht wechseln. Bezeichnung = „Dateirechte“, Eingabestil = „Nur Auswahl aus Liste“. Empfehlung: Die Option Änderungen protokollieren aktivieren.
  8. Klick auf Übernehmen und Schließen.
  9. Das Datenfeld im Eigenschaftenfenster hinterlegen, damit es ausgefüllt werden kann.
    Menü Ansicht | Anpassen | Layout entwerfen | Kontakt-Eigenschaften (Hauptfenster) oder Kontakt-Eigenschaften (Weitere).
    Datenfeld im Layout platzieren
    Sie können ein neues Feld hinzufügen oder beispielsweise das Eingabefeld für Fax ändern, wenn Sie dieses nicht brauchen:
    Die Beschriftung „fax“ anklicken und Datenfeld in „docaccessrights“ ändern. Ebenfalls für das Eingabefeld „fax“.
    Im kleinen Fenster des Layoutdesigners auf OK klicken.
  10. Menübefehl Datei | Optionen | Auswahllisten wählen und links Kontakte | Dateirechte markieren. Die Namen der Zugriffsrechte in die Liste eintragen. Die Namen müssen genau mit den zuvor erstellten Zugriffsrechten im Einstellungsdialog übereinstimmen (s. a. letzten Hinweis).
  11. Menü Start | Makro | Makro-Editor. Auf Event Scripting | Hilfe klicken und das kurze Kapitel verstehen. Tipp: Im Netzwerkbetrieb können Sie während der Testphase ein Skript nutzen, dass nur für Ihren Computer gilt.
  12. Falls bisher noch nicht aktiviert, bitte Event Scripting | Event Scripting installieren, um diese Skriptfunktionen erstmalig einzurichten.
  13. Im Menü Event Scripting den (i. d. R. obersten) Eintrag EventScripting.pas anklicken, um die Skriptdatei zu laden.
    Event-Skript im Makroeditor
  14. Fügen Sie folgende Funktion zwischen implementation und dem abschließenden end. in das Skript ein:
    procedure DatasetDocBeforePost(ADataset: TDataset);
    {Der aktuelle Dokument-Datensatz wird jetzt gespeichert}
    {Zugriffsrechte vom zugeordneten Kontakt übernehmen    }
    var LContactGUID, LAccessRights: string;
    begin
      LContactGUID := ADataset.FieldByName('contactguid').AsString;
      LAccessRights := OfficeManager.CRM.Connection.ExecSQLScalar('SELECT docaccessrights '
        + Format('FROM contact WHERE contactguid={id %s}', [LContactGUID]));
      ADataset.FieldByName('accessrights').AsString := LAccessRights;
    end;
    
  15. Bitte das Skript speichern und den Editor schließen.

Die Funktionalität testen

  1. Wechseln Sie zur Kontaktansicht und erstellen Sie einen neuen Testkontakt oder bearbeiten Sie einen vorhandenen mit Kontakt | Eigenschaften.
  2. Wählen Sie bei Dateirechte (siehe oben zum Thema Layoutdesigner) die gewünschten Zugriffsrechte für die Dokumente dieses Kontakts aus und speichern Sie mit Klick auf OK.
    Dem Kontakt die Dateirechte zuweisen
  3. Wechseln Sie zur Dokumentenansicht und erstellen Sie ein neues Testdokument oder bearbeiten Sie ein vorhandenes mit Start | Eigenschaften.
  4. Auf der Registerseite Datei finden Sie das Listenfeld Zugriffsrechte. Dieses wird vermutlich leer sein und es soll auch leer bleiben.
  5. Wählen Sie den zuvor für diesen Test bearbeiteten Kontakt aus.
  6. Speichern Sie den Dokumentendatensatz mit Klick auf OK. In diesem Moment wird das Skript automatisch ausgeführt: DatasetDocBeforePost ist die Ereignisfunktion für „vor dem Speichern in der Dokumententabelle automatisch ausführen“. Die Funktion liest die Kontakt-ID in die Variable LContactGUID, ermittelt mit ExecSQLScalar die im Kontakt hinterlegten Dateirechte und schreibt diese dann mit FieldByName('accessrights').AsString in den Dokumentendatensatz.
  7. Programmintern wird jetzt festgestellt, dass sich die Zugriffsrechte für dieses Dokument geändert haben und schreibt gemäß den Einstellungen neue Zugriffsrechte in das Windows-Dateisystem.
  8. Wählen Sie Start | Eigenschaften, um den Eigenschaftendialog des Dokuments erneut zu öffnen. Klicken Sie hinter Dateiname auf das Ordnersymbol und wählen Sie Datei-Eigenschaften.
    Zugriffsrechte des Dokuments prüfen
  9. Im Windows-Dialog auf Seite Sicherheit finden Sie die neuen Berechtigungen für diese Dokumentendatei. Sie sehen hier auch, dass Dateibesitzer ebenfalls alle Berechtigungen haben.

Was noch möglich und zu beachten ist

Das Skript erweitern

In den Dokumenteigenschaften können Anwendende die Zugriffsrechte manuell wählen. Das Skript überschreibt diese aber beim Speichern, was zu Irritationen führen kann. Mit Datei | Datenbank | Anpassen | Felder definieren in der Dokumentenansicht können Sie die Berechtigungen für das Datenbankfeld „accessrights“ anpassen und z. B. die Bearbeitung auf „für niemanden“ umstellen. Das Eingabefeld ist dann deaktiviert.
Oder, falls Sie manuelle Änderungen der Rechte für ein Dokument zulassen möchten: Mit
if ADataset.FieldByName('accessrights').AsString <> '' then exit;
im Skript am Anfang der Funktion wird das Skript keine Änderung ausführen, falls bereits Zugriffsrechte gesetzt sind.

Passen Sie das Skript (insbesondere die Funktion DatasetDocBeforePost) an Ihre Anforderungen an. Sollen die Rechte zum Beispiel nur für bestimmte Dokumentkategorien automatisch vom Kontakt übernommen werden? Dann fügen Sie am Anfang der Funktion die Zeile
if ADataset.FieldByName('category').AsString <> '(nur für diese Kategorie ausführen)' then exit;
oder ähnliches ein.

Änderungen nur für berechtigte Personen

Hier wird auch klar, dass Änderungen am Skript nur von autorisierten Personen durchgeführt werden dürfen. Schützen Sie also die Datei „EventScripting.pas“ mit Dateiberechtigungen.

Sollen nur ausgewählte Personen die Dateirechte in der Kontaktdatenbank ändern? Mit Datei | Datenbank | Anpassen | Felder definieren in der Kontaktansicht lassen sich die Berechtigungen für das Datenbankfeld „docaccessrights“ anpassen.
Nachträgliche Änderungen

Die Zugriffsrechte werden immer dann in die Datei geschrieben, wenn der Datensatz des Dokumentes gespeichert wird. Falls Sie den Kontakt bearbeiten und die dort hinterlegten Dateirechte nachträglich anpassen, werden die Dokumente des Kontakts nicht automatisch angepasst! Alle entsprechenden Dokumentdatensätze müssen dann noch einmal gespeichert werden (Post in der Datenbank).

Hierfür alle Dokumente des Kontakts suchen, alle markieren und die Eigenschaften bearbeiten. Wenn Sie in einem beliebigen Datenfeld eine Änderung angeben, wird dies in allen markierten Dokumenten ausgeführt. Beispielsweise können Sie absichtlich falsche Zugriffsrechte wählen, die dann beim Speichern vom Skript korrigiert und in die Datei geschrieben werden.

Datensicherung berücksichtigen

Denken Sie beim Festlegen der Berechtigungen daran, dass die Datensicherungssoftware Leserechte benötigt. Diese läuft oft unter dem Administrator- oder dem lokalem Systemkonto.

Zukünftige Vereinfachungen

Beim Erstellen dieses Skripts ist aufgefallen, dass eine OmAPI-Funktion zum Einlesen von INI-Sektionsnamen fehlt. Damit würde das manuelle Befüllen der Auswahlliste für die Dateirechte entfallen. Mit dem nächsten Office-Manager-Update wird so eine Funktion kommen und die Realisierung vereinfachen. Es ist übrigens auch jetzt schon mit einem zusätzlichen Skript möglich. Auch eine Funktion, die nachträgliche Änderungen automatisch in die Dokumente übernimmt, ist geplant.




Noch keine Kommentare

Eigenen Kommentar schreiben oder eine Rückfrage stellen

Ihre E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind markiert *

Sie können folgende HTML-Tags verwenden: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>