Compartir a través de


Ejecutar detección de duplicados

Hay varios métodos para realizar la detección de duplicados una vez activada la lista y publicadas las reglas de detección de duplicados.

Recuperar y detectar duplicados para un registro concreto

Detectar y recuperar duplicados:

  • Antes de crear una entidad
  • Para una entidad existente
  • Para otras entidades que se corresponden con reglas de duplicados entre entidades. Por ejemplo, cualquier entidad de cliente potencial que coincida con una entidad de contacto.

Opciones:

Ejemplo: detectar duplicados de un registro concreto con la API web

El ejemplo siguiente muestra cómo detectar duplicados de un registro concreto mediante la función RetrieveDuplicates.

Solicitud

GET [Organization URI]/api/data/v9.1/RetrieveDuplicates(BusinessEntity=@p1,MatchingEntityName=@p2,PagingInfo=@p3)?@p1={'@odata.type':'Microsoft.Dynamics.CRM.account','accountid':'0d1156d2-1598-e711-80e8-00155db64062'}&@p2='account'&@p3={'PageNumber':1,'Count':50} HTTP/1.1
If-None-Match: null
OData-Version: 4.0
OData-MaxVersion: 4.0
Content-Type: application/json
Accept: application/json

Respuesta

HTTP/1.1 200 OK  
Content-Type: application/json; odata.metadata=minimal  
OData-Version: 4.0

{
    "@odata.context": "[Organization URI]/api/data/v9.1/$metadata#accounts",
    "value": [
        <Omitted for brevity: JSON data for any matching accounts including all properties>
    ]
}

Detectar duplicados para un tipo de entidad

Enviar un trabajo de detección de duplicados asincrónico que se ejecuta en segundo plano. Los duplicados se detectan mediante las reglas de duplicados publicadas para el tipo de entidad. Los duplicados detectados se almacenan como registros DuplicateRecord en Dynamics 365 Customer Engagement (on-premises).

El trabajo de detección de duplicados devuelve un máximo de 5000 duplicados.

Opciones

Ejemplo: detectar duplicados de un tipo de entidad mediante la API web

El ejemplo siguiente muestra cómo detectar duplicados para un tipo de entidad creando un trabajo asincrónico con la acción BulkDetectDuplicates.

Solicitud

POST [Organization URI]/api/data/v9.1/BulkDetectDuplicates HTTP/1.1
If-None-Match: null
OData-Version: 4.0
Content-Type: application/json
Accept: application/json
OData-MaxVersion: 4.0

{
    "Query": {
        "@odata.type": "#Microsoft.Dynamics.CRM.QueryExpression",
        "EntityName": "lead"
    },
    "JobName": "jobname1",
    "SendEmailNotification": false,
    "TemplateId": "07B94C1D-C85F-492F-B120-F0A743C540E6",
    "ToRecipients": [],
    "CCRecipients": [],
    "RecurrencePattern": "",
    "RecurrenceStartTime": "2015-07-15T05:30:00Z"
}  

Respuesta

HTTP/1.1 200 OK  
Content-Type: application/json; odata.metadata=minimal  
OData-Version: 4.0

{
    "@odata.context": "[Organization URI]/api/data/v9.1/$metadata#Microsoft.Dynamics.CRM.BulkDetectDuplicatesResponse",
    "JobId": "efaff068-7598-e711-80e8-00155db64062"
}

La solicitud anterior crea un trabajo de detección de duplicados asincrónico cuyo ID de trabajo se devuelve en la respuesta. Puede usar el ID de trabajo devuelto de la solicitud anterior para obtener registros duplicados en un tipo de entidad, tal como se muestra en el ejemplo siguiente.

Solicitar

GET [Organization URI]/api/data/v9.1/asyncoperations(efaff068-7598-e711-80e8-00155db64062)/AsyncOperation_DuplicateBaseRecord
If-None-Match: null
OData-Version: 4.0
OData-MaxVersion: 4.0
Content-Type: application/json
Accept: application/json

A continuación, se muestra el equivalente FetchXML de la solicitud anterior.

<fetch>
    <entity name="duplicaterecord">
        <attribute name="owninguser" />
        <attribute name="ownerid" />
        <attribute name="baserecordid" />
        <attribute name="duplicateid" />
        <attribute name="owningbusinessunit" />
        <attribute name="createdon" />
        <attribute name="asyncoperationid" />
        <filter>
            <condition attribute="asyncoperationid" operator="eq" value="efaff068-7598-e711-80e8-00155db64062" />
        </filter>
    </entity>
</fetch>

Respuesta

HTTP/1.1 200 OK  
Content-Type: application/json; odata.metadata=minimal  
OData-Version: 4.0

{  
   "@odata.context":"[Organization URI]/api/data/v9.1/$metadata#duplicaterecords",
   "value":[  
      {  
         "owninguser":"b3ac4144-6d9a-e711-811c-000d3a75ce72",
         "_ownerid_value":"b3ac4144-6d9a-e711-811c-000d3a75ce72",
         "_baserecordid_value":"3a6fc65b-3f9c-e711-811c-000d3a75ce72",
         "duplicateid":"489a879c-019b-4c28-8539-51ebc850d18f",
         "createdon":"2017-09-19T03:34:25Z",
         "owningbusinessunit":"20a44144-6d9a-e711-811c-000d3a75ce72",
         "_asyncoperationid_value":"efaff068-7598-e711-80e8-00155db64062",
         "_duplicateruleid_value":null,
         "_duplicaterecordid_value":null
      },
      {  
         "owninguser":"b3ac4144-6d9a-e711-811c-000d3a75ce72",
         "_ownerid_value":"b3ac4144-6d9a-e711-811c-000d3a75ce72",
         "_baserecordid_value":"406fc65b-3f9c-e711-811c-000d3a75ce72",
         "duplicateid":"0a4a7dea-1488-4e05-b5eb-c2925ad2925a",
         "createdon":"2017-09-19T03:34:25Z",
         "owningbusinessunit":"20a44144-6d9a-e711-811c-000d3a75ce72",
         "_asyncoperationid_value":"efaff068-7598-e711-80e8-00155db64062",
         "_duplicateruleid_value":null,
         "_duplicaterecordid_value":null
      }
   ]
}

El GUID del registro base de se almacena como baserecordid en los registros DuplicateRecord. duplicateid en la respuesta anterior es el identificador único del registro duplicado. asyncoperationid es el identificador único del trabajo del sistema que creó ese registro. Y ownerid es el identificador único del usuario o del equipo propietario del registro duplicado. Para obtener más información, consulte Entidad DuplicateRecord.

Nota

Antes de crear y ejecutar trabajos de detección de duplicados, asegúrese de que existen reglas de detección de duplicados adecuadas. Dynamics 365 Customer Engagement incluye reglas de detección de duplicados predeterminadas para cuentas, contactos y clientes potenciales, pero no para otros tipos de registros. Si desea que el sistema detecte duplicados para otros tipos de registro, deberá crear una nueva regla. Para obtener información sobre cómo crear una regla de detección de duplicados, consulte Reglas de detección de duplicados.

Detectar duplicados durante operaciones de creación y actualización

De forma predeterminada, se suprime la detección de duplicados cuando se crean o actualizan registros mediante la API web. Utilice el encabezado MSCRM.SuppressDuplicateDetection y establezca su valor en false al crear o actualizar un registro. La detección de duplicados solo se aplica cuando la organización ha habilitado la detección de duplicados, la entidad está habilitada para la detección de duplicados y se aplican reglas de detección de duplicados activas.

Consulte Administrar la detección de duplicados durante las operaciones de creación y de actualización mediante la API web para obtener más información sobre cómo detectar duplicados durante la operación de creación y actualización.

Ejemplo: detección de duplicados con el servicio de organización

En el siguiente ejemplo se muestra cómo pasar la opción de detección de duplicados como una parte de los mensajes CreateRequest y UpdateRequest:



// Connect to the Organization service. 
// The using statement assures that the service proxy will be properly disposed.
using (_serviceProxy = new OrganizationServiceProxy(serverConfig.OrganizationUri, serverConfig.HomeRealmUri,serverConfig.Credentials, serverConfig.DeviceCredentials))
{
    // This statement is required to enable early-bound type support.
    _serviceProxy.EnableProxyTypes();

    _service = (IOrganizationService)_serviceProxy;

    CreateRequiredRecords();

    // Create and account record with the named Proseware, Inc. and already existing Account Number.
    Account account = new Account 
    {
        Name = "Proseware, Inc.",
        AccountNumber = "ACC005"
    };

    // Create operation by suppressing duplicate detection
    CreateRequest reqCreate = new CreateRequest();
    reqCreate.Target = account;
    reqCreate.Parameters.Add("SuppressDuplicateDetection", true); // Change to false to activate the duplicate detection.
    CreateResponse createResponse = (CreateResponse)_service.Execute(reqCreate);
    _dupAccountId = createResponse.id;
    Console.Write("Account: {0} {1} created with SuppressDuplicateDetection to true, ", 
        account.Name, account.AccountNumber);
    
    // Retrieve the account containing with its few attributes.
    ColumnSet cols = new ColumnSet(
        new String[] { "name", "accountnumber"});

    Account retrievedAccount = (Account)_service.Retrieve("account", _dupAccountId, cols);
    Console.Write("retrieved, ");

    // Update the existing account with new account number.
    retrievedAccount.AccountNumber = "ACC006";                   

    // Update operation – update record, if a duplicate is not found.
    UpdateRequest reqUpdate = new UpdateRequest();
    reqUpdate.Target = retrievedAccount;
    reqUpdate["SuppressDuplicateDetection"] = false; // Duplicate detection is activated.

    // Update the account record.
    UpdateResponse updateResponse = (UpdateResponse)_service.Execute(reqUpdate);
    Console.WriteLine("and updated.");

    DeleteRequiredRecords(promptforDelete);
}

Vea también

Detección de duplicados
Habilitar y deshabilitar la detección de duplicados
Usar mensajes (clases de respuesta y solicitud) con el método Execute
Mensajes de detección de duplicados