Como posso fazer com que o CRMSvcUtil.exe gere conjuntos de opções de ligação antecipada, sem duplicação e sem erro
Eu uso a implementação de Erik Pool deICodeWriterFilterService
e Manny GrewalGenerateOption
funciona como um modelo para filtrar entidades indesejadas no arquivo queCRMSvcUtil
gera. Enquanto Erik recomenda retornartrue
para oGenerateOptionSet
método para gerarenums
para conjuntos de opções, duplicar qualquer conjunto de opções global usado por uma entidade específica (conforme mencionado emum dos comentários nessa postagem).
Para resolver isso, verifico se o conjunto de opções já foi gerado e, em caso afirmativo, retorno a opção padrão (presumivelmentefalse
para a maioria dos casos), como mostrado abaix
//list of generated option sets, instantiated in the constructor
private List<string> GeneratedOptionSets;
public bool GenerateOptionSet
(OptionSetMetadataBase optionSetMetadata, IServiceProvider services)
{
if (!GeneratedOptionSets.Contains(optionSetMetadata.Name))
{
GeneratedOptionSets.Add(optionSetMetadata.Name);
return true;
}
return _defaultService.GenerateOptionSet(optionSetMetadata, services);
}
Mas ao incorporar o arquivo gerado nos meus projetos de CRM, o erro de compilação
Cannot convert type 'Microsoft.Xrm.Sdk.OptionSetValue' to 'int'
é sempre gerado por todas as linhas de código que se parecem com
this.SetAttributeValue
("address1_shippingmethodcode", new Microsoft.Xrm.Sdk.OptionSetValue(((int)(value))));
.
Como solução alternativa, uso um projeto separado onde filtre as entidades necessárias, executeCRMSvcUtil
com os argumentos que Erik sugere, substitua a parte problemática do código(int)(value)
(Ondevalue
é umOptionSetValue
) comvalue.Value
depois que o arquivo for gerado, salve-o novamente e todos os problemas desaparece
Minha pergunta é a seguinte: preciso fazer algo diferente para corrigir esse erro de compilação com o padrãoCRMSvcUtil
arquivo gerado sem fazer algo tão hackish como alterar o arquivo gerad