Arbeiten mit Alternativschlüsseln

Alle Microsoft Dataverse Tabellenzeilen haben eine eindeutige Kennung im GUID-Format. Diese Kennungen sind der Primärschlüssel für jede Tabelle. Wenn Sie eine Integration mit einem externen Datenspeicher durchführen müssen, können Sie möglicherweise den externen Datenbanktabellen eine Spalte hinzufügen, die einen Verweis auf die eindeutige Kennung einer Zeile enthält Dataverse. Manchmal können Sie jedoch die externe Datenbank nicht ändern. Mit alternativen Schlüsseln können Sie jetzt eine Spalte in einer Dataverse Tabelle so definieren, dass sie einer eindeutigen Kennung (oder einer eindeutigen Spaltenkombination) entspricht, die vom 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 Alternative Schlüssel definieren mit 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 damit die Schlüssel für eine Tabelle erstellen. Diese Nachricht verwendet 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üsseltabellendefinitionen

    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 keine Sicherheit auf Feldebene haben

  • Gültige Schlüsselgröße

    Wenn ein Schlüssel erstellt wird, validiert das System den Schlüssel und stellt dabei auch sicher, dass die Gesamtschlüsselgröße keine SQL-basierten Indexbeschränkungen wie 900 Bytes pro Schlüssel und 16 Spalten pro Schlüssel verletzt. Wenn die Schlüsselgröße die Einschränkungen nicht erfüllt, wird eine Fehlermeldung angezeigt.

  • Maximale Anzahl von Alternativschlüssel-Tabellendefinitionen für eine Tabelle

    Es kann maximal zehn (10) Alternativschlüssel-Tabellendefinitionen für eine Tabelle in einer Dataverse Instanz geben.

  • Unicode-Zeichen im Schlüsselwert

    Wenn die Daten in einer Spalte, die in einem Alternativschlüssel verwendet wird, eines der folgenden Zeichen enthalten /,<,>,*,%,&,:,\\,?,+ , dann funktionieren die Aktionen „Abrufen“ (GET), „Aktualisieren“ oder „Upsert“ (PATCH) nicht. Dieser Ansatz funktioniert, wenn nur Eindeutigkeit erforderlich ist. Wenn Sie diese Schlüssel jedoch als Teil der Datenintegration verwenden müssen, sollten Sie den Schlüssel am besten in Spalten erstellen, die keine Daten mit diesen Zeichen enthalten.

  • Wird in virtuellen Tabellen nicht unterstützt

    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 Keys Eigenschaft von EntityMetadata (EntityMetadata EntityType oder EntityMetadata Klasse). 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 Alternativschlüssel, um auf einen Datensatz zu verweisen
Verwenden der Änderungsverfolgung zum Synchronisieren von Daten mit externen Systemen
Verwenden Sie Upsert, um einen Datensatz einzufügen oder zu aktualisieren
Definieren Sie alternative Schlüssel zum Verweisen auf Datensätze