C# RetrieverRequest和IOrganizationService.Retrieve在CRM中有什么区别?
我是C#的CRM工作流步骤开发新手。我需要知道C# RetrieverRequest和IOrganizationService.Retrieve在CRM中有什么区别?,c#,dynamics-crm-2011,workflow,C#,Dynamics Crm 2011,Workflow,我是C#的CRM工作流步骤开发新手。我需要知道ioorganizationservice中的RetrieveRequest和Retrieve之间的主要区别是什么。 什么时候必须使用哪一个? 是否有任何示例显示如何使用此对象以执行者的方式运行?aRetrieveRequest和IOrganizationService的Retrieve方法执行的操作完全相同:检索特定记录 最终可以批处理RetrieveRequest(使用ExecuteMultipleRequest消息),但就我个人而言,我从未见过
ioorganizationservice
中的RetrieveRequest
和Retrieve
之间的主要区别是什么。
什么时候必须使用哪一个?
是否有任何示例显示如何使用此对象以执行者的方式运行?a
RetrieveRequest
和IOrganizationService
的Retrieve
方法执行的操作完全相同:检索特定记录
最终可以批处理
RetrieveRequest
(使用ExecuteMultipleRequest
消息),但就我个人而言,我从未见过批处理RetrieveRequest
,因为通常情况下,UpdateRequest
或DeleteRequest
是为了提高性能而批处理的方法。在大多数情况下,Retrieve
方法就足够了
然而,RetrieveRequest
增加了一个有趣的特性:它提供了一个选项,可以一次性查询与检索到的对象相关联的数据
假设您需要发票数据及其发票产品记录。一个选项是创建一个QueryExpression
,并将invoice实体和invoicedetail实体的结果连接起来。这将产生一个潜在的大表
使用RetrieveRequest
可以在一个请求中查询与检索到的实体关联的记录
例如:
private readonly IOrganizationService _service;
public Entity GetFullInvoice(Guid invoiceId)
{
var request = new RetrieveRequest
{
ColumnSet = new ColumnSet(allColumns: true),
Target = new EntityReference("invoice", invoiceId),
RelatedEntitiesQuery = new RelationshipQueryCollection()
};
var relation = new Relationship("invoice_details");
relation.PrimaryEntityRole = EntityRole.Referenced;
var invoiceDetailQuery = new QueryExpression("invoicedetail");
invoiceDetailQuery.ColumnSet = new ColumnSet(allColumns: true);
invoiceDetailQuery.Criteria.AddCondition("invoiceid", ConditionOperator.Equal, invoiceId);
var result = (RetrieveResponse)_service.Execute(request);
return result.Entity;
}
由GetFullInvoice
返回的Entity
对象具有一个RelatedEntities
属性,该属性保存与发票相关的实体集合
可以将多个查询添加到
RetrieverRequest
,因此也可以一次性检索相关活动等。感谢您的回答。他们的表现真的一样吗?我的工作流步骤,有多个检索和更新复杂的过滤器表达式。当我在多个实体上运行时,它将进入等待状态!因此,我需要最有效的方法。谢谢你明确的回答。是否进行了任何测试以检查性能?我有一些相关的实体。通过RetreiveMultipleRequest或organizationService检索基本实体和相关实体是否更好。检索基本实体,然后在循环中获取相关实体?我想这取决于您必须查询的数据。将QueryExpression
转换为单个SQL(联接)选择。RetrieveRequest
被转换为对主实体记录的选择,以及对添加到请求中的每个相关实体查询的单独选择。当您希望收到许多相关记录时,单个QueryExpression
可能会产生一个较大的结果集,因为主实体记录的列在每一行中都是重复的。retrievereRequest
可以提供更紧凑的数据集,并节省到应用程序服务器的往返时间。再次感谢。当我在一条记录上运行自定义工作流时,这是正常的,当选择多条记录并再次运行时,我的进程将处于等待状态。我认为这是因为我的代码,必须调整查询或使用多线程概念。当我们在多个记录上运行工作流时,是否有任何方法可以防止覆盖工作流的运行?如何处理具有多个记录的工作流的多个并发运行?基本上,您不能。有一些场景需要设计一个一致的批处理流程。拥有大量并发执行的工作流实例通常会导致问题:系统速度减慢、死锁等。我有一个自定义实体的工作流步骤。在我的代码中,我检索多个实体并更新其他实体。为了能够在CRM中处理多个并发运行,编写代码的最佳实践是什么?是否存在任何例子?(用C语言)。