Map 3D 2022/2023 - Formularverwaltung in Fachschalen

In diesem LineLetter beleuchten wir das Beziehungsgeflecht zwischen Benutzer, Benutzergruppen und Formulartypen einer datenbankbasierten Fachschale. Initiiert wurde der LineLetter durch eine Supportanfrage, in der sich ein Anwender wunderte, weshalb ein bestimmtes einer Benutzergruppe zugewiesenes Formular nicht wie erwartet angezeigt wurde, sondern anstelle dessen ein anderes erschien.


Individuelle Formulare bieten die Möglichkeit, die Eingaben für bestimmte Anwendergruppen zielgerichtet zu steuern. So können die Erfasser beispielsweise neue Datensätze hinzufügen und vorhandene verändern; die Benutzer einer anderen Benutzergruppe hingegen lediglich die Daten anzeigen. Die Mitglieder einer dritten Benutzergruppe dürfen ausschließlich die Daten eines Teils der Datenfelder verändern, aber keine neuen Datensätze hinzufügen.


Ein neues Formularlayout definieren Sie, indem Sie das Standardformular einer Objektklasse auswählen und auf die Schaltfläche Hinzufügen klicken. Gestalten Sie das Layout wie gewünscht und beenden Sie den Formular-Designer. Weisen Sie das Layout einer Benutzergruppe zu.


Merksatz: Diese Zuordnung wird in der Tabelle tb_gn_usergroup_dialog verwaltet. Diese Systemtabelle enthält ausschließlich die Zuordnungen der individuellen Formulare zu Benutzergruppen, sobald diese explizit geändert wurde. Sie enthält für gewöhnlich keine Zuordnung der Standard-Formularlayouts der Objektklassen zu den Benutzergruppen.


Der letzte, fast unscheinbare, aber entscheidende Satz wird im weiteren Verlauf des LineLetters und des o.g. Supportfalls noch eine wesentliche Rolle spielen.



Sobald sich ein Benutzer, der Mitglied dieser Benutzergruppe ist, an der Datenbank anmeldet und das Formular öffnet, wird ihm das neue Layout präsentiert. Ist ein angemeldeter Benutzer kein Mitglied dieser Benutzergruppe, wird dieser nach wie vor das Formular mit dem Standard-Formularlayout zu Gesicht bekommen.


select u.username, d.dialogname, d.dialoglayoutname
  from tb_gn_usergroup_dialog x
  left join mapsys.tb_user_usergroup y on y.usergroup_id = x.usergroup_id
  left join mapsys.tb_user u on u.id = y.user_id
  left join tb_gn_dialog d on d.id = x.dialog_id;
 
USERNAME DIALOGNAME DIALOGLAYOUTNAME
MUSTERMANN MASTERITEM Formulartyp1

Ergebnis: Der Benutzer sieht den Formulartyp1 beim Öffnen des Formulars.

Das funktioniert alles so lange gut, bis ein Benutzer Mitglied mehrerer Benutzergruppen ist. Dann kommt eine weitere Komponente zum Tragen, nämlich die der Reihenfolge der Benutzergruppen, denen ein Benutzer angehört. Diese Information wird ebenfalls im Map-Systembenutzer (MAPSYS) in der Tabelle tb_user_usergroup gespeichert und über das Feld priority gesteuert: je kleiner die in dem Feld gespeicherte Zahl, desto höher die Priorität.

Ist ein Benutzer Mitglied mehrerer Benutzergruppen und sind allen Benutzergruppen, bei denen der Benutzer Mitglied ist, andere als das Standard-Formularlayout zugewiesen, erblickt der Benutzer beim Öffnen des Formulars dasjenige Layout, das in der Zuordnung der Benutzergruppen zum Benutzer am weitesten oben steht (kleinste Zahl im Feld priority).



select u.username, d.dialogname, d.dialoglayoutname, y.priority, g.name usergroup
  from tb_gn_usergroup_dialog x
  left join mapsys.tb_user_usergroup y on y.usergroup_id = x.usergroup_id
  left join mapsys.tb_user u on u.id = y.user_id
  left join tb_gn_dialog d on d.id = x.dialog_id
  left join mapsys.tb_usergroup g on g.id = x.usergroup_id
 order by y.priority;
 
USERNAME DIALOGNAME DIALOGLAYOUTNAME PRIORITY USERGROUP
MUSTERMANN MASTERITEM Formulartyp2 0 EDITOR
MUSTERMANN MASTERITEM Formulartyp1 1 VIEWER

Ergebnis: Der Benutzer sieht den Formulartyp2 beim Öffnen des Formulars.


Auch das scheint noch plausibel, bedeutet unter Umständen schon bei einer großen Zahl von Mitarbeitern, Benutzergruppen, Fachschalen und unterschiedlichen Formularlayouts einen nicht unerheblichen administrativen Aufwand. Sobald Sie die Reihenfolge der Benutzergruppen in der Zuordnung zu einem Benutzer verändern, erhält dieser ein anderes Formularlayout.


USERNAME DIALOGNAME DIALOGLAYOUTNAME PRIORITY USERGROUP
MUSTERMANN MASTERITEM Formulartyp1 0 VIEWER
MUSTERMANN MASTERITEM Formulartyp2 1 EDITOR

Ergebnis: Der Benutzer sieht den Formulartyp1 beim Öffnen des Formulars.


Spannend wird es, sobald ein Benutzer mehreren Benutzergruppen zugewiesen ist, wobei nicht allen, zumindest nicht den höher-prioritären Benutzergruppen ein individuelles Formularlayout zugewiesen wurde.



select u.username, d.dialogname, d.dialoglayoutname, y.priority, g.name usergroup
  from tb_gn_usergroup_dialog x
  left join mapsys.tb_user_usergroup y on y.usergroup_id = x.usergroup_id
  left join mapsys.tb_user u on u.id = y.user_id
  left join tb_gn_dialog d on d.id = x.dialog_id
  left join mapsys.tb_usergroup g on g.id = x.usergroup_id
 where u.username = 'MUSTERMANN' and DIALOGNAME = 'MASTERITEM'
 order by y.priority;
 

USERNAME DIALOGNAME DIALOGLAYOUTNAME PRIORITY USERGROUP
MUSTERMANN MASTERITEM Formulartyp1 1 VIEWER

Ergebnis: Der Benutzer sieht weiterhin den Formulartyp1 der Benutzergruppe VIEWER beim Öffnen des Formulars, obwohl eine andere Benutzergruppe mit dem Standard-Formularlayout viel weiter oben im Ranking der Zuordnung der Benutzergruppen zum Benutzer steht. Das liegt daran, weil mindestens einer anderen Benutzergruppe, die dem Benutzer zugewiesen wurde, ein anderes Formularlayout als das Standard-Formularlayout zugewiesen wurde. Sobald alle Benutzergruppen, denen ein Benutzer angehört, ein individuelles Formularlayout verwenden, gilt das Formularlayout der Benutzergruppe mit der höchsten Priorität im Ranking der Benutzergruppenzuweisung beim Benutzer – aber auch erst dann.



USERNAME DIALOGNAME DIALOGLAYOUTNAME PRIORITY USERGROUP
MUSTERMANN MASTERITEM Formulartyp2 0 ADMIN
MUSTERMANN MASTERITEM Formulartyp1 1 VIEWER

Ergebnis: Der Benutzer sieht den Formulartyp2 beim Öffnen des Formulars.


Das ist darin begründet – und jetzt schließt sich der Kreis zum Merksatz am Beginn des LineLetters – weil die Tabelle tb_gn_usergroup_dialog vorgabemäßig keine Zuordnung der Standard-Formularlayouts der Objektklassen zu den Benutzergruppen enthält. Und dann gilt das erste Vorkommen einer Benutzergruppe, der ein Benutzer angehört, ganz gleich, wie weit unten im Ranking diese Benutzergruppe angesiedelt ist. Wenn Sie jetzt nachträglich der obersten Benutzergruppe explizit das Standard-Formularlayout zuweisen (erst ein anderes Formularlayout auswählen und dann wieder zurück auf Standard), wird das Standard-Formularlayout auch tatsächlich verwendet, weil nun der entsprechende Verweis in der Tabelle tb_gn_usergroup_dialog ergänzt wurde!



select u.username, d.dialogname,
       nvl(d.dialoglayoutname, '<Standard>') dialoglayoutname,
       y.priority, g.name usergroup
  from tb_gn_usergroup_dialog x
  left join mapsys.tb_user_usergroup y on y.usergroup_id = x.usergroup_id
  left join mapsys.tb_user u on u.id = y.user_id
  left join tb_gn_dialog d on d.id = x.dialog_id
  left join mapsys.tb_usergroup g on g.id = x.usergroup_id
 where u.username = 'MUSTERMANN' and DIALOGNAME = 'MASTERITEM'
 order by y.priority;
 

USERNAME DIALOGNAME DIALOGLAYOUTNAME PRIORITY USERGROUP
MUSTERMANN MASTERITEM <Standard> 0 ADMIN
MUSTERMANN MASTERITEM Formulartyp1 1 VIEWER

Ergebnis: Der Benutzer sieht das Standard-Formularlayout beim Öffnen des Formulars.


Zusammenfassend lässt sich feststellen:

Die richtigen Formulare werden angezeigt, wenn:

  • keine individuellen Formularlayouts verwendet werden oder
  • jeder Benutzer nur einer Benutzergruppe zugeordnet ist oder
  • allen Benutzergruppen, denen die Benutzer angehören, ein individuelles Formularlayout oder explizit das Standard-Formularlayout zugewiesen wurde.

Sobald eine Zuordnung zwischen Benutzergruppe und Formularlayout fehlt, wird immer das Formularlayout mit der nächstniedrigen Priorität verwendet, selbst wenn andere Benutzergruppen eine höhere Priorität im Ranking des Benutzers hätten.


Viel Spaß beim Ausprobieren!


© 11/2022 Mensch und Maschine acadGraph GmbH. Alle Rechte vorbehalten