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

时间:2015-10-25 08:15:06

标签: c# dynamics-crm-2011 workflow

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

2 个答案:

答案 0 :(得分:1)

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

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

想象一下,您需要发票数据及其发票产品记录。一种选择是创建QueryExpression并加入发票实体和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;
}

Entity返回的GetFullInvoice对象的RelatedEntities属性包含与发票相关的实体集合。

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

答案 1 :(得分:0)

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

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