Drnamics CRM - Надстройка - Проверка наличия объекта
-
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.");
}