Freigeben über


Suchen mit mehreren Tabellen

Mithilfe von Spalten vom Typ "Mehrfachtabellen", die manchmal als polymorphe Nachschlagevorgänge bezeichnet werden, können Sie eine bestimmte Tabelle mit mehreren 1:N-Beziehungen zu anderen Tabellen in der Umgebung verwenden. Eine einzelne Suchtypspalte kann auf mehrere andere Tabellen verweisen. Ein an die Mehrtabellentypspalte übermittelter Nachschlagewert entspricht einem Datensatz in einer der verknüpften Tabellen. Sie können Mehrtabellen-Nachschlagevorgänge sowohl mit lokalen Tabellen als auch mit virtuellen Tabellen als Referenztabellen erstellen.

Microsoft Dataverse enthält derzeit Mehrtabellentypen als statische Typen, z. B. Customer, die eine Verbindung mit Account und ContactTabellen herstellt. Mithilfe von Nachschlagevorgängen mit mehreren Tabellen können Sie alle anderen mehrstufigen Nachschlagevorgänge definieren, die Sie benötigen.

Anmerkung

Sie können benutzerdefinierte Mehrtabellen-Nachschlagevorgänge über das SDK für .NET- oder Dataverse-Web-API erstellen und ändern. Interaktive Benutzeroberflächenunterstützung wird in einer zukünftigen Version verfügbar sein.

Beispiel: Web-API-Mehrfachtabellen-Nachschlagemuster (PowerShell) enthält den Beispielcode, der das in diesem Artikel gezeigte Beispiel veranschaulicht.

Um Informationen über verwandte Tabellen mit einer Nachschlagespalte abzurufen, einschließlich Nachschlagevorgängen mit mehreren Tabellen, verwenden Sie eine der folgenden Methoden: Rufen Sie die Nachschlageeigenschaft ab oder erweitern Sie die einzelwertige Navigierungseigenschaft.

Abrufen der Nachschlageparameter

Jede Nachschlagespalte verfügt über eine entsprechende Nachschlageeigenschaft , die Sie mithilfe der $select Abfrageoption abrufen können. Diese Eigenschaften folgen der Benennungskonvention: _<name>_value. <name> ist der logische Name der Nachschlagespalte. Der Wert der Nachschlageeigenschaft ist der eindeutige Bezeichner für den zugehörigen Datensatz, falls vorhanden.

Bei einem Nachschlagevorgang mit mehreren Tabellen ist die eindeutige ID nicht hilfreich, es sei denn, Sie wissen, auf welche Tabelle sie angewendet wird. Wenn Sie Daten aus einer beliebigen Nachschlagespalte abrufen, können Sie die folgenden OData-Anmerkungseinstellungen anwenden. Diese Einstellungsoptionen sind besonders nützlich bei einem Mehrtabellen-Nachschlagevorgang, da sie mehr Daten aus dem zugehörigen Datensatz und Informationen darüber bereitstellen, aus welcher Tabelle die Daten stammen.

Annotation Beschreibung
OData.Community.Display.V1.FormattedValue Gibt den Primärnamenspaltenwert für den in dieser Spalte derzeit festgelegten Datensatz zurück.
Microsoft.Dynamics.CRM.associatednavigationproperty Gibt den Namen der einzelwertigen Navigationseigenschaft zurück, die den aktuell in dieser Spalte festgelegten Datensatz unterstützt.
Microsoft.Dynamics.CRM.lookuplogicalname Gibt den logischen Namen der Tabelle für den aktuell in dieser Spalte festgelegten Datensatz zurück.

Anmerkung

Verwenden Sie Nachschlageeigenschaften, um den formatierten Wert abzurufen und unterstützende Metadaten abzurufen, die zum Erweitern der einzelwertigen Navigationseigenschaft erforderlich sind, um weitere Informationen zu erhalten.

Erfahren Sie mehr über das Abrufen von Nachschlageeigenschaftendaten.

Erweitern Sie die einzelwertige Navigationseigenschaft

Wenn Sie einen Nachschlagevorgang mit mehreren Tabellen erstellen, erfordert jede Tabelle eine separate 1:n-Beziehung. Jede Beziehung fügt eine eindeutige einzelwertige Navigationseigenschaft hinzu.

Der Name dieser einzelwertigen Navigationseigenschaft wird in der OneToManyRelationshipMetadata.ReferencingEntityNavigationPropertyName-Eigenschaft gespeichert. Ein häufiger Fehler ist, wenn Benutzer versuchen, den Wert dieser groß-/kleinschreibungsabhängigen Eigenschaft zu erraten. Es gibt drei Möglichkeiten, den richtigen Namen dieser Navigationseigenschaft endgültig zu bestimmen:

Wenn Sie die Tabelle abfragen, verwenden Sie die $expand Abfrageoption mit der einzelwertigen Navigationseigenschaft, um die zugehörige Tabelle einzuschließen. Erfahren Sie mehr über das Verknüpfen verwandter Tabellen mithilfe der OData-Abfrageoption$expand.

Beispiel

Angenommen, Sie hosten Medien für Benutzer in einer Bibliothek. Sie haben viele verschiedene Medienobjekte. Viele von ihnen haben denselben Namen, sind aber in verschiedenen Formaten wie Bücher, Audio und Video.

In diesem Beispiel unterstützen drei Tabellen jede bestimmte Medienart:

  • sample_Book enthält sample_name und sample_callnumber Spalten.
  • sample_Audio enthält sample_name und sample_audioformat Spalten.
  • sample_Video enthält sample_name und sample_videoformat Spalten.

Die sample_Media Tabelle weist einen Mehrtabellen-Nachschlagevorgang mit dem Schemanamen sample_MediaPolymorphicLookupauf. Sie können die Nachschlagespalte so festlegen, dass sie auf Datensätze in einer der drei spezifischen Medientabellen verweist.

sample_Book Tabelle

Die sample_Book Tabelle ist die erste der drei verknüpften Tabellen. Diese einfache Abfrage ruft die beiden In dieser Tabelle gefundenen Datensätze ab.

GET [Organization URI]/api/data/v9.2/sample_books?$select=sample_name,sample_callnumber
Content-Type: application/json; charset=utf-8
OData-MaxVersion: 4.0
OData-Version: 4.0
Accept: application/json

Dieses Beispiel zeigt den JSON-Textkörper der Antwort:

{
   "@odata.context": "[Organization URI]/api/data/v9.2/$metadata#sample_books(sample_name,sample_callnumber)",
   "value": [
      {
         "@odata.etag": "W/\"171704230\"",
         "sample_callnumber": "ww-3452 ",
         "sample_bookid": "00000000-0000-0000-0000-000000000001",
         "sample_name": "Content1"
      },
      {
         "@odata.etag": "W/\"171704235\"",
         "sample_callnumber": "a4e-87hw",
         "sample_bookid": "00000000-0000-0000-0000-000000000005",
         "sample_name": "Content2"
      }
   ]
}

sample_Audio Tabelle

Die sample_Audio Tabelle ist die zweite der drei verknüpften Tabellen. Diese einfache Abfrage ruft die beiden Datensätze in dieser Tabelle ab.

GET [Organization URI]/api/data/v9.2/sample_audios?$select=sample_name,sample_audioformat
Content-Type: application/json; charset=utf-8
OData-MaxVersion: 4.0
OData-Version: 4.0
Accept: application/json

Dieses Beispiel zeigt den JSON-Textkörper der Antwort:

{
   "@odata.context": "[Organization URI]/api/data/v9.2/$metadata#sample_audios(sample_name,sample_audioformat)",
   "value": [
      {
         "@odata.etag": "W/\"171704242\"",
         "sample_audioid": "00000000-0000-0000-0000-000000000002",
         "sample_audioformat": "mp4",
         "sample_name": "Content1"
      },
      {
         "@odata.etag": "W/\"171704246\"",
         "sample_audioid": "00000000-0000-0000-0000-000000000004",
         "sample_audioformat": "wma",
         "sample_name": "Content3"
      }
   ]
}

sample_Video Tabelle

Die sample_Video Tabelle ist die dritte der drei verknüpften Tabellen. Diese einfache Abfrage ruft die beiden Datensätze in dieser Tabelle ab.

GET [Organization URI]/api/data/v9.2/sample_videos?$select=sample_name,sample_videoformat
Content-Type: application/json; charset=utf-8
OData-MaxVersion: 4.0
OData-Version: 4.0
Accept: application/json

Dieses Beispiel zeigt den JSON-Textkörper der Antwort:

{
   "@odata.context": "[Organization URI]/api/data/v9.2/$metadata#sample_videos(sample_name,sample_videoformat)",
   "value": [
      {
         "@odata.etag": "W/\"171704254\"",
         "sample_name": "Content2",
         "sample_videoformat": "avi",
         "sample_videoid": "00000000-0000-0000-0000-000000000006"
      },
      {
         "@odata.etag": "W/\"171704250\"",
         "sample_name": "Content3",
         "sample_videoformat": "wmv",
         "sample_videoid": "00000000-0000-0000-0000-000000000003"
      }
   ]
}

sample_Media Tabelle

Diese Tabelle enthält die Mehrfachtabellen-Nachschlagespalte mit dem Schemanamen sample_MediaPolymorphicLookup und dem logischen Namen sample_mediapolymorphiclookup.

Für diese Demonstration enthält diese Tabelle nur vier Datensätze, die mit unterstützenden Datensätzen zusammenhängen:

sample_name sample_mediapolymorphiclookup-Wert sample_mediapolymorphiclookup-Typ
Medienobjekt 1 00000000-0000-0000-0000-000000000001 sample_book
Medienobjekt 2 00000000-0000-0000-0000-000000000002 sample_audio
Media-Objekt 3 00000000-0000-0000-0000-000000000003 sample_video
Media-Objekt 4 00000000-0000-0000-0000-000000000004 sample_audio

In der sample_Media Tabelle wird diese Abfrage als Beispiel verwendet:

  • Wählt die _sample_mediapolymorphiclookup_value Nachschlageeigenschaft in der $select Abfrageoption für die sample_mediapolymorphiclookup Nachschlagespalte aus. Mithilfe der Einstellungen OData.Community.Display.V1.FormattedValue, Microsoft.Dynamics.CRM.associatednavigationproperty und Microsoft.Dynamics.CRM.lookuplogicalnameodata.include-annotations erhalten Sie diese Werte mit jedem Datensatz.
  • Erweitert drei einzelwertige Navigationseigenschaften, eine für jede verknüpfte Tabelle. Für jede erweiterte Navigationseigenschaft wird die primäre Namensspalte (sample_name) sowie der entsprechende benutzerdefinierte Spaltenwert ausgewählt: sample_callnumber, , sample_audioformatsample_videoformat.

Anmerkung

Nur eine von drei erweiterten einzelwertigen Navigationen könnte Daten enthalten. Alle drei werden null sein, wenn die Suche-Spalte nicht festgelegt ist.

Diese Vorgänge veranschaulichen, wie die Tabellendatensätze über die sample_MediaPolymorphicLookup Nachschlagespalte verknüpft sind.

Anforderung

GET [Organization URI]
/api/data/v9.2/sample_medias
?$select=sample_name,_sample_mediapolymorphiclookup_value
&$expand=sample_MediaPolymorphicLookup_sample_book(
    $select=sample_name,sample_callnumber),
sample_MediaPolymorphicLookup_sample_audio(
    $select=sample_name,sample_audioformat),
sample_MediaPolymorphicLookup_sample_video(
    $select=sample_name,sample_videoformat)
Content-Type: application/json; charset=utf-8
OData-MaxVersion: 4.0
OData-Version: 4.0
Accept: application/json
Prefer: odata.include-annotations="OData.Community.Display.V1.FormattedValue,Microsoft.Dynamics.CRM.associatednavigationproperty,Microsoft.Dynamics.CRM.lookuplogicalname"

Anmerkung

Zur Lesbarkeit wird die URL über mehrere Zeilen hinweg angezeigt. Entfernen Sie beim Erstellen der Anforderung alle Zeilenumbrüche und Leerzeichen, sodass die URL eine einzelne fortlaufende Zeichenfolge ist.

Antwort

Wenn Sie diese Abfrageoptionen und Einstellungsheader festlegen, enthält der Textkörper der Antwort den folgenden JSON-Code:

{
   "@odata.context": "[Organization URI]/api/data/v9.2/$metadata#sample_medias(sample_name,_sample_mediapolymorphiclookup_value,sample_MediaPolymorphicLookup_sample_book(sample_name),sample_MediaPolymorphicLookup_sample_audio(sample_name,sample_audioformat),sample_MediaPolymorphicLookup_sample_video(sample_name))",
   "value": [
      {
         "@odata.etag": "W/\"171704264\"",
         "sample_mediaid": "00000000-0000-0000-0000-000000000007",
         "sample_name": "Media Object One",
         "_sample_mediapolymorphiclookup_value@OData.Community.Display.V1.FormattedValue": "Content1",
         "_sample_mediapolymorphiclookup_value@Microsoft.Dynamics.CRM.associatednavigationproperty": "sample_MediaPolymorphicLookup_sample_book",
         "_sample_mediapolymorphiclookup_value@Microsoft.Dynamics.CRM.lookuplogicalname": "sample_book",
         "_sample_mediapolymorphiclookup_value": "00000000-0000-0000-0000-000000000001",
         "sample_MediaPolymorphicLookup_sample_book": {
            "sample_bookid": "00000000-0000-0000-0000-000000000001",
            "sample_name": "Content1",
            "sample_callnumber": "ww-3452"
         },
         "sample_MediaPolymorphicLookup_sample_audio": null,
         "sample_MediaPolymorphicLookup_sample_video": null
      },
      {
         "@odata.etag": "W/\"171704268\"",
         "sample_mediaid": "00000000-0000-0000-0000-000000000008",
         "sample_name": "Media Object Two",
         "_sample_mediapolymorphiclookup_value@OData.Community.Display.V1.FormattedValue": "Content1",
         "_sample_mediapolymorphiclookup_value@Microsoft.Dynamics.CRM.associatednavigationproperty": "sample_MediaPolymorphicLookup_sample_audio",
         "_sample_mediapolymorphiclookup_value@Microsoft.Dynamics.CRM.lookuplogicalname": "sample_audio",
         "_sample_mediapolymorphiclookup_value": "00000000-0000-0000-0000-000000000002",
         "sample_MediaPolymorphicLookup_sample_book": null,
         "sample_MediaPolymorphicLookup_sample_audio": {
            "sample_audioid": "00000000-0000-0000-0000-000000000002",
            "sample_name": "Content1",
            "sample_audioformat": "mp4"
         },
         "sample_MediaPolymorphicLookup_sample_video": null
      },
      {
         "@odata.etag": "W/\"171704273\"",
         "sample_mediaid": "00000000-0000-0000-0000-000000000009",
         "sample_name": "Media Object Three",
         "_sample_mediapolymorphiclookup_value@OData.Community.Display.V1.FormattedValue": "Content3",
         "_sample_mediapolymorphiclookup_value@Microsoft.Dynamics.CRM.associatednavigationproperty": "sample_MediaPolymorphicLookup_sample_video",
         "_sample_mediapolymorphiclookup_value@Microsoft.Dynamics.CRM.lookuplogicalname": "sample_video",
         "_sample_mediapolymorphiclookup_value": "00000000-0000-0000-0000-000000000003",
         "sample_MediaPolymorphicLookup_sample_book": null,
         "sample_MediaPolymorphicLookup_sample_audio": null,
         "sample_MediaPolymorphicLookup_sample_video": {            
            "sample_videoid": "00000000-0000-0000-0000-000000000003",
            "sample_name": "Content3",
            "sample_videoformat": "wmv"
         }
      },
      {
         "@odata.etag": "W/\"171704279\"",
         "sample_mediaid": "00000000-0000-0000-0000-000000000010",
         "sample_name": "Media Object Four",
         "_sample_mediapolymorphiclookup_value@OData.Community.Display.V1.FormattedValue": "Content3",
         "_sample_mediapolymorphiclookup_value@Microsoft.Dynamics.CRM.associatednavigationproperty": "sample_MediaPolymorphicLookup_sample_audio",
         "_sample_mediapolymorphiclookup_value@Microsoft.Dynamics.CRM.lookuplogicalname": "sample_audio",
         "_sample_mediapolymorphiclookup_value": "00000000-0000-0000-0000-000000000004",
         "sample_MediaPolymorphicLookup_sample_book": null,
         "sample_MediaPolymorphicLookup_sample_audio": {
            "sample_audioid": "00000000-0000-0000-0000-000000000004",
            "sample_name": "Content3",
            "sample_audioformat": "wma"
         },
         "sample_MediaPolymorphicLookup_sample_video": null
      }
   ]
}

Festlegen einer Nachschlagespalte mit mehreren Tabellen

Das Aktualisieren eines Datensatzes, um eine polymorphe Nachschlagespalte festzulegen, entspricht genau der Beschreibung in Associate with a single-valued navigation property. Verwenden Sie den richtigen Namen der Navigationseigenschaft mit Einzelwert. Bei diesen Namen wird die Groß-/Kleinschreibung beachtet.

In diesem Beispiel wird das Aktualisieren eines Werts mithilfe vonPATCH.

Anforderung

PATCH [Organization Uri]/api/data/v9.2/sample_medias(00000000-0000-0000-0000-000000000007) HTTP/1.1
If-Match: *
OData-MaxVersion: 4.0
OData-Version: 4.0
If-None-Match: null
Accept: application/json

{
  "sample_MediaPolymorphicLookup_sample_book@odata.bind": "sample_books(00000000-0000-0000-0000-000000000001)"
}

Antwort

HTTP/1.1 204 NoContent
OData-Version: 4.0

Erstellen einer Nachschlagespalte mit mehreren Tabellen

Anmerkung

Das folgende Beispiel zeigt, wie die Dataverse-Web-API verwendet wird. Sie können das SDK auch für .NET mit den Klassen CreatePolymorphicLookupAttributeRequest und CreatePolymorphicLookupAttributeResponse verwenden.

Verwenden Sie die CreatePolymorphicLookupAttribute-Aktion , um einen Nachschlagevorgang mit mehreren Tabellen zu erstellen. In diesem Beispiel wird die Spalte als Teil einer Lösung mit dem eindeutigen Namen polymorphiclookupexamplesolution mithilfe des SolutionUniqueName Parameters erstellt.

Anforderung

POST [Organization URI]/api/data/v9.2/CreatePolymorphicLookupAttribute HTTP/1.1
Consistency: Strong
Accept: application/json
OData-MaxVersion: 4.0
Authorization: Bearer [REDACTED]
OData-Version: 4.0

{
  "OneToManyRelationships": [
    {
      "ReferencedEntity": "sample_book",
      "SchemaName": "sample_media_sample_book",
      "ReferencingEntity": "sample_media"
    },
    {
      "ReferencedEntity": "sample_audio",
      "SchemaName": "sample_media_sample_audio",
      "ReferencingEntity": "sample_media",
      "CascadeConfiguration": {
        "Assign": "NoCascade",
        "Share": "NoCascade",
        "Delete": "RemoveLink",
        "Merge": "NoCascade",
        "Reparent": "NoCascade",
        "Unshare": "NoCascade"
      }
    },
    {
      "ReferencedEntity": "sample_video",
      "SchemaName": "sample_media_sample_video",
      "ReferencingEntity": "sample_media",
      "CascadeConfiguration": {
        "Assign": "NoCascade",
        "Share": "NoCascade",
        "Delete": "RemoveLink",
        "Merge": "NoCascade",
        "Reparent": "NoCascade",
        "Unshare": "NoCascade"
      }
    }
  ],
  "Lookup": {
    "AttributeTypeName": {
      "Value": "LookupType"
    },
    "SchemaName": "sample_MediaPolymorphicLookup",
    "Description": {
      "LocalizedLabels": [
        {
          "@odata.type": "Microsoft.Dynamics.CRM.LocalizedLabel",
          "Label": "Polymorphic lookup that can reference a Book, Audio, or Video record",
          "LanguageCode": 1033
        }
      ],
      "@odata.type": "Microsoft.Dynamics.CRM.Label"
    },
    "AttributeType": "Lookup",
    "DisplayName": {
      "LocalizedLabels": [
        {
          "@odata.type": "Microsoft.Dynamics.CRM.LocalizedLabel",
          "Label": "Media",
          "LanguageCode": 1033
        }
      ],
      "@odata.type": "Microsoft.Dynamics.CRM.Label"
    },
    "@odata.type": "Microsoft.Dynamics.CRM.ComplexLookupAttributeMetadata"
  },
 "SolutionUniqueName": "polymorphiclookupexamplesolution"
}

Die folgende Antwort enthält ein Beispiel für den CreatePolymorphicLookupAttributeResponse ComplexType. Sie enthält die ID des polymorphen Attributs und alle erstellten Beziehungen.

Antwort

HTTP/1.1 200 OK
Content-Type: application/json; odata.metadata=minimal
OData-Version: 4.0

{
    "@odata.context":
      "http://<organization URL>/api/data/v9.2/$metadata#Microsoft.Dynamics.CRM.CreatePolymorphicLookupAttributeResponse",

    "RelationshipIds":[
        "77d4c6e9-0397-eb11-a81c-000d3a6cfaba",
        "7ed4c6e9-0397-eb11-a81c-000d3a6cfaba",
        "85d4c6e9-0397-eb11-a81c-000d3a6cfaba"
    ],

    "AttributeId":"d378dd3e-42f4-4bd7-95c7-0ee546c7de40"
}

Hinzufügen einer Beziehung zu einer vorhandenen Mehrtabellen-Nachschlagespalte

Das Hinzufügen einer Beziehung zu einer bestehenden Multi-Tabellen-Nachschlage-Spalte über die Web-API ist vergleichbar mit dem Erstellen einer neuen 1-zu-viele-Beziehung. Erfahren Sie, wie Sie ein 1:n-Verhältnis mithilfe der Web-API erstellen. Der Unterschied besteht darin, dass die OneToManyRelationshipMetadata-Eigenschaft.Lookup einen SchemaName Wert aufweisen muss, der der vorhandenen polymorphen Nachschlagespalte entspricht.

Entfernen einer Beziehung aus einer vorhandenen Mehrtabellen-Nachschlagespalte

Das Entfernen einer Beziehung aus einer vorhandenen Mehrtabellen-Nachschlagespalte mithilfe der Web-API entspricht dem Löschen einer Eins-zu-viele-Beziehung. Senden Sie eine DELETE Anforderung an den RelationshipDefinitions Endpunkt, indem Sie den Wert der OneToManyRelationshipMetadata-Eigenschaft.MetadataId als Schlüssel verwenden.

Siehe auch

Beispiel: Web-API-Mehrtabellen-Nachschlagebeispiel (PowerShell)
Verwenden der Web-API mit Tabellendefinitionen
Tabellenbeziehungen erstellen und aktualisieren
Abfragen von Tabellendefinitionen mithilfe der Web-API
Abrufen von Tabellendefinitionen nach Name oder MetadataId
Tabellen und Spalten mithilfe der Web-API modellieren
Beispiel für Web-API-Tabellenschemavorgänge
Beispiel für Web-API-Tabellen-Schemaoperationen (C#)