Freigeben über


Arbeiten mit Alternativschlüsseln

Alle Microsoft Dataverse Tabellenzeilen verfügen über einen eindeutigen Bezeichner, der als GUID formatiert ist. Diese sind der Primärschlüssel für jede Tabelle. Wenn Sie mit einem externen Datenspeicher integrieren müssen, können Sie möglicherweise eine Spalte zu externen Datenbanktabellen hinzufügen, sodass ein Verweis zum eindeutigen Bezeichner der Zeile in Dataverse-Apps vorhanden ist. Manchmal können Sie jedoch die externe Datenbank nicht ändern. Mit alternativen Schlüsseln können Sie nun eine Spalte in einer Dataverse-Tabelle so definieren, dass sie einem eindeutigen Bezeichner (oder einer eindeutigen Kombination von Spalten) entspricht, der von dem externen Datenspeicher verwendet wird. Sie können diesen Alternativschlüssel anstelle des Primärschlüssels verwenden, um eine Zeile in Dataverse eindeutig zu identifizieren. Sie müssen in der Lage sein zu definieren, welche Spalten eine eindeutige Identität für Ihre Zeilen darstellen. Sobald Sie die Spalten identifiziert haben, die für die Tabelle eindeutig sind, können Sie sie über die angepasste Benutzeroberfläche (UI) oder im Code als alternative Schlüssel deklarieren. Dieses Thema enthält Informationen zum Festlegen von Alternativschlüsseln im Datenmodell.

Erstellen Sie Alternativschlüssel

Sie können Alternativschlüssel programmgesteuert erstellen oder mithilfe der Anpassungstools. Weitere Informationen zur Verwendung der Anpassungstools finden Sie unter Definieren von Alternativschlüsseln mithilfe von Power Apps.

Um alternative Schlüssel programmatisch zu definieren, müssen Sie zunächst ein Objekt vom Typ EntityKeyMetadata erstellen (oder EntityKeyMetadata EntityType verwenden, wenn Sie mit Web-API arbeiten). Diese Klasse enthält die Schlüsselspalten. Sobald die Schlüsselspalten festgelegt sind, können Sie CreateEntityKey verwenden, um die Schlüssel für eine Tabelle zu erstellen. Diese Nachricht nimmt den Tabellennamen und die EntityKeyMetadata-Werte als Eingabe, um den Schlüssel zu erstellen.

Sie sollten folgende Einschränkungen berücksichtigen, wenn Alternativschlüssel erstellt werden:

  • Gültige Spalten in Schlüssel-Tabellen-Definitionen

    Nur Spalten der folgenden Typen können in Definitionen von alternativen Schlüsseltabellen enthalten sein:

    Spaltentyp Anzeigename
    DecimalAttributeMetadata Dezimalzahl
    IntegerAttributeMetadata Ganze Zahl
    StringAttributeMetadata Einzelne Textzeile
    DateTimeAttributeMetadata Datum/Uhrzeit
    LookupAttributeMetadata Nachschlagefeld
    PicklistAttributeMetadata Optionssatz
  • Attribute dürfen nicht mit einer Sicherheit auf Feldebene versehen sein

  • Gültige Schlüsselgröße

    Wenn ein Schlüssel erstellt wurde, überprüft das System, ob die Gesamtschlüsselgröße nicht gegen die SQL-basierten Indexeinschränkungen verstößt, zum Beispiel 900 Bytes pro Schlüssel und 16 Spalten pro Schlüssel. Wenn die Schlüsselgröße die Einschränkungen nicht erfüllt, wird eine Fehlermeldung angezeigt.

  • Maximale Anzahl von alternativen Schlüsseltabellendefinitionen für eine Tabelle

    Es kann maximal zehn (10) alternative Schlüsseltabellendefinitionen für eine Tabelle in einer Dataverse-Instanz geben.

  • Unicode-Zeichen im Schlüsselwert

    Wenn die Daten in einer Spalte, die in einem alternativen Schlüssel verwendet wird, eines der folgenden Zeichen enthalten: /, <, >, *, %, &, :, \\, ?, + dann funktionieren die Funktionen zum Abruf (GET), Aktualisieren oder Upsert (PATCH) nicht. Wenn Sie nur Eindeutigkeit benötigen, reicht dieser Ansatz aus, wenn Sie jedoch diese Schlüssel im Rahmen der Datenintegration benötigen, sollten Sie den Schlüssel besser in Spalten ohne Daten mit diesen Zeichen erstellen.

  • Nicht unterstützt in virtuellen Tabellen

    Alternativschlüssel werden in virtuellen Tabellen nicht unterstützt, da wir die Eindeutigkeit nicht erzwingen können, wenn sich die Daten auf einem anderen System befinden. Weitere Informationen: Erste Schritte mit virtuellen Tabellen (Entitäten)

Abrufen und Löschen von Alternativschlüsseln

Wenn Sie Alternativschlüssel abrufen oder löschen müssen, können Sie die Anpassungs-Benutzeroberfläche dazu verwenden, dies ohne Code zu schreiben zu erledigen. Dennoch bietet das SDK die folgenden beiden Nachrichten, um Alternativschlüssel programmgesteuert abzurufen und zu löschen.

Meldungsanforderungsklasse Beschreibung
RetrieveEntityKeyRequest Ruft den angegebenen Alternativschlüssel ab.
DeleteEntityKeyRequest Löscht den angegebenen Alternativschlüssel.

Um alle Schlüssel für eine Tabelle abzurufen, verwenden Sie die Keys Eigenschaft der Klasse EntityMetadata (EntityMetadata EntityType oder EntityMetadata). Sie liefert ein Array von Schlüsseln für eine Tabelle.

Verwenden Sie diese Web-API-Abfrage, um alle Tabellen anzuzeigen und zu sehen, welche alternative Schlüssel haben:

GET [Organization URI]/api/data/v9.2/EntityDefinitions?$select=SchemaName&$expand=Keys($select=KeyAttributes)

Einige Beispiele, die von dieser Anfrage zurückgegeben werden:

{
    "SchemaName": "Account",
    "MetadataId": "70816501-edb9-4740-a16c-6a5efbc05d84",
    "Keys": [
        {
            "KeyAttributes": [
                "accountnumber"
            ],
            "MetadataId": "1dc7b1d2-6beb-ec11-bb3d-0022482ea769"
        }
    ]
},
{
    "SchemaName": "example_Table",
    "MetadataId": "8f521e41-8934-ec11-b6e6-002248242f3b",
    "Keys": [
        {
            "KeyAttributes": [
                "example_key1",
                "example_key2"
            ],
            "MetadataId": "2f16d0c6-88ea-ec11-bb3d-0022482ea769"
        }
    ]
}

Überwachen der Indexerstellung für Alternativschlüssel

Alternativschlüssel nutzen Datenbankindizes um eine Eindeutigkeit zu gewährleisten und die Suchenleistung und zu optimieren. Wenn es viele vorhandener Datensätze in einer Tabelle gibt, dann kann die Indexerstellung lange dauern. Sie können das Reaktionsvermögen der Anpassungs-Benutzeroberfläche und den Lösungsimporte optimieren, indem Sie die Indexerstellung als Hintergrundprozess ausführen. Die Eigenschaft EntityKeyMetadata.AsyncJob (EntityKeyMetadata EntityType oder EntityKeyMetadata) bezieht sich auf den asynchronen Auftrag, der die Indexerstellung vornimmt. Die Eigenschaft EntityKeyMetadata.EntityKeyIndexStatus gibt den Status des Schlüssels als seinen Indexerstellungs-Auftragsstatus an. Der Status kann einer der folgenden sein:

  • Ausstehend
  • In Bearbeitung
  • Aktiv
  • Fehler

Wenn ein alternativer Schlüssel mit Hilfe der API erstellt wird und die Indexerstellung fehlschlägt, können Sie die Ursache des Fehlers im Detail nachvollziehen, die Probleme beheben und die Schlüsselanforderung mit Hilfe der ReactivateEntityKey (ReactivateEntityKey Aktion oder der ReactivateEntityKeyRequest Nachricht) reaktivieren.

Wenn der Alternativschlüssel gelöscht wird, während ein Indexerstellungsauftrag noch ausstehend oder in Verarbeitung ist, wird der Auftrag abgebrochen und der Index gelöscht.

Siehe auch

Verwenden Sie einen Alternativschlüssel, um auf einen Datensatz zu verweisen
Synchronisieren von Daten mit externen Systemen mithilfe der Änderungsnachverfolgung
Einen Datensatz mit Upsert einfügen oder aktualisieren
Definieren von Alternativschlüsseln für den Verweis auf Datensätze