CRM中的RetrieveRequest和IOrganizationService.Retrieve之间有什么区别?
我是C#的CRM工作流程开发新手。 我需要知道在IOrganizationService
RetrieveRequest
和Retrieve
之间的主要区别是什么。 何时必须使用哪一个? 是否有任何示例来说明如何使用此对象以表演者的方式运行?
在大多数情况下, 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
添加多个查询,因此也可以一次性检索关联的活动等。
RetrieveRequest
和IOrganizationService
的Retrieve
方法完全相同:检索特定记录。
最终可以对RetrieveRequest
进行批处理(使用ExecuteMultipleRequest
消息),但我个人从未看到批处理的RetrieveRequest
,因为通常UpdateRequest
或DeleteRequest
是为了提高性能而批量处理的。