在dynamics crm web api还没出现前,我们是通过fetchxml来实现的,当然这种方式依旧可行,那既然web api来了我们就拥抱新的方式。
web api中我们通过指定查询的条数来实现分页的效果,很简单设置http的head即prefer,odata.maxpagesize就可以了。
HttpWebRequest req = (HttpWebRequest)HttpWebRequest.Create(weburi);
req.Credentials = new NetworkCredential(username, pwd, domain);
req.Method = "Get";
req.Accept = "application/json";
req.ContentType = "application/json; charset=utf-8";
req.Headers.Set("OData-MaxVersion", "4.0");
req.Headers.Set("OData-Version", "4.0");
req.Headers.Set("Prefer", "odata.include-annotations=
OData.Community.Display.V1.FormattedValue,odata.maxpagesize="+count);
using (HttpWebResponse res = (HttpWebResponse)req.GetResponse())
{
StreamReader read = new StreamReader(res.GetResponseStream());
result = read.ReadToEnd();
}
来看下查询的效果,这里的demo用的是客户实体,总的记录数是7条,这里我每次查询2条
第一次的web请求时weburl是标准格式例如"http://xx/api/data/v8.0/accounts?$select=name,telephone1&$orderby=name asc",再取下一页的数据时(也就是第二次以后的web请求),weburi就是下图中这个@odata.nextLink的值了,仔细看下图中返回json中的叫做@odata.nextLink的属性名,这个值本身已进行过urlencode所以不需要再次urlencode,取值到最后一次返回的json没有@odata.nextLink这个属性时表示已是最后一页。
上面我们只提到了下一页,那我要返回上一页怎么办,这就需要你自己想办法了,要么缓存住返回的结果要么缓存住@odata.nextLink的值,以备返回上一页显示准确的数据。