CRM中的RetrieveRequest和IOrganizationService.Retrieve之间有什么区别?

我是C#的CRM工作流程开发新手。 我需要知道在IOrganizationService RetrieveRequestRetrieve之间的主要区别是什么。 何时必须使用哪一个? 是否有任何示例来说明如何使用此对象以表演者的方式运行?

在大多数情况下, Retrieve方法就足够了。

然而, RetrieveRequest添加了一个有趣的function:它提供了一次查询与检索到的对象相关联的数据的选项。

想象一下,您需要发票数据及其发票产品记录。 一种选择是创建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属性,该属性包含与发票相关的实体集合。

可以向RetrieveRequest添加多个查询,因此也可以一次性检索关联的活动等。

RetrieveRequestIOrganizationServiceRetrieve方法完全相同:检索特定记录。

最终可以对RetrieveRequest进行批处理(使用ExecuteMultipleRequest消息),但我个人从未看到批处理的RetrieveRequest ,因为通常UpdateRequestDeleteRequest是为了提高性能而批量处理的。