Mit n:n-Beziehungen arbeiten

Abgeschlossen

n:n-Beziehungen bieten Ihnen die Flexibilität zur Nachverfolgung, wenn mehrere Zeilen dieselben verknüpften Daten enthalten. Im Gegensatz zu 1:n-Beziehungen haben n:n-Beziehungen kein Konzept einer primären Tabelle. Die Beziehung ist vollständig symmetrisch, und Sie können auf den Satz verwandter Zeilen zugreifen, beginnend von beiden Seiten der n:n-Beziehung. Sie erfahren in den folgenden Abschnitten, wie Sie mit n:n-Beziehungen in einer Canvas-App arbeiten, indem Sie die Elemente Schreibtisch und Schreibtischfunktion verwenden, um mit dem Contoso-Datenmodell für die gemeinsame Nutzung von Arbeitsbereichen fortzufahren. Das folgende Diagramm zeigt die Beziehung und die entsprechenden Daten.

Diagramm, das die n:n-Beziehung zwischen Schreibtischen und Schreibtischfunktionen veranschaulicht

Jeder Schreibtisch kann mehrere zugeordnete Zeilen für die Schreibtischfunktion haben, und Sie können jede Schreibtischfunktion mehreren Schreibtischen zuordnen. Sie können von einer Schreibtischzeile aus auf die Schreibtischfunktionen zugreifen, indem Sie den Ausdruck ThisItem.'Desk Features' verwenden. In der Zeile der Schreibtischfunktionen können Sie den Ausdruck ThisItem.Desks verwenden, um auf alle Schreibtische zuzugreifen, die dieser bestimmten Schreibtischfunktion zugeordnet sind.

Sie können diesen Ausdruck verwenden, um eine durch Kommas getrennte Liste von Werten für jeden Schreibtisch in einem Katalog anzuzeigen, wie im folgenden Beispiel gezeigt.

Screenshot eines Katalogs mit einer Liste von Schreibtischen

Um die Aufgabe zu erfüllen, den Beschriftungstext auszufüllen, richten Sie die Eigenschaft Text auf der Beschriftung auf die folgende Formel ein:

Concat(ThisItem.'Desk Features',Name ,",")

Beachten Sie die Auswirkungen auf die Leistung, wenn Sie diese Formel verwenden, insbesondere wenn Sie über viele Datensätze verfügen, da von Dataverse auf die Daten zugegriffen wird. Das folgende Bild zeigt, dass vom Monitor aus ein Aufruf an getRows ausgeführt wird, um die Liste der Schreibtische zu erhalten. Für jeden Schreibtisch wird ein Aufruf an getNavigatedRowInTableRow ausgeführt, um die Schreibtischfunktionen abzurufen.

Screenshot der Kartenmonitor-Ausgabe mit mehreren hervorgehobenen Netzwerkaufrufen an „getNavigatedRowInTableRow“, eine für jede Schreibtischzeile

Möglicherweise finden Sie es alternativ vorteilhafter, die Schreibtischfunktionen nur anzuzeigen, nachdem der Benutzer eine einzelne Schreibtischzeile in einem Katalog ausgewählt hat oder nachdem er einen Drilldown zu den Details der Schreibtischzeile ausgeführt hat.

Eine andere Möglichkeit, die Beziehung zu verwenden, ist, einem Benutzer zu erlauben, eine Schreibtischfunktion auszuwählen und dann die Eigenschaft controlName.Selected.Desks zu verwenden, um Elemente in einem Katalog auszufüllen.

Screenshot mit einer Dropdownliste mit Standorten und einem Katalog mit Schreibtischen

Diese Methode funktioniert gut, wenn Sie im Kombinationsfeld nur eine einzelne Auswahl zulassen. Die Logik wird komplexer, wenn Sie die Mehrfachauswahl aktivieren. Derzeit bietet Power Fx keine einfache Möglichkeit, um eine Schnittmenge zweier Sammlungen auszudrücken, die erforderlich ist, damit das Szenario funktioniert. Problemumgehungen sind möglich, Sie können zum Beispiel alle ausgewählten Funktionen durchlaufen, verwandte Schreibtische in einer einzigen Sammlung sammeln, die Duplikate entfernen und dann die Sammlung als Quelle des Elements verwenden. Aufgrund der mehrfachen Dataverse-Anforderungen (eine für jede ausgewählte Funktion) wird die Leistung dieses Ansatzes schnell nachlassen, wenn die Tabellen größer werden.

Die Beziehung herstellen

Die primäre Möglichkeit, eine n:n-Beziehung herzustellen, besteht darin, die Relate()-Funktion zu verwenden, ähnlich wie bei einer 1:n-Beziehung. Der Hauptunterschied besteht darin, dass es egal ist, welcher Datensatz der erste oder zweite Parameter der Funktion Relate() ist, da sich keine primäre Tabelle in der Beziehung befindet.

Das Verwalten von n:n-Beziehungen in einem Formular ist komplexer als n:1-Suchspalten. Die n:n-Beziehung ist in der Feldliste verfügbar. Wenn Sie das Feld jedoch dem Formular hinzufügen, generiert das System die Formeln nicht, damit das Steuerelement funktioniert, und Ihnen wird ein Fehler angezeigt, der dem folgenden Beispiel ähnelt.

Screenshot des automatisch generierten Formulars, das eine Schreibtischfunktionen-Datenkarte für ein n:n-Feld enthält

Aktualisieren Sie die Choices()-Funktion in der Eigenschaft Items für die Tabelle, die sich auf der anderen Seite der n:n-Beziehung befindet, um das Problem zu beheben. Entsperren Sie die Karte auf der Registerkarte Erweitert, um diese Aufgabe abzuschließen.

Screenshot des Eigenschaftenbereichs für das Kombinationsfeld, generiert als Teil des Formulars für die n:n-Beziehung, mit hervorgehobener Registerkarte „Erweitert“

Im Contoso-Beispiel möchten Sie Schreibtischfunktionen verwenden. Vergewissern Sie sich nach dem Entsperren des Steuerelements, dass die Eigenschaft Items'Schreibtischfunktionen' als Datenquelle anzeigt.

Screenshot der Datenkarte-Eigenschaften

Hinweis

Im vorherigen Szenario wird das Formular zum Hinzufügen einer Zeile verwendet. Stellen Sie sicher, dass Sie die Eigenschaft DisplayMode für die Karte aus der Standardeinstellung Anzeige auf Bearbeiten stellen, um die Bearbeitungsfunktionen zu unterstützen.

Nachdem Sie die Eigenschaften angepasst haben, funktioniert die Formularbenutzeroberfläche und Sie können aus dem Kombinationsfeld Elemente auswählen. Wenn Sie jedoch versuchen, das Formular zu übermitteln, wird eine Fehlermeldung ähnlich wie im folgenden Beispiel angezeigt.

Screenshot einer Fehlermeldung, die angezeigt wird, wenn ein Formular mit einem Kombinationsfeld zur Mehrfachauswahl übermittelt wird

Löschen Sie die Eigenschaft Aktualisieren, und verarbeiten Sie die n:n-Zuordnung manuell, nachdem das Formular übermittelt wurde.

Screenshot der Update-Eigenschaft der Tabellenspalte, die den Schreibtischfunktionen zugeordnet ist

Nachdem Sie die Eigenschaft Update gelöscht haben, funktioniert die Formularübermittlung. Zwischen den Tabellenzeilen Schreibtisch und Schreibtischfunktion werden die Beziehungen jedoch nicht erstellt. Fügen Sie der Eigenschaft OnSelect des Häkchensymbols, das standardmäßig zum Senden des Formulars verwendet wird, die folgende Logik hinzu, um die Beziehungen herzustellen:

  1. Speichern Sie die Schreibtischfunktionen, die im Kombinationsfeld ausgewählt wurden, als Sammlung. Dieser Schritt ist nötig, da durch die Formularübermittlung die Felder zurückgesetzt werden und der Wert verloren geht.

  2. Übermitteln Sie das Formular.

  3. Verwenden Sie zum Herstellen der Beziehung die gespeicherte Sammlung der Schreibtischfunktionen.

Screenshot der OnSelect-Eigenschaft für das Kontrollkästchensymbol, das zum Übermitteln des Formulars verwendet wird

Andere Designoptionen

Die Benutzererfahrung mit n:n-Beziehungen ähnelt Erfahrungen, bei denen die Spalte „Auswahl“ verwendet wird. Auswahlwerte werden vom Hersteller vorgegeben. Sie können nicht deaktiviert oder gesichert werden. Aus diesem Grund eignen sich Auswahlfelder für Szenarien mit selten geänderten Daten, wie zum Beispiel eine Länder‑/Regionenliste. Darüber hinaus können Zeilen in den zugehörigen Tabellen während der Ausführung deaktiviert, gesichert und hinzugefügt werden. Diese Möglichkeit macht eine n:n-Beziehung zu einer guten Option in Szenarien, in denen während der Laufzeit eine gewisse Flexibilität erforderlich ist, zum Beispiel wenn Sie eine Lösung mit Tags versehen, bei der der Kontakt eine n:n-Beziehung mit einem Tag hat und Tags von den Benutzern hinzugefügt.

n:n-Beziehungen sind in Situationen von Vorteil, in denen Sie die Zuordnung zwischen Zeilen zweier Tabellen erfassen möchten. Die Beziehung zwischen den Zeilen kann keine anderen Daten speichern. Wenn Sie zum Beispiel eine Beziehung zwischen einem Kontakt und einer Sprachentabelle haben, können Sie nachverfolgen, dass eine Person zwei Sprachen spricht.

Diagramm, das die n:n-Beziehung zwischen Kontakt und Sprachtabellen veranschaulicht

Sie würden jedoch nicht wissen, wie lange die Person jede Sprache spricht und wie gut.

Ein gängiges alternatives Entwurfsmuster besteht darin, Ihre eigene überschneidende Tabelle zu erstellen. Die folgende Tabelle der gesprochenen Sprachen ist eine weitere angepasste Dataverse-Tabelle. Sie können dieser Tabelle Spalten für jede andere Eigenschaft hinzufügen, die die spezifische Beziehung beschreibt. Dann verfügt diese neue Tabelle über n:1-Beziehungen zu Kontakt und Sprache.

Diagramm, das die Beziehungen zwischen Kontakt, gesprochenen Sprachen und Sprachtabellen anzeigt

Die Arbeit mit diesen Tabellen in Ihrer Anwendung ähnelt der Arbeit mit anderen Tabellen mit 1:n‑ oder n:1-Beziehungen. Da eine zusätzliche Tabelle beteiligt ist, stellen Sie möglicherweise fest, dass zusätzliche Logik erforderlich ist, um eine reibungslose Benutzererfahrung zu gewährleisten. Es ist wichtig, die Anforderungen Ihrer Anwendung zu verstehen und zu wissen, ob eine n:n-Beziehung andere Daten nachverfolgen muss, insbesondere wenn man bedenkt, dass Sie diese Entscheidung zu dem Zeitpunkt treffen müssen, zu dem die Tabellen verknüpft sind.