Почему я должен использовать int при поиске сущности с атрибутом OptionSetValue, но использовать объект OptionSetValue при создании сущности? - PullRequest
5 голосов
/ 16 января 2012

Я вижу несоответствие тому, как CRM SDK обрабатывает поиск сущностей по атрибуту OptionSetValue и создание сущности с атрибутом OptionSetValue.

Back Ground:

У меня естьметод с этой подписью

GetOrCreateEntity<T>(IOrganizationService service, params object[] columnNameAndValuePairs)

где columnNameAndValuePairs - это список пар, которые выглядят следующим образом: (имя строки столбца, значение столбца) т.е."имя", "Джон Доу" переходит к entity.name = "Джон Доу".

Его можно использовать так:

var user = GetOrCreateEntity<SystemUser>("username", "jdoe");

, который будет создавать и выполнять выражение запроса для объекта SystemUser с именем пользователя jdoe.Если он не найден, он создаст его, заполнив атрибут имени пользователя «jdoe», а затем создаст объект.

Проблема:

В большинстве случаев это прекрасно работает, если я не ищу / не создаю атрибут OptionSetValue.Итак, скажем что-то вроде этого:

var user = GetOrCreateEntity<SystemUser>("username", "jdoe", "Sex", new OptionSetValue(1));
var user = GetOrCreateEntity<SystemUser>("username", "jdoe", "Sex", 1);

Если я передам OptionSetValue(1), поиск по выражению запроса не удастся, но если я передам 1, выражение запроса выполнится без ошибок, но service.Create(entity) завершится неудачно, потому чтоон ожидает OptionSetValue.

Мне было бы легко проверить значение OptionSetValue и отправить значение int в выражение QueryExpression, но я просто хочу убедиться, что я не делаю что-то не так.Действительно ли Microsoft ожидала, что вы создадите объект, заполняющий атрибут как OptionSetValue, но ищущий его как int?

1 Ответ

2 голосов
/ 17 января 2012

Я не могу говорить за Microsoft, но это звучит / выглядит правильно.Может быть важно отметить, что вы выполняете поиск с помощью FetchXml или QueryExpression, которые имеют схемы, отличные от DynamicEntity (CRM 4) или просто Entity (в CRM 2011), которые используются для создания / обновления.

Даже в CRM4, где в CRM есть орудия для распространенных типов (CrmBoolean, CrmNumber), вы должны были делать запросы по типу CLR, но создавать / обновлять с помощью упаковщиков.Также обратите внимание, что EntityReference имеют тот же сценарий.Вы ищете по Guid, но должны создать / обновить с EntityReference.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...