Del via


Brug Upsert til at indsætte eller opdatere en post

 

Udgivet: januar 2017

Gælder for: Dynamics 365 (online), Dynamics 365 (on-premises), Dynamics CRM 2016, Dynamics CRM Online

Du kan reducere kompleksiteten i forskellige dataintegrationssituationer ved hjælp af meddelelsen UpsertRequest. Under indlæsning af data til Microsoft Dynamics 365 fra et eksternt system, for eksempel under masseintegration af data, ved du måske ikke, om der allerede findes en post i Dynamics 365. I sådanne tilfælde kan du ikke vide, om du skal kalde en UpdateRequest- eller en CreateRequest-handling. Derfor bliver du nødt til at forespørge om posten først for at se, om den findes, før du udfører den relevante handling. Nu kan du reducere kompleksiteten og indlæse dataene i Dynamics 365 mere effektivt ved hjælp af den nye UpsertRequest meddelelse (opdatering eller indsætning).

Dette emne indeholder

Brug af Upsert

Introduktion til Upsert-processen

Eksempelkode

Brug af Upsert

Det er bedst kun at bruge UpsertRequest, når du er usikker på, hvis posten findes. Det vil sige, når du er usikker på, om du skal kalde en CreateRequest- eller en UpdateRequest-handling. Der sker en reducering af ydeevnen, når du bruger UpsertRequest i forhold til CreateRequest. Hvis du er sikker på, at posten ikke findes, skal du bruge CreateRequest.

UpsertRequest indeholder egenskaben Target. Denne egenskab indeholder definitionen af objektet, der skal bruges i en UpdateRequest- eller en CreateRequest-handling. Den indeholder også alle de attributter, der kræves af CreateRequest for destinationsobjekttypen, så posten kan oprettes, hvis den ikke findes.

Du kan kontrollere RecordCreated for at afgøre, om posten blev oprettet.RecordCreated er sand (true), hvis posten ikke fandtes og blev oprettet. Det vil være falsk (false), hvis posten allerede fandtes og blev opdateret.Target er en EntityReference til den post, der fandtes, eller til den post, der blev oprettet.

For at forstå, hvordan UpsertRequest fungerer, skal du se afsnittet nedenfor.

Introduktion til Upsert-processen

Følgende trin beskriver behandlingslogikken, når der modtages en UpsertRequest:

  1. Send UpsertRequest med tilstrækkelige data til en Opret- eller Indsæt-handling.

  2. Microsoft Dynamics 365 søger efter den post, der kræves af destinationsobjektet.

  3. Hvis posten allerede findes:

    1. Indstil egenskaben ID for destinationsobjektet til id'et for den fundne post.

    2. Kald opdatering.

    3. Indstil RecordCreated til false.

    4. Opret en EntityReference fra destinationsobjektet i opdateringen som værdien for Target.

    5. Returner UpsertResponse.

  4. Hvis posten ikke findes:

    1. Kopier en alternativ nøgle-værdi til destinationsobjektets attributter.

    2. Kald Create.

    3. Indstil RecordCreated til true.

    4. Opret en EntityReference fra destinationsobjekttypen og id-resultatet af Create-anmodningen som værdien for Target.

    5. Returner UpsertResponse.

I følgende illustration vises processen, når en UpsertRequest modtages.

upsert process flow

Eksempelkode

Indsætte eller opdatere en post ved hjælp af Upsert-eksemplets ProductUpsertSample.cs-fil indeholder følgende ProcessUpsert-metode, som gør det muligt at anvende UpsertRequest-meddelelsen på indholdet af en XML-fil for at oprette nye poster eller opdatere eksisterende.


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

}

Se også

Brug ændringssporing til at synkronisere data med eksterne systemer
Definer alternative nøgler for et objekt
Brug en alternativ nøgle til at oprette en post

Microsoft Dynamics 365

© 2017 Microsoft. Alle rettigheder forbeholdes. Ophavsret