在自定义代码中重用实体搜索定义

 

发布日期: 2016年11月

适用于: Dynamics 365 (online),Dynamics 365 (on-premises),Dynamics CRM 2013,Dynamics CRM 2015,Dynamics CRM 2016

Unified Service Desk 中的实体搜索是面向开发人员的一项服务,利用该服务,开发人员可以用编程方式在其自定义代码中使用现有实体搜索定义来搜索 Microsoft Dynamics 365 数据。Unified Service Desk 中的实体搜索使用 FetchXML 查询 Dynamics 365 Web 服务来返回数据。 有关定义实体搜索的详细信息,请参阅 使用 Unified Service Desk 中的实体搜索搜索数据

在设置实体搜索时,可以选择是返回整个搜索结果集,还是使用分页 Cookie 将大型数据集的 FetchXML 结果分页以获得更快的性能。 有关在 FetchXML 中使用分页 Cookie 的详细信息,请参阅使用 FetchXML 对大型结果集进行分页

因为您在代码中使用实体搜索名称来返回数据而不是它的 FetchXML 定义,所以更新 Unified Service Desk 中实体搜索的基础 FetchXML 查询定义而不更改实体搜索名称可以确保您不必更新您的自定义控件代码,以及在客户端计算机上重新编译和重新分发它。

使用新的 EntitySearchRequest 消息构造一个请求,然后将该请求作为参数传递给 EntitySearchService.GetEntitySearchResults 方法以获得响应 (EntitySearchResponse)。

本主题内容

创建 EntitySearchRequest 对象

执行请求对象

创建 EntitySearchRequest 对象

EntitySearchRequest 消息被重载,您必须根据返回记录的方式,使用以下三种构造函数中的任何一种来创建一个请求对象。 不支持使用这三种构造函数以外的构造函数创建请求对象。 在该请求对象中使用某个实体搜索名称之前,请确保该实体搜索在您的 Dynamics 365 实例的 Unified Service Desk 中已经定义。

  • 使用该实体搜索名称创建一个请求对象。 使用该构造函数返回作为实体搜索结果的所有记录。

    EntitySearchRequest mySearchRequest = new EntitySearchRequest(string entitySearchName);
    
  • 使用该实体搜索名称和要返回的最大记录数创建一个请求对象。 使用该构造函数限制作为实体搜索结果返回的记录数。

    EntitySearchRequest mySearchRequest = new EntitySearchRequest(string entitySearchName, int maxCount);
    

    提示

    指定 maxCount 参数为 0 将返回所有记录。

  • 使用该实体搜索名称、页面计数、页码和分页 Cookie 创建一个请求对象。 使用此构造函数分页返回大型数据集以获得更快的性能。

    pageCount 参数定义每页返回的记录数。pageNumber 参数定义返回数据的结果集的页码。 例如,假如您的查询返回 500 个记录,则可以指定 pageCount50 以在一页中返回 50 个记录,这意味着您将有 10 页数据(50 个记录 * 10 页 = 500)。 现在,如果要返回第 100-150 个记录,请将 pageNumber 值指定为 3。 必须将 pageCookie 指定为 empty,才能检索结果集的第一页。

    EntitySearchRequest mySearchRequest = new EntitySearchRequest(string entitySearchName, int pageCount, int pageNumber, string pageCookie);
    

备注

在使用此构造函数执行请求对象以检索分页结果时,响应对象的 EntitySearchResponse.HasMoreRecords 属性指示是否有多个记录(值=1)。 此外,EntitySearchResponse.PageCookie 属性值设置为从当前结果返回的分页 Cookie。

执行请求对象

使用 EntitySearchService. GetEntitySearchResults 方法执行如上一节中所述创建的请求对象。 该方法执行 EntitySearchRequest 对象,返回 EntitySearchResponse 对象及实体搜索结果。

以下代码示例演示如何重用现有实体搜索来检索分页结果。

// Define parameters for the entity search request object.
string entitySearchName = "Sample Entity Search"; // Name of the entity search record defined in Unified Service Desk
int pageCount = 10; // Retrieve 10 records per page.
int pageNumber = 0;
string pageCookie = String.Empty; // Retrieve the first page of the result set.

var entityService = AifServiceContainer.Instance.GetService<IEntitySearchService>();

// Create a request object.
EntitySearchRequest entitySearchRequest = new EntitySearchRequest(searchName, pageCount, pageNumber, pageCookie);

bool hasMoreRecords = true;

while (hasMoreRecords)
{
   entityService.GetEntitySearchResults(entitySearchRequest, (entitySearchResponse) =>
   {
      foreach (Entity e in entitySearchResponse.Entities)
      {
         Console.WriteLine("Entity with id:\"{0}\" retrieved", e.Id);
      }
      if (entitySearchResponse.HasMoreRecords)
      {
         pageNumber++;
         pageCookie = entitySearchResponse.PageCookie;
         entitySearchRequest = new EntitySearchRequest(searchName, pageCount, pageNumber, pageCookie);
      }
      else
      {
         hasMoreRecords = false;
      }
   });
}

另请参阅

使用 Unified Service Desk 中的实体搜索搜索数据
DoSearch

Unified Service Desk 2.0

© 2017 Microsoft。 保留所有权利。 版权