今天我们来看看Web API的数据查询功能,尽管之前介绍CRUD的文章里面提到过怎么去Read数据,可是并没有详细的去深究那些细节,今天我们就来详细看看吧。事实上呢,Web API的数据查询接口也是基于OData协议的,所以之前的OData Url Query的构造规则没有非常大的变化。比如:$top, $select, $filter, $expand, $order的功能还是在的,只是也加入了一些新东西,比如

$count  -- 返回记录的总数

Paging Mechanism(分页机制)-- 来东西,如今,实现机制不一样了,基于HTTP报头设置页大小

Formatted Value(新东西。没有找到最新的文档) -- 目測和记录的格式化有关,只是没找到详细的Mapping文档

$count

$count非常好理解,返回记录在系统中的总数(和filter条件相关),假设不制定filter条件。则返回全部记录的总数。

Paging Mechanism

须要设置HTTP 报头:odata.maxpagesize=?,和之前的API不一样了

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" style="font-family: FangSong_GB2312;font-size:14px;" alt="" />

 HttpRequestMessage retrieveAccReq = new HttpRequestMessage(HttpMethod.Get, webApiUrl + "/accounts?$select=name&$count=true");

            retrieveAccReq.Headers.Authorization = new AuthenticationHeaderValue("Bearer", accessCode);
retrieveAccReq.Headers.Add("Prefer", "odata.maxpagesize=2");
string nextPageLink = string.Empty;
JObject result = null;
int pageIndex = 1;
HttpResponseMessage retrieveAccResp;
do
{
if (!string.IsNullOrWhiteSpace(nextPageLink))
{ retrieveAccReq = new HttpRequestMessage(HttpMethod.Get, nextPageLink);
retrieveAccReq.Headers.Authorization = new AuthenticationHeaderValue("Bearer", accessCode);
retrieveAccReq.Headers.Add("Prefer", "odata.maxpagesize=2");
} retrieveAccResp = await client.SendAsync(retrieveAccReq);
result = JsonConvert.DeserializeObject<JObject>(await retrieveAccResp.Content.ReadAsStringAsync());
Console.WriteLine("Page-" + pageIndex++);
Console.WriteLine(result.ToString());
if (retrieveAccResp.IsSuccessStatusCode)
{ if (result["@odata.nextLink"] != null && !string.IsNullOrWhiteSpace(result["@odata.nextLink"].Value<string>()))
{
nextPageLink = result["@odata.nextLink"].Value<string>();
}
else
{
nextPageLink = "";
} }
else
{
break;
} } while (!string.IsNullOrEmpty(nextPageLink));

Formatted Value

目測和返回记录的格式化有关,返回的记录更好理解,只是没找到详细的Formatted Mapping。建议不轻易使用。

            HttpRequestMessage retrieveAccWithFormattedValueReq = new HttpRequestMessage(HttpMethod.Get, webApiUrl + "/accounts?$select=name,donotpostalmail,accountratingcode,numberofemployees,revenue&$top=1");
retrieveAccWithFormattedValueReq.Headers.Authorization = new AuthenticationHeaderValue("Bearer", accessCode);
retrieveAccWithFormattedValueReq.Headers.Add("Prefer", " odata.include-annotations=\"OData.Community.Display.V1.FormattedValue\""); HttpResponseMessage retrieveAccWithFormatedValueResp = await client.SendAsync(retrieveAccWithFormattedValueReq); if (retrieveAccWithFormatedValueResp.IsSuccessStatusCode)
{
JObject result = JsonConvert.DeserializeObject<JObject>(await retrieveAccWithFormatedValueResp.Content.ReadAsStringAsync());
Console.WriteLine(result.ToString());
}

在Web API的数据查询里面呢,另一个比較重要的仅仅是就是使用Web API Query Function,博主将在兴许的博文中为大家介绍它的用法。

Dynamics CRM 2015/2016 Web API:新的数据查询方式的更多相关文章

  1. Dynamics CRM 2015/2016 Web API:聚合查询

    各位小伙伴们,今天是博主2016年发的第一篇文章.首先祝大家新年快乐.工资Double,哈哈.今天我们来看一个比較重要的Feature--使用Web API运行FetchXML查询! 对的,各位.你们 ...

  2. Dynamics CRM 2015/2016 Web API:Unbound Function 和 Bound Function

    今天我们来看看Dynamics CRM Web API Function 吧, 这是一个新概念,刚接触的时候我也是比較的迷糊.这种命名确实是和之前的那套基于SOAP协议的API全然联系不上.好了,不说 ...

  3. Dynamics CRM 2015/2016 Web API:Unbound Action 和 Bound Action

    上篇文章介绍了Bound/Unbound Function.今天我们来看看Action吧.像我之前说的:Function和Action之前的差别能够简单理解为.Function不改动数据,可是Acti ...

  4. Dynamics CRM 2015/2016 Web API:Unbound Custom Action 和 Bound Custom Action

    今天我们再来看看Bound/Unbound Custom Action吧,什么是Custom Action?不知道的小伙伴们就out了,Dynamics CRM 2013就有了这个功能啦.和WhoAm ...

  5. 控制台程序(C#)不弹出登录窗口连接到Dynamics CRM Online的Web API

    微软动态CRM专家罗勇 ,回复331或者20190505可方便获取本文,同时可以在第一间得到我发布的最新博文信息,follow me! 我之前的文章 控制台程序(C#)不弹出认证窗口连接到Dynami ...

  6. Dynamics CRM 2015/2016新特性之三十二:新增乐观并发处理

    关注本人微信和易信公众号: 微软动态CRM专家罗勇 ,回复215或者20160328可方便获取本文,同时可以在第一间得到我发布的最新的博文信息,follow me!我的网站是 www.luoyong. ...

  7. Dynamics CRM 2015/2016新特性之三十三:有了ExecuteTransactionRequest,再也不用担心部分成功部分失败了

    关注本人微信和易信公众号: 微软动态CRM专家罗勇 ,回复216或者20160329可方便获取本文,同时可以在第一间得到我发布的最新的博文信息,follow me!我的网站是 www.luoyong. ...

  8. Dynamics CRM 2015/2016新特性之三十四:有了插件日志,调试插件so easy!

    关注本人微信和易信公众号: 微软动态CRM专家罗勇 ,回复217或者20160330可方便获取本文,同时可以在第一间得到我发布的最新的博文信息,follow me!我的网站是 www.luoyong. ...

  9. Dynamics CRM 2015/2016新特性之七:有了文档模板,打印分析So Easy

    关注本人微信和易信公众号: 微软动态CRM专家罗勇 ,回复190或者20160216可方便获取本文,同时可以在第一时间得到我发布的最新的博文信息,follow me! 从CRM 2015 UR1开始, ...

随机推荐

  1. 树形 dp

    // ACM训练联盟周赛     C. Teemo's tree problem There is an apple tree in Teemo's yard. It contains n nodes ...

  2. Knockout v3.4.0 中文版教程-16-控制流-foreach绑定

    2. 控制流 1. foreach绑定 目的 foreach绑定会遍历一个数组,为每个数组项生成重复的元素标记结构并做关联.这在渲染列表或表格的时候特别有用. 假设你的数组是一个监控数组,之后无论你进 ...

  3. redux学习总结

    redux学习总结 *:first-child { margin-top: 0 !important; } body > *:last-child { margin-bottom: 0 !imp ...

  4. python-selenium使用send_keys()方法写中文报错的解决方法

    问题描述: 自动化操作页面,输入中文姓名: # coding=utf-8 url = "http://dealer.bitauto.com/50002218/zuidijia/" ...

  5. 大数据学习——kafka+storm+hdfs整合

    1 需求 kafka,storm,hdfs整合是流式数据常用的一套框架组合,现在 根据需求使用代码实现该需求 需求:应用所学技术实现,kafka接收随机句子,对接到storm中:使用storm集群统计 ...

  6. Java包(package)详解

    java包的作用是为了区别类名的命名空间 1.把功能相似或相关的类或接口组织在同一个包中,方便类的查找和使用.. 2.如同文件夹一样,包也采用了树形目录的存储方式.同一个包中的类名字是不同的,不同的包 ...

  7. 新一代 javascript 模板引擎

    artTemplate-3.0 新一代 javascript 模板引擎 <!DOCTYPE html> <html lang="en"> <head& ...

  8. AWR报告中Parse CPU to Parse Elapsd%的理解

    AWR报告中Parse CPU to Parse Elapsd%的理解   原文自:http://dbua.iteye.com/blog/827243   Parse CPU to Parse Ela ...

  9. 【Luogu】P1868饥饿的奶牛(DP)

    题目链接 话说我存一些只需要按照一个关键字排序的双元素结构体的时候老是喜欢使用链式前向星…… DP.f[i]表示前i个位置奶牛最多能吃到的草.转移方程如下: f[i]=f[i-]; f[i]=max( ...

  10. apache kafka参考

    apache kafka参考 消息队列分类:  点对点: 消息生产者生产消息发送到queue中,然后消息消费者从queue中取出并且消费消息.这里要注意: 消息被消费以后,queue中不再有存储,所以 ...