利用Fiddler修改请求信息通过Web API执行Dynamics 365操作(Action)实例
本人微信和易信公众号: 微软动态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)实例的更多相关文章
- 不借助工具在浏览器中通过Web API执行Dynamics 365操作(Action)实例
摘要: 本人微信和易信公众号: 微软动态CRM专家罗勇 ,回复262或者20170727可方便获取本文,同时可以在第一间得到我发布的最新的博文信息,follow me!我的网站是 www.luoyon ...
- 利用Fiddler修改请求信息通过Web API执行操作(Action)实例
本人微信和易信公众号: 微软动态CRM专家罗勇 ,回复261或者20170724可方便获取本文,同时可以在第一间得到我发布的最新的博文信息,follow me!我的网站是 www.luoyong.me ...
- Fiddler修改请求的参数,重新执行请求
打开Fiddler4,打开浏览器,输入请求地址,例如:http://www.meizu.com 1. 拿出host信息:tongji.meizu.com 2. 拿出URL信息:/flow/mc?v ...
- 使用JS通过Web API执行批量操作,多个操作是一个事务!
关注本人微信和易信公众号: 微软动态CRM专家罗勇 ,回复235或者20161105可方便获取本文,同时可以在第一间得到我发布的最新的博文信息,follow me!我的网站是 www.luoyong. ...
- Fiddler修改请求、返回数据
相信你们有听过说“绕过前端”,但是可能想不到要怎样才能绕过前端呢? 首先,我们要知道什么是绕过前端?比如:登录用户名限制数字.6位,用户在登录页面填写用户名符合要求,使用Fiddler作为代理,拦截登 ...
- AngularJS使用OData请求ASP.NET Web API资源的思路
本篇整理AngularJS使用OData请求ASP.NET Web API资源的思路. 首先给ASP.NET Web API插上OData的翅膀,通过NuGet安装OData. 然后,给control ...
- Web API 2 入门——Web API 2中的操作结果(谷歌翻译)
在这篇文章中 空虚 HttpResponseMessage IHttpActionResult 其他返回类型 作者:Mike Wasson 本主题描述ASP.NET Web API如何将控制器操作的返 ...
- 通过C#代码调用Dynamics 365 Web API执行批量操作
我是微软Dynamics 365 & Power Platform方面的工程师罗勇,也是2015年7月到2018年6月连续三年Dynamics CRM/Business Solutions方面 ...
- Fiddler修改请求和响应
通过设置断点,Fiddler可以做到: 1. 修改HTTP请求头信息.例如修改请求头的UA, Cookie, Referer 信息,通过"伪造"相应信息达到达到相应的目的(调试,模 ...
随机推荐
- Kali学习笔记21:缓冲区溢出实验(漏洞发现)
上一篇文章,我已经做好了缓冲区溢出实验的准备工作: https://www.cnblogs.com/xuyiqing/p/9835561.html 下面就是Kali虚拟机对缓冲区溢出的测试: 已经知道 ...
- php中的一些不常见的问题foreach/in_array[开发篇]
php在开发效率很高,这是无可厚非的,但是却是在牺牲执行效率的.php数组功能非常强大,但是也要多加考虑,多试几种情况情况,以防万一,这里,我就简单的说两个遇到的坑,以后如果有发现更多的,再补上吧! ...
- Core统一日志处理
新建一个Core的Web项目,然后创建相关文件等 添加一个处理错误的类库ErrorMiddleware 下面是该类库的代码 public class ErrorMiddleware { stati ...
- AI - 学习路径(Learning Path)
初见 机器学习图解 错过了这一篇,你学机器学习可能要走很多弯路 这3张脑图,带你清晰人工智能学习路线 一些课程 Andrew Ng的网络课程 HomePage:http://www.deeplearn ...
- centos7通过yum安装nginx
centos7通过yum安装nginx nginx不支持centos7通过yum直接安装~~~ 1.查看操作系统位数[root@-jenkins ~]# rpm -aq|grep centos-rel ...
- sql server 索引阐述系列七 索引填充因子与碎片
一.概述 索引填充因子作用:提供填充因子选项是为了优化索引数据存储和性能. 当创建或重新生成索引时,填充因子的值可确定每个叶级页上要填充数据的空间百分比,以便在每一页上保留一些剩余存储空间作为以后扩展 ...
- app 压力测试
monkey工具详解 https://blog.csdn.net/jffhy2017/article/details/54572400 ----------------------- Android ...
- HttpSessionListener的用法
Session创建事件发生在每次一个新的session创建的时候,类似地Session失效事件发生在每次一个Session失效的时候. 这个接口也只包含两个方法,分别对应于Session的创建和失效: ...
- for循环输出菱形的形状【java】
使用for循环语句输出以下“菱形”效果: * *** ***** ******* ********* ******* ***** *** * 代码 /* * *** ***** ******* *** ...
- leetcode — permutation-sequence
import java.util.ArrayList; import java.util.List; /** * Source : https://oj.leetcode.com/problems/p ...