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

Web API在Dynamics CRM中的功能越来越强大,Dynamics 365 (Dynamics CRM V8.2) 又增加了一些通过通过Web API可以执行的操作(Action) ,比如 ExecuteWorkflow这个Action,具体Web API可以执行哪些操作呢?可以参考SDK的 Web API Action Reference 章节,也有在线版本,在线版本是 Web API Action Reference 。当然,这个章节的内容会变化,要查看Dynamics CRM对应版本的SDK。今天要讲解的是利用Fiddler的Replay功能通过Web API调用操作。

在继续阅读之前,如果你对通过Web API执行操作没有概念,强烈建议你先阅读我的文章:Dynamics CRM 2015/2016新特性之二十四:使用Web API执行操作 。

我们先看 ExecuteWorkflow Action 的说明,可以知道它是一个绑定操作, 它有一个输入参数 EntityId ,也有返回参数,是个asyncoperation 实体记录类型。为了测试需要,先要找一个工作流,我这里有一个工作流如下,我这里故意没有选中 作为按需流程 ,是因为我想看看不选中这个是否也可以通过代码执行这个工作流,当然在界面上通过运行工作流此时是找不到这个工作流的。

然后我需要找一条这个工作流对应实体的一条记录,我这里选择一条记录。顺便介绍下如何获取记录ID的方法,右击一条记录,选择 在新窗口中打开 。

然后就会在新窗口中打开,可以看到打开记录时候的URL是类似: https://demo.luoyong.me/main.aspx?etc=10007&extraqs=&histKey=789763582&id=%7bB907DE1B-CF99-E611-8161-000D3A80C8B8%7d&newWindow=true&pagetype=entityrecord&sitemappath=SFA%7cExtensions%7cly_test#348434379 。这个URL中的id=%7b 和 %7d之间的就是这个记录的ID。

我们还需要执行的工作流的ID,在解决方案中双击打开该工作流,有类似这样的URL:https://demo.luoyong.me/sfa/workflow/edit.aspx?_CreateFromId=%7b2721DA92-65A4-E511-80CB-000D3A80CE7F%7d&_CreateFromType=7100&appSolutionId=%7b2721DA92-65A4-E511-80CB-000D3A80CE7F%7d&id=%7b6BEBC426-F722-4B64-AE5D-0DA379F8A8C4%7d

同样的我们可以拿到这个工作流的ID。

我这里借助Fiddler来Replay,启用Fiddler抓包,右击一个请求,选择 Replay > Reissue from Composer.

在Fiddler的Composer中打开页面类似如下:

然后我们就可以更改请求方法,请求URL,请求头Header和请求体Body。我这里更改如下:

POST的URL我改成了:https://demo.luoyong.me/api/data/v8.2/workflows(6BEBC426-F722-4B64-AE5D-0DA379F8A8C4)/Microsoft.Dynamics.CRM.ExecuteWorkflow

Request Body我改成了如下,特别注意这个Cookie的元素值要保留,用来认证的,当然也会过期:

Content-Type: application/json; charset=utf-8
Accept: application/json
OData-MaxVersion: 4.0
OData-Version: 4.0
Cookie: ReqClientId=dff59da0-52dd-42f9-8ab9-e62ad9b24e57; e9cd027f-26a3-e511-80c6-000d3a807ec7_bd2a5c49-6b08-4eda-8a15-84159d9fd349=/Date(1478082706255)/; persistentNavTourCookie=HideNavTour; CRM_MSG_BAR_ServiceDeskAlert%23e9cd027f-26a3-e511-80c6-000d3a807ec7=HideMessage; MSISAuth=77u/PD94bWwgdmVyc2lvbj0iMSlSNWN6UEdTQm9Md0FnQUFFWU8ydHhxQXNxTVo0NS83WUJRL3pGdk1ZWndQWld6RnhjcVhHYWx6ZjZscFVsUVBnVWprSnArVVZYY0IxcGNsMXF5VmZ0UVm5nVnFSc3pxV1RKbjlrMWxlRWhB; MSISAuth1=M3VIZmdZZmVF0eUNvbnRleHRUb2tlbj4=; CRM_MSG_BAR_e9cd027f-26a3-e511-80c6-000d3a807ec7GetAppsForCrm=HideMessage; CRM_MSG_BAR_EnableS2SAlert%23e9cd027f-26a3-e511-80c6-000d3a807ec7=HideMessage

Request Body我改成了:

{"EntityId":"B907DE1B-CF99-E611-8161-000D3A80C8B8"}

我执行的话会返回HTTP Status为500,内部错误:

HTTP/1.1 500 Internal Server Error
Cache-Control: no-cache
Pragma: no-cache
Content-Type: application/json; odata.metadata=minimal
Expires: -1
Server: Microsoft-IIS/8.5
REQ_ID: 5b92fe5f-7856-4817-bc18-210b20fa2b08
OData-Version: 4.0
X-AspNet-Version: 4.0.30319
X-Powered-By: ASP.NET
Date: Mon, 24 Jul 2017 15:33:39 GMT
Content-Length: 2869

{
"error":{
"code":"","message":"Workflow must be marked as on-demand or child workflow.","innererror":{
"message":"Workflow must be marked as on-demand or child workflow.","type":"System.ServiceModel.FaultException`1[[Microsoft.Xrm.Sdk.OrganizationServiceFault, Microsoft.Xrm.Sdk, Version=8.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35]]","stacktrace":" at Microsoft.Crm.Extensibility.OrganizationSdkServiceInternal.Execute(OrganizationRequest request, CorrelationToken correlationToken, CallerOriginToken callerOriginToken, WebServiceType serviceType, Boolean checkAdminMode, ExecutionContext executionContext)\r\n at Microsoft.Crm."
}
}
}

提示很清晰,工作流必须要选中 作为按需流程 或者是子流程才行。于是我停用该工作流,然后激活该工作流,再来尝试,执行结果如下:

如果查看原版的返回内容是这样的:

HTTP/1.1 200 OK
Cache-Control: no-cache
Pragma: no-cache
Content-Type: application/json; odata.metadata=minimal
Expires: -1
Server: Microsoft-IIS/8.5
REQ_ID: 0ad59cc7-ab4e-49bf-a05b-8b522db29c75
Preference-Applied: return=representation
OData-Version: 4.0
X-AspNet-Version: 4.0.30319
X-Powered-By: ASP.NET
Date: Mon, 24 Jul 2017 15:39:04 GMT
Content-Length: 38136

{
"@odata.context":"https://demo.luoyong.me/api/data/v8.2/$metadata#asyncoperations/$entity","statecode":0,"asyncoperationid":"f9349b37-8670-e711-826c-000d3a80c8b8","_regardingobjectid_value":"b907de1b-cf99-e611-8161-000d3a80c8b8","_owningextensionid_value":"c8556024-8670-e711-826c-000d3a80c8b8","createdon":"2017-07-24T15:39:03Z","_workflowactivationid_value":"c8556024-8670-e711-826c-000d3a80c8b8","depth":1,"messagename":"ExecuteWorkflow","_ownerid_value":"e9cd027f-26a3-e511-80c6-000d3a807ec7","name":"\u7f57\u52c7\u6d4b\u8bd5\u5b9e\u4f53\u5b57\u6bb5\u503c\u53d8\u66f4\u540e\u8fd0\u884c\u7684\u5de5\u4f5c\u6d41","requestid":null,"friendlymessage":null,"retrycount":null,"startedon":null
}

可以看到执行成功,我去界面上也可以看到执行了工作流:

利用Fiddler修改请求信息通过Web API执行Dynamics 365操作(Action)实例的更多相关文章

  1. 不借助工具在浏览器中通过Web API执行Dynamics 365操作(Action)实例

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

  2. 利用Fiddler修改请求信息通过Web API执行操作(Action)实例

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

  3. Fiddler修改请求的参数,重新执行请求

    打开Fiddler4,打开浏览器,输入请求地址,例如:http://www.meizu.com 1.  拿出host信息:tongji.meizu.com 2.  拿出URL信息:/flow/mc?v ...

  4. 使用JS通过Web API执行批量操作,多个操作是一个事务!

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

  5. Fiddler修改请求、返回数据

    相信你们有听过说“绕过前端”,但是可能想不到要怎样才能绕过前端呢? 首先,我们要知道什么是绕过前端?比如:登录用户名限制数字.6位,用户在登录页面填写用户名符合要求,使用Fiddler作为代理,拦截登 ...

  6. AngularJS使用OData请求ASP.NET Web API资源的思路

    本篇整理AngularJS使用OData请求ASP.NET Web API资源的思路. 首先给ASP.NET Web API插上OData的翅膀,通过NuGet安装OData. 然后,给control ...

  7. Web API 2 入门——Web API 2中的操作结果(谷歌翻译)

    在这篇文章中 空虚 HttpResponseMessage IHttpActionResult 其他返回类型 作者:Mike Wasson 本主题描述ASP.NET Web API如何将控制器操作的返 ...

  8. 通过C#代码调用Dynamics 365 Web API执行批量操作

    我是微软Dynamics 365 & Power Platform方面的工程师罗勇,也是2015年7月到2018年6月连续三年Dynamics CRM/Business Solutions方面 ...

  9. Fiddler修改请求和响应

    通过设置断点,Fiddler可以做到: 1. 修改HTTP请求头信息.例如修改请求头的UA, Cookie, Referer 信息,通过"伪造"相应信息达到达到相应的目的(调试,模 ...

随机推荐

  1. LabVIEW(六):创建VI

    1.多使用快捷键,可以提高工作效率键盘快捷键 说明对象/动作Shift-单击 选取多个对象:将对象添加到当前选择之中.方向箭头键 将选中的对象每次移动一个像素.Shift-方向箭头键 将选中的对象每次 ...

  2. ubuntu中minicom安装和使用

    想要对嵌入式开发板进行开发和操作,都需要进行文件传输或者是控制,这时基本都是需要通过串口线或者是网线进行连接的,在Windows下是使用超级终端通过串口对开发板进行操作的,而在Linux下,最后最常见 ...

  3. 一位90后的自述:如何从年薪3w到30w

    作者介绍:90后生人/男/二本本科/世界500强技术主管 1.引言 上海小胖,曾就职于pwc(普华永道)担任TechLeader,带领DS(Data Scientist)团队完成全美医疗保险大数据项目 ...

  4. spring boot整合 springmvc+mybatis

    需要以下依赖 <dependencies> <dependency> <groupId>org.springframework.boot</groupId&g ...

  5. alert换行

    alert( "视频会议系统开启流程 " + String.fromCharCode(13) + "1.  软件下载之后双击安装即可." + String.fr ...

  6. 全网最详细的一个超级好用的命令行工具【Cmder】的安装之后的一些配置(图文详解)

    不多说,直接上干货! 1.修改命令提示符λ为$ 首先,我们看到 进入解压后的cmder的目录,进入vendor,打开init.bat文件. 修改第15行的代码 @prompt $E[;;40m$P$S ...

  7. less用法小结

    1,采用koala进行编译,可以实时地在vscode这样的工具中看到less到css的转换: 2,均支持/**/以及//两种形式的注释,由于后期维护是维护less,因此推荐使用后者,因为后者不会被编译 ...

  8. EntityFramework中对象的状态管理(笔记)

    刚开始接触EF框架的时候总是不明白: 为什么查询出来的对象 Remove().再 SaveChanges()就会把数据删除.而自己 new 一个Person()对象,然后 Remove()不行? 为什 ...

  9. MongoDB高可用集群+MMS集群监控搭建

    备注: mongodb学习资料 http://www.runoob.com/mongodb/mongodb-tutorial.html 一. 集群的三个组件: mongos(query routers ...

  10. 【干货】利用MVC5+EF6搭建博客系统(三)添加Nlog日志、缓存机制(MemoryCache、RedisCache)、创建控制器父类BaseController

    PS:如果图片模糊,鼠标右击复制图片网址,然后在浏览器中打开即可. 一.回顾系统进度以及本章概要 目前博客系统已经数据库创建.以及依赖注入Autofac集成,接下来就是日志和缓存集成,这里日志用的是N ...