我需要在CRM插件中使用fetch xml,我在这里找到了一个如何做到这一点的例子:
string groupby1 = @"
<fetch distinct='false' mapping='logical' aggregate='true'>
<entity name='opportunity'>
<attribute name='name' alias='opportunity_count' aggregate='countcolumn' />
<attribute name='ownerid' alias='ownerid' groupby='true' />
<attribute name='createdon' alias='createdon' />
<attribute name='customerid' alias='customerid' />
</entity>
</fetch>";
EntityCollection groupby1_result = orgProxy.RetrieveMultiple(new FetchExpression(groupby1));
但还有其他我不知道如何使用的东西,或者它在哪里使用..它的部分内容如下:
orgProxy.RetrieveMultiple(new FetchExpression(groupby1));
我知道它是 OrganizationServiceProxy 的一个对象,但它在插件类中的位置是什么?我找不到。
答案 0 :(得分:6)
尽可能以最礼貌的方式,您可能需要向后退几步才能前进。
所以要编写一个插件,你需要实现IPlugin
,它只有一个方法
public void Execute(IServiceProvider serviceProvider)
IServiceProvider
是您进入CRM的窗口以及您正在加入的事件的上下文。
通常,您会执行以下操作:
var context = (IPluginExecutionContext) serviceProvider.GetService(typeof (IPluginExecutionContext));
var factory = (IOrganizationServiceFactory) serviceProvider.GetService(typeof (IOrganizationServiceFactory));
var service = factory.CreateOrganizationService(context.UserId);
在上面的示例中,service
的类型为IOrganizationService
。这为您提供了您期望的所有方法
service.Execute(foo);
service.RetrieveMultiple(bar);
service.Update(... /* etc
可能值得回顾一下这方面的一些指南 - 正如我之前的回答here