Я вижу несоответствие тому, как 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?