我的問題與此post頗有關係,但我無法將所有零件組裝在一起。我想在插件代碼中使用ServiceContext對象,XrmServiceContext
通過LINQ到取SystemUser
,如下圖所示:ServiceContext(早綁定)檢索在CRM 2011插件中導致InvalidCastException
var serviceFactory = serviceProvider.GetOrganizationServiceFactory();
var service = serviceFactory.CreateOrganizationService(context.UserId);
using (var xrmServiceContext = new XrmServiceContext(service))
{
var user = xrmServiceContext.SystemUserSet
.Where(x => x.SystemUserId.Value == context.UserId)
.First();
}
但我得到以下InvalidCastException
:
無法投類型的對象'Microsoft.Xrm.Sdk.Entity'鍵入'Xrm.SystemUser'。
儘管通過CrmSvcUtil
生成的早期綁定類放置在單獨的程序集(插件程序集除外)中。
這很奇怪,就像我把生成的Early-bound類放在插件程序集裏面一樣正常。
我的一些研究促使我創建單獨的OrganizationServiceProxy
的對象,但我爲什麼要創建一個在我使用serviceFactory.CreateOrganizationService(context.UserId)
因此,如何通過保持生成的代碼的插件集之外解決這個問題,已經創造IOrganizationService
?
通過使用OrganizationServiceProxy,我可以通過將結果分配給Early-Bound類來執行相同的操作。但爲什麼我不能使用它?該插件可以被任何用戶調用,爲了創建「OrganizationServiceProxy」實例,我需要插件用戶憑證。目前我正在使用管理員憑證來啓動併成功執行相同的操作。 –
如果您將早期綁定的類放入單獨的程序集中,並且您的插件找不到該程序集,則會發生異常。這與OrganizationServiceProxy或憑證無關。 –