Condividi tramite


Utilizzare Upsert per inserire o aggiornare un record

 

Data di pubblicazione: novembre 2016

Si applica a: Dynamics CRM 2015

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).

Avviso

Per le organizzazioni di Microsoft Dynamics CRM Online, questa funzionalità è disponibile solo se nell'organizzazione è stato eseguito l'Aggiornamento 1 di Dynamics CRM Online 2015. Questa funzionalità non è disponibile per Dynamics CRM (locale).

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.

I seguenti frammenti di codice mostrano come si utilizza UpsertRequest.

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.

Eseguire l'upsert del processo aziendale

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

© 2017 Microsoft. Tutti i diritti sono riservati. Copyright