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

上篇文章介绍了Bound/Unbound Function,今天我们来看看Action吧,像我之前说的:Function和Action之前的区别可以简单理解为,Function不修改数据,但是Action却会修改数据。 今天呢,我们也分别看看Bound Action和Unbound Action,其实它们的调用方式和Function是一样的,只是这里的请求提交方式更多的是采用Post的方式,我们先来看两个例子吧:

公共变量

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";  

Bound Action

它也是可以基于具体的上下文去调用的,当然在调用这个Bound Action之前,不要忘记添加前缀“Microsoft.Dynamics.CRM”,要不然,请求会失败。在下面这个例子里面,我们往队列里面添加了一个电话记录。仔细的朋友肯定已经意识到了,这里我们需要构造请求体,对于请求体的数据结构,可以看博主之前的文章,在这套新API里面,数据结构都简化了,我们可以使用最基础的结构去构造请求体。

            HttpRequestMessage addToQueueReq = new HttpRequestMessage(HttpMethod.Post, webApiUrl + "/queues(70f6a997-71bb-e511-80d8-c4346bc5f7c8)/Microsoft.Dynamics.CRM.AddToQueue");
            addToQueueReq.Headers.Authorization = new AuthenticationHeaderValue("Bearer", auth.AcquireToken().AccessToken);

            JObject addToQueueActivity = new JObject();
            addToQueueActivity.Add("activityid", "3040F58A-75BB-E511-80D9-C4346BC43F3C");
            addToQueueActivity.Add("@odata.type", "Microsoft.Dynamics.CRM.phonecall");

            JObject addToQueueContent = new JObject();
            addToQueueContent.Add("Target", addToQueueActivity);

            addToQueueReq.Content = new StringContent(JsonConvert.SerializeObject(addToQueueContent), Encoding.UTF8, "application/json");

            HttpResponseMessage addToQueueResp = await client.SendAsync(addToQueueReq);

            if (addToQueueResp.IsSuccessStatusCode)
            {
                JObject result = JsonConvert.DeserializeObject<JObject>(await addToQueueResp.Content.ReadAsStringAsync());
                Console.WriteLine(result["QueueItemId"]);
            }

Unbound Action

顾名思义,该Action可以在任何实体上进行调用,可以对其单独调用,如下例子。这里我们调用了WinOpportunity Action,对某个商机发起赢单操作,期间,我们是需要构造正确的请求体。

            HttpRequestMessage winOppReq = new HttpRequestMessage(HttpMethod.Post, webApiUrl + "/WinOpportunity");
            winOppReq.Headers.Authorization = new AuthenticationHeaderValue("Bearer", auth.AcquireToken().AccessToken);

            JObject closeOppItem = new JObject();
            closeOppItem.Add("subject", "Won Opportunity!");
            closeOppItem.Add("[email protected]", webApiUrl + "/opportunities(1440F58A-75BB-E511-80D9-C4346BC43F3C)");

            JObject requestBody = new JObject();
            requestBody.Add("Status", 3);
            requestBody.Add("OpportunityClose", closeOppItem);

            winOppReq.Content = new StringContent(JsonConvert.SerializeObject(requestBody), Encoding.UTF8, "application/json");

            HttpResponseMessage winOppResp = await client.SendAsync(winOppReq);

            if (winOppResp.IsSuccessStatusCode)
            {
                JObject result = JsonConvert.DeserializeObject<JObject>(await winOppResp.Content.ReadAsStringAsync());
                Console.WriteLine(result);
            }

调用这些Action是不是很方便了,只需要构造好URL和请求体即可,调用这些请求在轻客户端是非常便捷的,至少我们不用去抓包并拼接SOAP消息体啦。

时间: 2024-08-03 16:57:01

Dynamics CRM 2015/2016 Web API:Unbound Action 和 Bound Action的相关文章

Dynamics CRM 2015/2016 Web API:基于视图的数据查询

Dynamics CRM 2016 Web API支持基于视图来查询数据,博主初看到该Feature,着实让我眼前一亮,这个功能太给力了,完全颠覆了之前复杂繁琐的取数方式了,现在的视图真正到了定义一次,处处复用的地步了!使用方法也很简单,只需要加个参数并指定需要调用的View ID就好了.接下来我给大家演示3个比较常用的场景:调用公共视图,调用私有视图,调用SubGrid视图. 公共视图 什么是公共视图?就是大家都有权限访问的视图,比如客户实体上的我的可用客户视图,我们一般在UI上面这么调用它们

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

今天我们再来看看Bound/Unbound Custom Action吧,什么是Custom Action?不知道的小伙伴们就out了,Dynamics CRM 2013就有了这个功能啦.和WhoAmI这类消息一样,我们都可以通过代码去调用它们,只不过呢,今天我要给大家讲讲怎么用Web API的方式去调用它们. Custom Action也被划分为Bound和Unbound两种类型了,它们的具体含义和之前讲的Function和Action没有区别,唯一的区别就是,这里的Custom Action

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

今天我们来看看Dynamics CRM Web API Function 吧, 这是一个新概念,刚接触的时候我也是比较的迷糊,这样的命名确实是和之前的那套基于SOAP协议的API完全联系不上.好了,不说闲话了.这里的Function呢,就我来看,更像是一些被封装好的原生函数和老API中的Request差不多的意思,只是API的架构方式变了,所以名称也就跟着变了. 我们之前要查看当前登录用户的信息,需要调用WhoAmIRequest,那现在呢?我们需要调用WhoAmI Function. 这里的F

Dynamics CRM 2015/2016 Web API:注册 APP(调用CRM Online Web API)

在之前的三篇文章中,博主提到过Web API将会成为Dynamics CRM 的主流编程接口,所以它的重要性是不言而喻的.那今天,我们来看看调用CRM Online Web API之前需要做些什么准备工作,之前的博文并没有介绍这步,今天给大家补上.在后续的一段时间呢,我会写篇怎么在重客户端调用Dynamics CRM On Premise版本的Web API. 在调用Dynamics CRM Online Web API之前呢,我们需要创建一个与其关联的AD环境,创建方式很简单:在Office

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

各位小伙伴们,今天是博主2016年发的第一篇文章,首先祝大家新年快乐,工资Double,哈哈.今天我们来看一个比较重要的Feature--使用Web API执行FetchXML查询!对的,各位,你们没有听错,使用Web API执行FetchXML查询.在过去我们做这样的事情可是要花九牛二虎之力哟,拼接大量的SOAP消息体而且还容易出错.现在好了,我们自己可以在URL里面加上我们想要执行的FetchXML即可,系统则会乖乖的把我们想要的数据返回回来,是不是很美好呢! 言归正传,Web API的数据

Dynamics CRM 2015/2016 Web API:新的数据查询方式

今天我们来看看Web API的数据查询功能,虽然之前介绍CRUD的文章里面提到过怎么去Read数据,但是并没有详细的去深究那些细节,今天我们就来具体看看吧.其实呢,Web API的数据查询接口也是基于OData协议的,所以之前的OData Url Query的构造规则没有很大的变化,例如:$top, $select, $filter, $expand, $order的功能还是在的,不过也添加了一些新东西,例如 $count  -- 返回记录的总数 Paging Mechanism(分页机制)--

Dynamics CRM 2015/2016/365 Web API:用户模拟

今天再更新一篇关于在Web API接口中使用用户模拟这一功能,用户模拟在Dynamics CRM开发中已经不是新概念了,历任接口都支持这个功能.在介绍怎么在Web API中使用该功能之前,我们先来过一遍用户模拟的具体功能. 用户模拟,顾名思义,即为模拟其他用户.在调用接口的时候如果我们都需要提供一个账号密码信息,但是很多时候,我们的接口的认证信息是一个集成账号,但是我们却希望通过这个接口创建的记录的创建者是其它用户.如果你有这个需求,你就需要用到用户模拟功能. 在Dynamics CRM Web

Dynamics CRM 2015/2016/365 Web API:批处理任务

Web API为我们提供的批量任务执行功能,我们可以在一个请求中混合多个不相干的创建查询请求,并且其还提供了事务功能,如果在事务中如果有脚本出现了错误,则其提供回滚功能. 如下是批处理的请求报文,在报文里面我们需要设置批处理任务的编号,因为我们需要用它来划分任务的开始和结束边界.另外,我们还可以通过changeset标记来划分事务,在同一个changeset中,如果有处理失败了,那么整个changeset都会被回滚. POST https://crmhomedev06.api.crm6.dyna

Dynamics CRM 2015/2016/365 Web API:级联查询

级联查询,即为在一次查询请求中吧父子记录统统查询出来的行为.使用Web API进行这样的查询非常的方便,主需要在OData Query URL中加入$expand关键字即可,不管在轻客户端或重客户端,调用都非常的方便. 我们来看一个使用级联查询的Query URL实例: GET https://crmhomedev06.api.crm6.dynamics.com/api/data/v8.2/accounts(79309b7b-8bac-e611-80f9-1458d05a2ab0)?$expan