Teilen über


Einen Datensatz mit Upsert einfügen oder aktualisieren

 

Veröffentlicht: Januar 2017

Gilt für: Dynamics 365 (online), Dynamics 365 (on-premises), Dynamics CRM 2016, Dynamics CRM Online

Sie können die Komplexität verringern, die in Datenintegrationsszenarien involviert ist, indem Sie die Nachricht UpsertRequest verwenden. Wenn Sie Daten in Microsoft Dynamics 365 von einem externen System laden, beispielsweise in einem Massendaten-Integrationsszenario, wissen Sie möglicherweise nicht, ob ein Datensatz bereits in Dynamics 365 vorhanden ist. In solchen Fällen wissen Sie nicht, ob Sie einen UpdateRequest- oder CreateRequest-Vorgang aufrufen müssen. Dies führt dazu, dass bei der Abfrage des Datensatzes zuerst bestimmt werden muss, ob er vorhanden ist, bevor der entsprechende Vorgang ausgeführt wird. Sie können diese Komplexität verringern und Daten effizienter in Dynamics 365 laden, indem die neue UpsertRequest (Aktualisieren oder Einfügen)-Nachricht verwendet wird.

In diesem Thema

Verwenden von Upsert

Grundlegendes zum Upsert-Prozesses

Beispielcode

Verwenden von Upsert

Es ist am besten, UpsertRequest nur zu verwenden, wenn Sie nicht sicher sind, ob der Datensatz vorhanden ist. Das bedeutet, wenn Sie nicht sicher sind, ob Sie einen CreateRequest- oder UpdateRequest-Vorgang aufrufen sollten. Es gibt eine Leistungsabnahme beim Verwenden von UpsertRequest im Vergleich zum Verwenden von CreateRequest. Wenn Sie sicher sind, dass der Datensatz nicht vorhanden ist, verwenden Sie CreateRequest.

UpsertRequest enthält eine Eigenschaft namens Target. Diese Eigenschaft enthält die Entitätsdefinition, die in einem UpdateRequest- oder CreateRequest-Vorgang verwendet wird. Sie enthält auch alle Attribute, die von CreateRequest für den Zielentitätstyp erforderlich sind, damit der Datensatz erstellt werden, wenn er nicht vorhanden ist.

Sie können RecordCreated überprüfen, um zu ermitteln, ob der Datensatz erstellt wurde.RecordCreated ist TRUE, wenn der Datensatz nicht vorhanden war und erstellt wurde. Es ist FALSE, wenn der Datensatz bereits vorhanden war und aktualisiert wurde.Target ist eine EntityReference für den Datensatz, der als vorhanden ermittelt wurde, oder für den Datensatz, der erstellt wurde.

Um zu verstehen, wie UpsertRequest funktioniert, vgl. folgenden Abschnitt.

Grundlegendes zum Upsert-Prozesses

Im Folgenden wird die Ablauflogik bei Erhalt einer UpsertRequest beschrieben:

  1. Senden Sie UpsertRequest mit genügend Daten für einen Erstellungs- oder Einfügevorgang.

  2. Microsoft Dynamics 365 sucht den Datensatz, auf den die Zielentität ausgerichtet ist.

  3. Wenn der Datensatz vorhanden ist:

    1. Legen Sie die ID-Eigenschaft der Zielentität mit der ID des gefundenen Datensatzes fest.

    2. Rufen Sie das Update auf.

    3. Legen Sie den RecordCreated auf false fest.

    4. Erstellen Sie ein EntityReference aus der Zielentität des Updates als Wert für Target.

    5. Geben Sie den UpsertResponse zurück.

  4. Wenn der Datensatz nicht vorhanden ist:

    1. Kopieren Sie alle Alternativschlüsselwerte in die Zielentitätsattribute.

    2. Rufen Sie Create auf.

    3. Legen Sie den RecordCreated auf true fest.

    4. Erstellen Sie einen EntityReference aus dem Zielentitätstyp und ID-Ergebnis der Create-Anfrage als Wert für Target.

    5. Geben Sie den UpsertResponse zurück.

Die folgende Abbildung zeigt den Prozess an, der aufgeklappt wird, wenn ein UpsertRequest empfangen wird.

upsert process flow

Beispielcode

Die Einen Datensatz mit Upsert einfügen oder aktualisieren-Beispiel-ProductUpsertSample.cs-Datei enthält die folgende ProcessUpsert-Methode zur Anwendung der UpsertRequest-Meldung zu den Inhalten einer XML-Datei zum Erstellen neuer Datensätze oder Aktualisieren vorhandener Datensätze.


public void ProcessUpsert(String Filename)
{
    Console.WriteLine("Executing upsert operation.....");
    XmlTextReader tr = new XmlTextReader(Filename);
    XmlDocument xdoc = new XmlDocument();
    xdoc.Load(tr);
    XmlNodeList xnlNodes = xdoc.DocumentElement.SelectNodes("/products/product");

    foreach (XmlNode xndNode in xnlNodes)
    {
        String productCode = xndNode.SelectSingleNode("Code").InnerText;
        String productName = xndNode.SelectSingleNode("Name").InnerText;
        String productCategory = xndNode.SelectSingleNode("Category").InnerText;
        String productMake = xndNode.SelectSingleNode("Make").InnerText;

        //use alternate key for product
        Entity productToCreate = new Entity("sample_product", "sample_productcode", productCode);

        productToCreate["sample_name"] = productName;
        productToCreate["sample_category"] = productCategory;
        productToCreate["sample_make"] = productMake;
        UpsertRequest request = new UpsertRequest()
        {
            Target = productToCreate
        };

        try
        {
            // Execute UpsertRequest and obtain UpsertResponse. 
            UpsertResponse response = (UpsertResponse)_serviceProxy.Execute(request);
            if (response.RecordCreated)
                Console.WriteLine("New record {0} is created!", productName);
            else
                Console.WriteLine("Existing record {0} is updated!", productName);
        }

        // Catch any service fault exceptions that Microsoft Dynamics CRM throws.
        catch (FaultException<Microsoft.Xrm.Sdk.OrganizationServiceFault>)
        {
            throw;
        }

    }
    // Prompts to view the sample_product entity records.
    // If you choose "y", IE will be launched to display the new or updated records.
    if (PromptForView())
    {
        ViewEntityListInBrowser();
    }

}

Siehe auch

Synchronisieren von Daten mit externen Systemen mithilfe der Änderungsnachverfolgung
Definieren von Alternativschlüsseln für eine Entität
Verwenden Sie einen Alternativschlüssel, um Datensätze zu erstellen

Microsoft Dynamics 365

© 2017 Microsoft. Alle Rechte vorbehalten. Copyright