Freigeben über


Arbeiten mit Alternativschlüsseln

Alle Microsoft Dataverse-Tabellenzeilen besitzen eindeutige Bezeichner, die als GUIDs definiert werden. 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 in Dataverse-Apps vorhanden ist. Dies ermöglicht einen lokalen Verweis für einen Link zu der Dataverse-Zeile. 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 Alternativschlüssel programmgesteuert zu definieren, müssen Sie zunächst ein Objekt des Typs EntityKeyMetadata erstellen (oder EntityKeyMetadata EntityType, 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 Suchfeld
    PicklistAttributeMetadata Optionssatz
  • Gültige Schlüsselgröße

    Wenn ein Schlüssel erstellt wurde, überprüft das System, ob dieser Schlüssel von der Plattform unterstützt werden kann, u. a. auch, 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 nicht die Einschränkungen erfüllt, wird eine Fehlermeldung angezeigt.

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

    Es kann maximal zehn 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 Aktionen retrieve (GET), update 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

    Alternative Schlü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 Eigenschaft Keys 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 EntityKeyMetadata.AsyncJob-Eigenschaft (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 Alternativschlüssel mithilfe der API erstellt wird, können Sie, wenn bei der Indexerstellung ein Fehler auftritt, Details über die Ursache des Fehlers einsehen, die Probleme beheben und die Schlüsselanforderung erneut aktivieren mithilfe der ReactivateEntityKey (ReactivateEntityKey Action oder ReactivateEntityKeyRequest-Meldung).

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

Hinweis

Können Sie uns Ihre Präferenzen für die Dokumentationssprache mitteilen? Nehmen Sie an einer kurzen Umfrage teil. (Beachten Sie, dass diese Umfrage auf Englisch ist.)

Die Umfrage dauert etwa sieben Minuten. Es werden keine personenbezogenen Daten erhoben. (Datenschutzbestimmungen).