We are trying to use early bound types in a CRM2011 plugin. To enable this it appears we need to either add a ProxyTypesBeavior()
, or call EnableProxyTypes()
. However, both of these properties apply to an OrganizationServiceProxy
class, and do not exist on the IOrganizationService
interface.
So if we are using the following code to get the organization service, how are we meant to obtain a proxy class to set the above properties on?
var serviceFactory = (IOrganizationServiceFactory)serviceProvider.GetService(typeof(IOrganizationServiceFactory));
var service = serviceFactory.CreateOrganizationService(context.UserId);
For those of you using CRM Online, the reflection solution won't work since you're stuck in sandbox mode.
The following solution using the IProxyTypesAssemblyProvider interface (suggested by Pavel Korsukov) worked for me (source).
var factory = (IOrganizationServiceFactory)serviceProvider.GetService(typeof(IOrganizationServiceFactory));
var proxyTypesProvider = factory as IProxyTypesAssemblyProvider;
if (proxyTypesProvider != null)
{
proxyTypesProvider.ProxyTypesAssembly = typeof(Xrm.XrmServiceContext).Assembly;
}
// Use the factory to generate the Organization Service.
var service = factory.CreateOrganizationService(context.UserId);
Guil on this thread offered an option to use reflection to bind the code gen proxy types to the service factory. And it worked for me. Won't be able to register it in sandbox, as reflection needs full trust.
factory.GetType().GetProperty("ProxyTypesAssembly").SetValue(factory, typeof(YourCrmContext).Assembly, null);
http://social.microsoft.com/Forums/en-US/crmdevelopment/thread/bc7e93d4-1b36-4e21-9449-f51b67a2e52c/
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With