В настоящее время мы используем MS Dynamics CRM V4 и находимся в процессе обновления до версии 2015. Мне нужно обновить некоторые из наших плагинов.
Одна из вещей, с которыми я столкнулся, немного сбивает с толку: нужно ли мне все еще делать какую-то проверку на этапе конвейера, чтобы определить, является ли он родителем или дочерним элементом. Насколько я понимаю, родительский и дочерний конвейеры были объединены в 1 с 2011 года, так как же следует изменить следующий код?
public CrmServiceProxy(IPluginExecutionContext context, Guid userId)
{
if (context.InvocationSource == MessageInvocationSource.Parent)
{
iCrmService = context.CreateCrmService(userId);
}
else
{
try
{
RegistryKey regkey = Registry.LocalMachine.OpenSubKey("SOFTWARE\\Microsoft\\MSCRM");
string crmUrl = regkey.GetValue("ServerUrl").ToString();
string crmServiceUrl = string.Concat(crmUrl, "/2007/crmservice.asmx");
crmService = CreateCrmService(crmServiceUrl, context, userId);
}
catch (Exception)
{
throw new InvalidPluginExecutionException("Unable to create CrmServiceProxy - the service URL cannot be read from the Registry");
}
}
}
Я начал так:
private readonly IOrganizationService iCrmService;
private IOrganizationServiceFactory serviceFactory;
public CrmServiceProxy(IServiceProvider serviceProvider, Guid userId)
{
IPluginExecutionContext context = (IPluginExecutionContext)serviceProvider.GetService(typeof(IPluginExecutionContext));
serviceFactory = (IOrganizationServiceFactory)serviceProvider.GetService(typeof(IOrganizationServiceFactory));
if (context.Stage == 10) //10 should indicate it's the parent
{
iCrmService = serviceFactory.CreateOrganizationService(context.UserId);
}
else
{
try
{
RegistryKey regkey = Registry.LocalMachine.OpenSubKey("SOFTWARE\\Microsoft\\MSCRM");
string crmUrl = regkey.GetValue("ServerUrl").ToString();
string crmServiceUrl = string.Concat(crmUrl, "/2007/crmservice.asmx");
iCrmService = serviceFactory.CreateOrganizationService(crmServiceUrl, context, userId); //doesn't work, just something I was trying
}
catch (Exception)
{
throw new InvalidPluginExecutionException("Unable to create CrmServiceProxy - the service URL cannot be read from the Registry");
}
}
}
Итак, я понимаю, что ранее в V4 вам нужно было использовать CrmService для дочерних конвейеров и ICrmService для родительских, поэтому оператор if определял, из какого конвейера он пришел. Однако мне все еще нужно выполнять такую проверку или я могу просто отказаться от всего оператора if и просто создать службу с помощью ICrmService?