я использую реализацию Erik Pool ICodeWriterFilterService
и функцию Мэнни Грюала GenerateOption
в качестве модели для фильтрации нежелательных сущностей в файле, который CRMSvcUtil
] генерирует.Хотя Эрик рекомендует возвращать true
для метода GenerateOptionSet
для генерации перечислений
для наборов параметров, это дублирует любые глобальные наборы параметров, которые используются какой-либо конкретной сущностью. (как упоминалось в одном из комментариев к этому сообщению).
Чтобы решить эту проблему, я проверяю, был ли уже сгенерирован набор параметров, и если да, я возвращаю параметр по умолчанию (предположительно false
для большинства случаев), как показано ниже.
//list of generated option sets, instantiated in the constructor
private List GeneratedOptionSets;
public bool GenerateOptionSet
(OptionSetMetadataBase optionSetMetadata, IServiceProvider services)
{
if (!GeneratedOptionSets.Contains(optionSetMetadata.Name))
{
GeneratedOptionSets.Add(optionSetMetadata.Name);
return true;
}
return _defaultService.GenerateOptionSet(optionSetMetadata, services);
}
Но при включении сгенерированного файла в мои проекты CRM возникла ошибка компиляции
Невозможно преобразовать тип «Microsoft.Xrm.Sdk.OptionSetValue» в «int»
всегда вызывается каждой строкой кода, который выглядит как
this.SetAttributeValue
("address1_shippingmethodcode", new Microsoft.Xrm.Sdk.OptionSetValue(((int)(value))));
.
В качестве обходного пути я использую отдельный проект, в котором я фильтрую нужные мне сущности, запускаю CRMSvcUtil
с аргументами, которые предлагает Эрик, заменяю проблемную часть кода (int) (value)
(где значение
- это OptionSetValue
) со значением . Значение
после создания файла, а затем повторно сохраните файл, и все проблемы исчезнут.
У меня такой вопрос: нужно ли мне сделать что-то по-другому, чтобы исправить эту ошибку компиляции с помощью файла, сгенерированного по умолчанию CRMSvcUtil
, без выполнения таких хакерских действий, как изменение этого сгенерированного файла?