Dynamics CRM 2015/2016 Web API:Unbound Function 和 Bound Function
今天我们来看看Dynamics CRM Web API Function 吧, 这是一个新概念,刚接触的时候我也是比較的迷糊。这种命名确实是和之前的那套基于SOAP协议的API全然联系不上。好了,不说闲话了。这里的Function呢,就我来看,更像是一些被封装好的原生函数和老API中的Request几乎相同的意思,仅仅是API的架构方式变了,所以名称也就跟着变了。
我们之前要查看当前登录用户的信息。须要调用WhoAmIRequest,那如今呢?我们须要调用WhoAmI Function。 这里的Function又被分为 Unbound和Bound。什么意思呢?Unbound Function能够理解为不专门服务某个实体,我们能够在不论什么时候去调用它。Bound Function 则是专门为某个实体服务。它对其它实体是不可见的,而且提供调用的方式也非常便捷。
我们来看两个样例吧。一个是调用Unbound Function。还有一个是调用Bound Function:
static string clientId = "580c20be-5960-42a0-837f-9b554b88b2d5";//"025220cd-a8c9-414f-aad7-a9288404262b";
static string service = "https://ghostbear.crm6.dynamics.com";
static string redirectUrl = "http://localhost/weapidemo";
static string username = "account";
static string password = "pwd";
static string webApiUrl = "https://ghostbear.api.crm6.dynamics.com/api/data/v8.0";
Unbound Function(无參数)
HttpRequestMessage whoaiReq = new HttpRequestMessage(HttpMethod.Get, webApiUrl + "/WhoAmI()");
whoaiReq.Headers.Authorization = new AuthenticationHeaderValue("Bearer", auth.AcquireToken().AccessToken); HttpResponseMessage whoaiResp = await client.SendAsync(whoaiReq);
if (whoaiResp.IsSuccessStatusCode)
{
JObject whoaiInfo = JsonConvert.DeserializeObject<JObject>(await whoaiResp.Content.ReadAsStringAsync());
Console.WriteLine(whoaiInfo["UserId"]);
}
Unbound Function(带參数)
string userId = "05cc9481-7d37-4e20-8de0-dd892c47939b";
string retrievePrvQuery = string.Format(webApiUrl + "/RetrieveUserPrivileges(UserId=@p1)? @p1={0}", userId);
HttpRequestMessage retrievePrvReq = new HttpRequestMessage(HttpMethod.Get, retrievePrvQuery);
retrievePrvReq.Headers.Authorization = new AuthenticationHeaderValue("Bearer", auth.AcquireToken().AccessToken); HttpResponseMessage retrievePrvResp = await client.SendAsync(retrievePrvReq);
if (retrievePrvResp.IsSuccessStatusCode)
{
JObject priveleges = JsonConvert.DeserializeObject<JObject>(await retrievePrvResp.Content.ReadAsStringAsync());
Console.WriteLine(priveleges["value"]);
}
调用Function是不是非常简洁明了呢?我们唯一须要关注的事情就是构造好URL,以下我们来看看Bound Function:
Bound Function
HttpRequestMessage calculateTotalTimeReq = new HttpRequestMessage(HttpMethod.Get, webApiUrl + "/incidents(963EF58A-75BB-E511-80D9-C4346BC43F3C)/Microsoft.Dynamics.CRM.CalculateTotalTimeIncident()");
calculateTotalTimeReq.Headers.Authorization = new AuthenticationHeaderValue(auth.AcquireToken().AccessToken); HttpResponseMessage calculateTotalTimeResp = await client.SendAsync(calculateTotalTimeReq); Console.WriteLine(calculateTotalTimeResp.IsSuccessStatusCode);
Console.WriteLine(await calculateTotalTimeResp.Content.ReadAsStringAsync());
最后呢。必须唠叨的提一下Action。毕竟它们是一起的兄弟嘛。
用一句最简单的话去区分它们:Function不改动数据。Action改动数据
Dynamics CRM 2015/2016 Web API:Unbound Function 和 Bound Function的更多相关文章
- Dynamics CRM 2015/2016 Web API:Unbound Custom Action 和 Bound Custom Action
今天我们再来看看Bound/Unbound Custom Action吧,什么是Custom Action?不知道的小伙伴们就out了,Dynamics CRM 2013就有了这个功能啦.和WhoAm ...
- Dynamics CRM 2015/2016 Web API:Unbound Action 和 Bound Action
上篇文章介绍了Bound/Unbound Function.今天我们来看看Action吧.像我之前说的:Function和Action之前的差别能够简单理解为.Function不改动数据,可是Acti ...
- Dynamics CRM 2015/2016 Web API:聚合查询
各位小伙伴们,今天是博主2016年发的第一篇文章.首先祝大家新年快乐.工资Double,哈哈.今天我们来看一个比較重要的Feature--使用Web API运行FetchXML查询! 对的,各位.你们 ...
- Dynamics CRM 2015/2016 Web API:新的数据查询方式
今天我们来看看Web API的数据查询功能,尽管之前介绍CRUD的文章里面提到过怎么去Read数据,可是并没有详细的去深究那些细节,今天我们就来详细看看吧.事实上呢,Web API的数据查询接口也是基 ...
- 控制台程序(C#)不弹出登录窗口连接到Dynamics CRM Online的Web API
微软动态CRM专家罗勇 ,回复331或者20190505可方便获取本文,同时可以在第一间得到我发布的最新博文信息,follow me! 我之前的文章 控制台程序(C#)不弹出认证窗口连接到Dynami ...
- Dynamics CRM 2015/2016新特性之三十二:新增乐观并发处理
关注本人微信和易信公众号: 微软动态CRM专家罗勇 ,回复215或者20160328可方便获取本文,同时可以在第一间得到我发布的最新的博文信息,follow me!我的网站是 www.luoyong. ...
- Dynamics CRM 2015/2016新特性之三十三:有了ExecuteTransactionRequest,再也不用担心部分成功部分失败了
关注本人微信和易信公众号: 微软动态CRM专家罗勇 ,回复216或者20160329可方便获取本文,同时可以在第一间得到我发布的最新的博文信息,follow me!我的网站是 www.luoyong. ...
- 控制台程序(C#)不弹出认证窗口连接到Dynamics CRM Online的Web API
摘要: 本人微信和易信公众号: 微软动态CRM专家罗勇 ,回复271或者20180602可方便获取本文,同时可以在第一间得到我发布的最新的博文信息,follow me!我的网站是 www.luoyon ...
- Dynamics CRM 2015/2016新特性之三十四:有了插件日志,调试插件so easy!
关注本人微信和易信公众号: 微软动态CRM专家罗勇 ,回复217或者20160330可方便获取本文,同时可以在第一间得到我发布的最新的博文信息,follow me!我的网站是 www.luoyong. ...
随机推荐
- PHP实现事件机制实例分析
PHP实现事件机制实例分析 内置了事件机制的语言不多,php也没有提供这种功能.事件(Event)说简单了就是一个Observer模式.实现起来非常easy.可是有所不同的是,事件的监听者谁都能够加, ...
- ios学习之旅------玩转结构体
1.全局变量和局部变量 局部变量: 概念:定义函数内部变量 定义格式:变量类型 变量名称; 作用域:从定义那一行開始到所在代码块结束 生命周期:从代码运行到定义的哪一行 ...
- HDU 2563 统计问题 (DFS + 打表)
统计问题 Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submi ...
- 浅析.Net数据操作机制
举个栗子,获取新闻详情的案例. public ActionResult NewsView(int newsId) { var news = _newsService.GetNewsById(newsI ...
- Impala与HBase整合
不多说,直接上干货! Impala可以通过Hive外部表方式和HBase进行整合,步骤如下: • 步骤1:创建hbase 表,向表中添加数据 create 'test_info', 'info' pu ...
- JeeSite信息化快速开发平台
平台简介 JeeSite是基于多个优秀的开源项目,高度整合封装而成的高效,高性能,强安全性的开源Java EE快速开发平台. JeeSite是您快速完成项目的最佳基础平台解决方案,JeeSite是您 ...
- fsck---于检查并且试图修复文件系统中的错误
fsck命令被用于检查并且试图修复文件系统中的错误.当文件系统发生错误四化,可用fsck指令尝试加以修复. -a:自动修复文件系统,不询问任何问题: -A:依照/etc/fstab配置文件的内容,检查 ...
- Linux-swap分区
Linux内核为了提高读写效率与速度,会将文件在内存中进行缓存,这部分内存就是Cache Memory(缓存内存).即使你的程序运行结束后, Cache Memory也不会自动释放.这就会导致你在Li ...
- 【Uva 1289】Stacking Plates
[Link]: [Description] 有n(1≤n≤50)堆盘子,第i堆盘子有hi个盘子(1≤hi≤50),从上到下直径不减.所有盘 子的直径均不超过10000.有如下两种操作. split:把 ...
- 使用Ant打包Android应用具体解释——Ant使用解析
上篇<使用Ant打包Android应用具体解释>描写叙述了使用Ant打包的流程,但非常多步骤并没有说明如此做的原因,本篇将从Ant方面来理解,下一篇从APK生成的流程来说明. APK包的生 ...