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

What is the differences between RetrieveRequest and IOrganizationService.Retrieve in CRM?

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

A RetrieveRequestIOrganizationServiceRetrieve 方法做完全相同的事情:检索特定记录。

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

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

但是 RetrieveRequest 添加了一个有趣的功能:它提供了一次性查询与检索到的对象关联的数据的选项。

假设您需要发票数据及其发票产品记录。一种选择是创建一个 QueryExpression 并加入 invoice 实体和 invoicedetail 实体的结果。这将导致一个可能很大的 table.

使用 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,因此也可以一次性检索关联的活动等。