Use Upsert para insertar o actualizar un registro

 

Publicado: enero de 2017

Se aplica a: Dynamics 365 (online), Dynamics 365 (on-premises), Dynamics CRM 2016, Dynamics CRM Online

Puede reducir la complejidad que caracteriza a los escenarios de integración de datos mediante el mensaje UpsertRequest. Al cargar datos en Microsoft Dynamics 365 desde un sistema externo, por ejemplo en un escenario de integración de datos en masa, quizá no sepa si ya existe un registro en Dynamics 365. En tales casos no sabrá si debe llamar a una operación UpdateRequest o CreateRequest. Esto da lugar a que consulte el registro primero para determinar si existe antes de realizar la operación adecuada. Ahora puede reducir esta complejidad y cargar los datos en Dynamics 365 más eficazmente utilizando el nuevo mensaje UpsertRequest (Actualizar o Insertar).

En este tema

Mediante Upsert

Descripción del proceso de Upsert

Código de ejemplo

Mediante Upsert

Es mejor usar UpsertRequest solo si no está seguro de si existe el registro. Es decir, cuando no está seguro si debe llamar a una operación CreateRequest o UpdateRequest. Hay una disminución del rendimiento con UpsertRequest en lugar de usar CreateRequest. Si está seguro de que el registro no existe, use CreateRequest.

La UpsertRequest incluye una propiedad llamada Target. Esta propiedad contiene la definición de entidad que se usará en una operación UpdateRequest o CreateRequest. También incluye todos los atributos requeridos por la CreateRequest para el tipo de entidad de destino para poder crear el registro si no existe.

Puede inspeccionar RecordCreated para determinar si se creó el registro.RecordCreated será true si el registro no existió y se creó. Será false si el registro ya existía y se actualizó.Target será una EntityReference al registro que existía o el registro que se creó.

Para comprender cómo funciona UpsertRequest, vea la siguiente sección.

Descripción del proceso de Upsert

Los siguientes pasos describen la lógica de procesamiento cuando se recibe una UpsertRequest:

  1. Envíe UpsertRequest con suficientes datos para crear una operación de creación o inserción.

  2. Microsoft Dynamics 365 consultará el registro objetivo de la entidad de destino.

  3. Si existe el registro:

    1. Establezca la propiedad Id. de la entidad de destino con el identificador del registro encontrado.

    2. Llame a Actualizar.

    3. Establezca la RecordCreated como false.

    4. Cree un EntityReference de la entidad de destino de la actualización como valor para Target.

    5. Devuelva la UpsertResponse.

  4. Si el registro no existe:

    1. Copie los valores de clave alternativa en los atributos de entidad de destino.

    2. Llame a Create.

    3. Establezca la RecordCreated como true.

    4. Cree una EntityReference desde el tipo de entidad de destino y el resultado de Id. de la solicitud Create como valor para Target.

    5. Devuelva la UpsertResponse.

El siguiente ejemplo muestra el proceso que revela cuándo se recibe una UpsertRequest.

upsert process flow

Código de ejemplo

La operación de Insertar o Actualizar un registro utilizando Upsert El archivo ProductUpsertSample.cs de ejemplo contiene el siguiente método ProcessUpsert para aplicar el mensaje de UpsertRequest sobre el contenido de un archivo XML para crear nuevos registros o actualizar los existentes.


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

}

Ver también

Uso del seguimiento de cambios para sincronizar los datos con sistemas externos
Defina claves alternativas para una entidad
Usar una clave alternativa para crear un registro

Microsoft Dynamics 365

© 2017 Microsoft. Todos los derechos reservados. Copyright