Anleitung

Eine MatrixBox stellt Daten aus zwei Tabellen gleichzeitig dar. Die eine Tabelle in der horizontalen und die andere in der vertikalen Richtung. Somit ist es möglich einen Wert in zweidimensionaler Abhängigkeit darzustellen.

Die Tabelle, die in der „SourceTable“-Eigenschaft des Formulars angegeben ist, wird vertikal dargestellt, also der linke Teil der Trennlinie der MatrixBox. Über die Eigenschaft „MatrixSourceTable“ der MatrixBox wird die Tabelle angegeben, welche horizontal dargestellt wird.

Lege nun eine neue MatrixBox auf ein leeres Formular und setze die Eigenschaften „Name“ auf „MatrixBox“ und „Editable“ auf „Nein“.

In diesem Tutorial wollen wir zur Demonstation im linken Teil der MatrixBox alle Zugriffsrollen darstellen. Somit musst du in der „SourceTable“-Eigenschaft des Formulars den Wert „User Role“ (Tabellen-ID: 2000000004) eintragen. Über „Ansicht“ - „Field Menu“ werden alle Felder der Tabelle „User Role“ dargestellt. Markiere die beiden Zeilen („Role ID“ und „Name“) und klicke mit deiner Maus anschließend im linken Teil der MatrixBox. Somit hast du die beiden Felder in die MatrixBox eingebunden.

Formular Designer und das Field Menu

Im rechten Teil der MatrixBox wollen wir alle Benutzer darstellen und müssen somit in der „MatrixSourceTable“-Eigenschaft der MatrixBox den Wert „User“ (Tabellen-ID: 2000000002) eintragen. Platziere nun im rechten, leeren Teil der MatrixBox als erstes eine CheckBox und dann eine TextBox. Die CheckBox dient später als eigentliche Matrix. Die TextBox als Spaltenüberschrift.

Formular Designer und die Toolbox

Lege jetzt über „Ansicht“ - „C/AL Globals“ eine neue Variable mit der Bezeichnung „InGroup“ und vom Typ „Boolean“ an. Diese Variable musst du in der „SourceExpr“-Eigenschaft der CheckBox hinterlegen. Die TextBox benötigt auch noch eine Angabe der „SourceExpr“-Eigenschaft:

CurrForm.MatrixBox.MatrixRec."UserID"

Wenn wir nun das Formular starten, werden unsere gesamten Benutzergruppen in der vertikalen und alle Benutzer in der horizontalen dargstellt. Als nächstes möchten wir, dass Navision automatisch überall dort ein Häkchen setzt, wo der Benutzer die Benutzergruppen zugewiesen hat.

Deshalb gehen wir in den „OnAfterGetRecord“-Trigger der MatrixBox und legen dort eine lokale Variable mit der Bezeichnung „MemberOf“ und vom Typ „Record“ und Subtype „Member Of“ (Tabellen-ID: 2000000003) an. Im Trigger dann muss der folgende Programmcode geschrieben werden:

MemberOf.SETFILTER("User ID", CurrForm.MatrixBox.MatrixRec."User ID");
MemberOf.SETFILTER("Role ID", "Role ID");
InGroup:=MemberOf.FIND('-');

In den ersten beiden Zeilen setzen wir einen Filter, damit die Variable nur noch die Datensätze enthält, die dem aktuellen Benutzer und der aktuellen Benutzergruppe entsprechen. Wird mindestens ein Datensatz gefunden, wird der Variable „InGroup“ ein TRUE zugewiesen und ein Häkchen wird angezeigt.

Das war es schon im Groben. Das Beispiel ist natürlich nicht perfekt und wird im zweiten Teil des Tutorials noch um einige Dinge erweitert werden, damit das Ganze auch produktiv eingesetzt werden kann. Ziel des ersten Teils war es kurz und knapp zu demonstrieren wie eine MatrixBox funktioniert.