Как определить дубликаты записей с помощью плагина в Dynamics CRM 2011 - PullRequest
2 голосов
/ 14 марта 2011

Я хочу разработать некоторую логику внутри моего плагина создания для сущности 'account'.

В основном он проверяет имена учетных записей и идентифицирует имена учетных записей, которые дублируются при создании.

Так что, если есть имя учетной записи, например Barclays, и я пытаюсь создать его снова, я предупреждаю пользователя сообщением об ошибке, что это было создано ранее, и предотвращает добавление этой записи.

public void Execute(IServiceProvider serviceProvider)
{
   var context = (IPluginExecutionContext)serviceProvider.GetService(typeof(Microsoft.Xrm.Sdk.IPluginExecutionContext));

   if (context.InputParameters.Contains("Target") &&
       context.InputParameters["Target"] is Entity)
   {
      // Obtain the target entity from the input parmameters.
      Entity entity = (Entity)context.InputParameters["Target"];

      if (entity.LogicalName == "account")
      {
         bool x = true;

         if (entity.Attributes.Contains("Name") != recordNamesinCRM)
         {                    
         }
         else 
         {
           throw new InvalidPluginExecutionException("You Cannot Have Duplicate Country Codes!.");
         }          
      } 
   }
}

В приведенном выше коде я просто использую "recordNamesinCRM" в качестве примера, но я уверен, что есть встроенная функция или способ сравнения при создании нового имени с остальными в системе или способ подсчета повторяющихся экземпляров .

Ответы [ 2 ]

1 голос
/ 23 августа 2011

Вы можете использовать RetrieveDuplicatesRequest согласно этому примеру здесь:

    /// <summary>
    /// Checks for duplicate Guid
    /// </summary>
    /// <param name="account"></param>
    /// <returns>First duplicate account id, if any duplicates found, and Guid.Empty if not</returns>
    public Guid DuplicateExists(Account account)
    {
        RetrieveDuplicatesRequest request = new RetrieveDuplicatesRequest();
        request.BusinessEntity = account;
        request.MatchingEntityName = Account.EntityLogicalName;
        request.PagingInfo = new PagingInfo();
        request.PagingInfo.PageNumber = 1;
        request.PagingInfo.Count = 1;

        RetrieveDuplicatesResponse response = (RetrieveDuplicatesResponse)ServiceProxy.Execute(request);
        return response.DuplicateCollection.Entities.Count > 0 ? response.DuplicateCollection.Entities[0].Id : Guid.Empty;
    }

См., Например, http://crm -edinburgh.com / 2011/08 / crm-sdk-using-detect-duplicates-in-code / .

0 голосов
/ 03 апреля 2011

Вам известно о встроенном обнаружении дубликатов?

Смотрите следующие ссылки:

, хотя ссылки описывают обнаружение дубликатов Dynamics CRM 4, они все еще действительны для Dynamics CRM 2011

Взгляните на статью Запустите обнаружение дубликатов в пакете Dynamics CRM 2011 SDK.

Вы можете использовать необязательный параметр SuppressDuplicateDetection или RetrieveDuplicatesRequest , хотя это будет работать только для существующих записей.

...