Wo legt Navision bzw. Business Central die Benutzereinrichtungen ab?
Vor dem RTC war dies noch ganz einfach: In der fin.zup im Ordner %AppData%. Das native Navision (fin.exe oder finsql.exe) verwarf die Einstellungen auch gerne bei jeder sich bietenden Gelegenheit. Und ein Allheilmittel gegen klemmendes Navision war es, diese zup (gesprochen: Z-UP, ZETT-Up = Setup) einfach zu löschen.
Unter Navision und Business Central RTC verteilen sich die Benutzereinstellungen auf diese drei Speicherorte:
* Tabelleneinträge in der Tabelle 2000000075 User Metadata
* Binäre Inhalte in der Datei %AppData%\Microsoft\Microsoft Dynamics NAV\PersonalizationStore.xml
* Clienteinstellungen in der Datei %AppData%\Microsoft\Microsoft Dynamics NAV\Version\ClientUserSettings.config
Die Clienteinstellungen (dritter Punkt) lassen sich nicht sinnvoll mit Bordmitteln von Navision kopieren. Aus einem sehr einfachen Grund: Damit Navision & Business Central überhaupt läuft, muss ja schon eine funktionierende ClientUserSettings.config vorhanden sein! Eine in Navision oder Business Central eingebaute Kopierfunktion für diese Benutzer -oder besser Client- Einrichtung ist daher nicht sonderlich hilfreich.
In Business Central ab der 15 (2019 Fall Release) fällt die lokale Einstellungsdatei PersonalizationStore komplett weg. Hier reden wir dann von Designänderungen, die in den Metadaten gespeichert sind.
Schwierig wird es also eigentlich nur beim Navision / Business Central RTC von Version 2009R2/2013 bis zur Version 2019 Spring Release, denn hier kommt zu der Tabelle 2000000075 User Metadata eben noch die PersonalizationStore.xml hinzu.
Genau um diese Business Central & Navision Versionen kümmert sich dieser Artikel hier.
Warum die Einstellungen kopieren?
Das ist in der Tat eine sehr wichtige Frage! Und die Antwort lautet leider: Weil man vorher nicht sauber gearbeitet hat.
Das Ergebnis der kopier-würdigen Einstellungen ist eine saubere Navision-Einstellung, in der viele Spalten sinnvoll eingeblendet oder ausgeblendet sind, in einer guten Reihenfolge angeordnet sind. Das Fast-Entry, Überspringen nicht benötigter Felder mit der Enter- oder Tabtaste, Menüs, Spaltenbreiten… All das ist schon gut eingerichtet und soll daher auf einen neuen oder anderen Mitarbeiter übertragen werden.
Der Fehler wurde hier aber schon viel früher gemacht!
Eigentlich sollten solche allgemein gültigen Einstellungen pauschal übergreifend für alle Benutzer gemacht werden. Was man dann im nativen Navision bis zur Version 2009R2 gemacht hat: Einfach direkt die Bildschirmmasken mal schnell mit STRG+F2 im Designer öffnen, schnell die „Next Control“ & Visible-Properties setzen, speichern, fertig.
Das native Navision hat sowieso gerne die Einstellungen pro Form (der Vorgänger der Page) verworfen, so auch in diesem Fall. Und Zack, hatten alle Benutzer die gleichen Spaltenreihenfolge, Breiten, Sichtbarkeiten.
In Business Central kann ich das auch wieder machen. Hier nennt sich das InPlace Designer. Und RTC Business Central und Navision? Hat auch so eine coole Funtkion!
Einfach das Business Central bzw. Navision z.B. per Lnk-Datei aufrufen mit
Microsoft.Dynamics.Nav.Client.exe -configure -profile:”Buchhaltung“
starten. In diesem speziellen Config-Modus werden alle Einstellungen, die gemacht werden (Spaltenreihenfolge, Sichtbarkeiten, Fast-Entry, Menüs…) nicht in der Tabelle 2000000075 User Metadata gespeichert, sondern in der Tabelle 2000000074 Profile Metadata.
Und Überraschung: Alle Benutzer, die sich danach mit diesem Profil anmelden, bekommen die gleichen Einstellungen, die sie dann wieder nach eigenen Wünschen verfeinern können.
Die eigentliche Kopie
…ist nicht ganz einfach, wegen der Aufteilung in die Config-Datei und den Daten in der 2000000075 User Metadata.
In der %AppData%\Microsoft\Microsoft Dynamics NAV\PersonalizationStore.xml werden eher Kleinigkeiten wie Spaltenbreiten abgelegt, während in der Tabelle 2000000075 User Metadata Dinge wie sichtbare Spalten, Reihenfolgen etc. abgelegt werden. Dies wechselt aber in den verschiedenen RTC-Versionen von Business Central & Navision.
Faustformel: Je neuer die Navision / Business Central Version, desto mehr liegt in der Metadata-Tabelle. Die dahinter liegende, immer besser werdende Technik ist auch die Basis für die heutigen Page Extensions. Zusätzlich kommt als Problem hinzu, dass diese PersonalizationStore.xml ja auf dem Client liegt, für die ausführende Tier-2 Schicht also gar nicht sichtbar oder erreichbar ist.
Die Tabelle 2000000075 User Metadata ist eine reinrassige Navision-Tabelle, die als solches auch recht einfach kopiert werden kann. Die PersonalizationStore.xml ist hingegen echt nervig beim Kopieren! Insbesondere, da Navision und Business Central beim Beenden diese Datei grundsätzlich neu schreibt, aus den Einstellungen, die Navision oder Business Central sich während der Laufzeit im Arbeitsspeicher gemerkt hat.
Mit Bordmitteln kommen wir also gar nicht an diese Datei heran! Wir könnten sie zwar überschreiben. Aber auch dann überschreibt sie Navision bzw. Business Central beim Beenden wieder mit den nicht gewollten Werten.
Meine Lösung geht daher einen etwas komplizierteren Weg:
Beim Beenden eines Mandaten überprüft eine Triggerfunktion, ob der aktuelle User die User Setup-Tabelle zumindest indirekt beschreiben darf.
Ist dies der Fall, so wird die beim Start der Sitzung(!) aktuelle Datei %AppData%\Microsoft\Microsoft Dynamics NAV\PersonalizationStore.xml in ein Blob-Feld der Benutzer Einrichtung geschrieben.
Somit „kennt“ Navision nach und nach alle PersonalizationStores aller Benutzer, für die es auch eine Benutzer Einrichtung gibt. Achtung! Diese stammt jeweils aus der vorherigen(!) Sitzung, da die evtl. aktuell veränderten Einstellungen ja erst beim kompletten Beenden der Microsoft.Dynamics.Nav.Client.exe geschrieben wird.
Aber: Besser als nichts!
Der Rest ist wieder reine Routinearbeit:
In der Benutzereinrichtung gehen Sie bitte auf die Benutzereinrichtung, von der aus die Einstellungen auf den aktuell angemeldeten Benutzer kopiert werden sollen.
Über den Aktionen-Befehl „Kopiere Einrichtung“ starten Sie die Kopie.
Navision fragt dann noch einmal nach, ob die Richtung auch so stimmt:
Wenn Sie Ja auswählen, prüft Navision & Business Central erst einmal, ob die nötigen Rechte dafür ausreichen und ob sowohl in der Quelle als auch im Ziel bereits einmal ein PersonalizationStore geschrieben wurde. Das ist wichtig, da es derzeit keinen „sauberen“ Weg dafür gibt, den Pfad %Appdata% auszulesen. Beim weiter oben beschriebenen Speichern der PersonalizationStore.xml wurde dies gleich mit erledigt.
Dann kopiert Business Central & Navision die letzte gültige Einstellungsdatei sowie die aktuell gültigen Einträge aus der Tabelle 2000000075 User Metadata der Quelle in die gleiche Tabelle des angemeldeten Users.
Dementsprechend muss der neu einzurichtende User zumindest für diesen Vorgang auch die weiter unten beschriebenen Rechte haben.
Hierbei wird dann auch der bereits früher gespeicherte PersonalizationStore der Quelle in den aktuellen %appdata% Pfad kopiert. Aber mit der Dateikennung „.new“, also z.B. PersonalizationStore.xml.new. Business Central und Navision öffnet dann einen Explorer auf eben dieses Verzeichnis.
Nun ist das laufende Business Central oder Navision dieses Ziel-Users zu beenden. Zur Erinnerung: Erst jetzt (über-)schreibt Business Central bzw. Navision die alte PersonalizationStore.xml !
Nach dem Beenden kann die PersonalizationStore.xml in dem bereits geöffneten Browser nun einfach gelöscht werden, und die bereits bereit liegende PersonalizationStore.xml.new einfach zu PersonalizationStore.xml umbenannt werden.
Hierfür sollte (wie ich es grundsätzlich empfehle) die Order-Option „Einstellungen bei bekannten Dateitypen ausblenden“ Deaktiviert sein.
Nötige User-Rechte
Tabelle 2000000120 User Leserecht
Tabelle 91 User setup (Indirekte) Ändernrechte & Leserechte
Tabelle 2000000075 User Metadata (Indirekte) Schreibrechte, (Indirekte) Löschrechte, (Indirekte) Ändernrechte