Delen via


Upsert gebruiken om een record in te voegen of bij te werken

 

Gepubliceerd: november 2016

Is van toepassing op: Dynamics CRM 2015

U kunt de complexiteit van scenario's voor gegevensintegratie verminderen door gebruik te maken van het UpsertRequest-bericht. Bij het laden van gegevens Microsoft Dynamics 365 vanuit een extern systeem, bijvoorbeeld in een scenario voor bulkgewijze gegevensintegratie, weet u mogelijk niet of een record al bestaat in Dynamics 365. In dergelijke gevallen weet u niet of u een bewerking UpdateRequest of een bewerking CreateRequest moet aanroepen. Dit resulteert in het eerst opvragen van de record om te bepalen of deze bestaat voordat de desbetreffende bewerking wordt uitgevoerd. U kunt nu efficiënter deze complexiteit verminderen en gegevens in Dynamics 365 laden door gebruik te maken van het nieuwe bericht UpsertRequest (Bijwerken of Invoegen).

Waarschuwing

Voor Microsoft Dynamics CRM Online-organisaties is deze functie alleen beschikbaar als uw organisatie is bijgewerkt naar Dynamics CRM Online 2015 Update 1. Deze functie is niet beschikbaar voor Dynamics CRM (on-premises).

In dit onderwerp

Upsert gebruiken

Inzicht in het Upsert-proces

Voorbeeldcode

Upsert gebruiken

U kunt het beste alleen UpsertRequest gebruiken als u niet zeker weet of de record bestaat. Met andere woorden, als u niet zeker weet of u een bewerking CreateRequest of een bewerking UpdateRequest moet aanroepen. Er is sprake van prestatievermindering bij gebruik van UpsertRequest in vergelijking met het gebruik van CreateRequest. Als u er zeker van bent dat de record niet bestaat, gebruikt u CreateRequest.

Het bericht UpsertRequest bevat een eigenschap met de naam Target. Deze eigenschap bevat een entiteitsdefinitie die wordt gebruikt in een bewerking UpdateRequest of een bewerking CreateRequest. Het bevat tevens alle kenmerken die door de CreateRequest worden vereist voor het doelentiteitstype zodat de record kan worden gemaakt als deze niet bestaat.

U kunt RecordCreated controleren om na te gaan of de record is gemaakt.RecordCreated is waar als de record niet bestond, maar wel is gemaakt. Er staat onwaar als de record wel al bestond en is bijgewerkt.Target is een EntityReference naar de record die bleek te bestaan of naar de record die is gemaakt.

Het volgende stukje code laat zien hoe UpsertRequest wordt gebruikt.

Zie de volgende sectie voor het verkrijgen van inzicht in hoe UpsertRequest werkt.

Inzicht in het Upsert-proces

De volgende stappen beschrijvn de verwerkingslogica bij het ontvangen van een UpsertRequest:

  1. Verzend UpsertRequest met voldoende gegevens voor een aanmaak- of invoegbewerking.

  2. Microsoft Dynamics 365 zoekt de record op waarop de doelentiteit zich richt.

  3. Als de record bestaat:

    1. Stel de id-eigenschap van de doelentiteit in met de id van de gevonden record.

    2. Roep Bijwerken aan.

    3. Stel de RecordCreated in op false.

    4. Maak een EntityReference van de doelentiteit van de update als waarde voor Target.

    5. Retourneer de UpsertResponse.

  4. Als de record niet bestaat:

    1. Kopieer alternatieve sleutelwaarden naar de kenmerken van de doelentiteit.

    2. Roep Create aan.

    3. Stel de RecordCreated in op true.

    4. Maak een EntityReference van het doelentiteittype en het id-resultaat van de Create-aanvraag als waarde voor Target.

    5. Retourneer de UpsertResponse.

De volgende afbeelding toont het proces dat optreedt als een UpsertRequest wordt ontvangen.

upsert-processtroom

Voorbeeldcode

Het voorbeeldbestand ProductUpsertSample.cs voor Een record invoegen of bijwerken via Upsert bevat de volgende methode ProcessUpsert voor het toepassen van het UpsertRequest-bericht op de inhoud van een XML-bestand voor het maken van nieuwe records of het bijwerken van bestaande records.


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();
    }

}

Zie ook

Tracering gebruiken om gegevens te synchroniseren met externe systemen
Alternatieve sleutels voor een entiteit definiëren
Een alternatieve sleutel gebruiken voor het maken van een record

© 2017 Microsoft. Alle rechten voorbehouden. Auteursrecht