Drnamics CRM - Надстройка - Проверка наличия объекта

StackOverflow https://stackoverflow.com/questions/1420914

  •  07-07-2019
  •  | 
  •  

Вопрос

Я работаю над проектом, начатым кем-то другим, и пытаюсь исправить несколько ошибок.Существует пользовательский объект, который содержит список объектов для обработки.Однако, если пользовательский объект удален, а список не обновляется, возникает ошибка.

Я хотел бы добавить проверку, которая гарантирует, что каждый обрабатываемый объект проверяется, чтобы убедиться, что он существует в первую очередь.

Возможно ли это в CRM, если да, то каков наилучший способ.Обратите внимание, что это было написано на C # 2008.

[редактировать] Примечание:У меня есть только имя объекта для использования.[окончательная правка] Спасибо

Это было полезно?

Решение

Используйте Сервис метаданных CRM (пример кода метаданных из MSDN для CRM 4).Вы можете получить список всех объектов (RetrieveAllEntitiesRequest) и затем каждый раз проверяйте через цикл, есть ли объект в этом списке.

Другие советы

Для более новых версий CRM вы можете использовать Выражение MetadataFilterExpression ( Метаданные фильтра ) запрашивать только ту сущность, которая вас интересует:

var entityName = "WHATEVER";

var entityFilter = new MetadataFilterExpression(LogicalOperator.And);
entityFilter.Conditions.Add(new MetadataConditionExpression("LogicalName", MetadataConditionOperator.Equals, entityName));

// we don't need all of the metadata, so we can just ask for a couple of basic things
var mpe = new MetadataPropertiesExpression()
{
    AllProperties = false,
    PropertyNames = {"DisplayName", "ObjectTypeCode", "PrimaryIdAttribute", "PrimaryNameAttribute"}
};

var entityQueryExpression = new EntityQueryExpression()
{
    Criteria = entityFilter,
    Properties = mpe
};

var retrieveMetadataChangesRequest = new RetrieveMetadataChangesRequest()
{
    Query = entityQueryExpression
};

var metadataResponse = (RetrieveMetadataChangesResponse)orgService.Execute(retrieveMetadataChangesRequest);

if (metadataResponse.EntityMetadata.Count == 0)
{
    // does not exist
    Console.WriteLine(entityName + " was not found.");
}
else if (metadataResponse.EntityMetadata.Count == 1)
{
    // found entity
    Console.WriteLine(entityName + " was found.");
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top