Utilizzare Upsert per inserire o aggiornare un record

 

Data di pubblicazione: gennaio 2017

Si applica a: Dynamics 365 (online), Dynamics 365 (on-premises), Dynamics CRM 2016, Dynamics CRM Online

Puoi ridurre la complessità degli scenari di integrazione di dati utilizzando il messaggio UpsertRequest. Quando si caricano i dati in Microsoft Dynamics 365 da un sistema esterno, ad esempio in uno scenario di integrazione di dati in blocco, potresti non sapere se un record esiste già in Dynamics 365. In questi casi non sai se chiamare un'operazione UpdateRequest o CreateRequest. Ciò determina l'esecuzione di una query per il primo record per verificarne l'esistenza, prima di eseguire l'operazione appropriata. Ora puoi ridurre la complessità e caricare i dati in Dynamics 365 con maggiore efficienza utilizzando il nuovo messaggio UpsertRequest (Aggiorna o Inserisci).

In questo argomento

Utilizzo di Upsert

informazioni sul processo di Upsert

Codice di esempio

Utilizzo di Upsert

È preferibile utilizzare UpsertRequest solo quando non sei sicuro se il record esiste, ovvero quando non sei sicuri se devi chiamare un'operazione CreateRequest o UpdateRequest. Si verifica una diminuzione delle prestazioni con UpsertRequest rispetto a CreateRequest. Se sei sicuro che il record non esiste, utilizza CreateRequest.

UpsertRequest include una proprietà denominata Target. Questa proprietà contiene la definizione dell'entità che verrà utilizzata in un'operazione UpdateRequest o CreateRequest. Include inoltre tutti gli attributi richiesti da CreateRequest per il tipo di entità di destinazione in modo da poter creare il record se non esiste.

Puoi controllare RecordCreated per determinare se un record è stato creato.RecordCreated è true se il record non esisteva ed è stato creato. È false se il record esisteva e viene aggiornato.Target è un EntityReference al record che è stato trovato o al record che è stato creato.

Per comprendere come funziona UpsertRequest, vedi la sezione seguente.

informazioni sul processo di Upsert

Nella procedura seguente viene descritta la logica di elaborazione quando viene ricevuto UpsertRequest:

  1. Invia UpsertRequest con i dati per un'operazione di creazione o inserimento.

  2. Microsoft Dynamics 365 cerca il record indirizzato dall'entità di destinazione.

  3. Se il record esiste:

    1. Imposta la proprietà ID dell'entità di destinazione con l'ID del record trovato.

    2. Chiama l'aggiornamento.

    3. Imposta RecordCreated su false.

    4. Crea EntityReference dall'entità di destinazione dell'aggiornamento come valore per Target.

    5. Restituisce UpsertResponse.

  4. Se il record non esiste:

    1. Copia un valore di chiave alternativa negli attributi dell'entità di destinazione.

    2. Chiama Create.

    3. Imposta RecordCreated su true.

    4. Crea EntityReference dal tipo di entità di destinazione e l'ID restituito dalla richiesta Create come valore per Target.

    5. Restituisce UpsertResponse.

Nella figura seguente viene illustrato il processo che spiega quando UpsertRequest viene ricevuto.

upsert process flow

Codice di esempio

Il file ProductUpsertSample.cs dell'esempio Inserire o aggiornare un record tramite Upsert contiene il seguente metodo ProcessUpsert per applicare il messaggio UpsertRequest nel contenuto di un file XML per creare nuovi record o aggiornare quelli esistenti.


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

}

Vedere anche

Utilizzare il rilevamento delle modifiche per sincronizzare i dati con sistemi esterni
Definire le chiavi alternative per un'entità
Utilizzare una chiave alternativa per creare un record

Microsoft Dynamics 365

© 2017 Microsoft. Tutti i diritti sono riservati. Copyright