lovebet运用Fiddler修改请求音信透过Web

自个儿微信和易信公众号: 微软动态C奥迪Q7M专家罗勇
,回复261依旧20170724可方便获取本文,同时能够在第1间取得笔者颁发的流行的博文音讯,follow
me!笔者的网站是 www.luoyong.me 。

 

Web API在Dynamics CLANDM中的功效尤为强大,Dynamics 365 (Dynamics CRubiconM
V8.2) 又追加了有个别通过通过Web API能够推行的操作(Action) ,比如
ExecuteWorkflow这些Action,具体Web
API能够实施什么样操作呢?能够参考SDK的 Web API Action Reference
章节,也有在线版本,在线版本是 Web API Action
Reference

。当然,那一个章节的内容会变动,要翻看Dynamics
CXC90M对应版本的SDK。明天要上课的是使用Fiddler的Replay功用通过Web
API调用操作。

原创地址:http://www.cnblogs.com/jfzhu/archive/2012/10/12/2721888.html

在三番五次读书之前,若是你对通过Web
API执行操作没有定义,强烈提出你先读书作者的稿子:Dynamics C路虎极光M
二零一六/2014新特征之二十四:使用Web
API执行操作
 。

转载请注明出处

咱俩先看 ExecuteWorkflow
Action

的认证,能够理解它是3个绑定操作, 它有3个输入参数 EntityId
,也有重临参数,是个asyncoperation
实体记录类型。为了测试要求,先要找三个工作流,笔者那里有叁个工作流如下,笔者那里故意没有选中
作为按需流程
,是因为自身想看看不选中那一个是还是不是也得以通过代码执行这些工作流,当然在界面上经过运行工作流此时是找不到那么些工作流的。

 

lovebet 1

Microsoft Dynamics
CGL450M本质上只是1个ASP.Net程序,当然它是1个极屌的,高手们付出出来的程序。基本上每3个窗口仍旧对话框都有一定的U奥迪Q7L,那么些窗口或对话框的表征也是由U兰德XC90L中的query
string来支配。也正是说,即使你通晓了某些窗口或对话框的U揽胜L是如何,你就可以在扩张C君越M时,用JScript来打开这些窗口或对话框了。

 

 

接下来自个儿索要找一条那几个工作流对应实体的一条记下,我那边采用一条记下。顺便介绍下何以获得记录ID的法门,右击一条记下,选取在新窗口中打开 。

下边举二个总结的事例来看哪样获得二个窗口的UPAJEROL,以及这么些UEvoqueL能给大家怎么着音信。打开1个客户:

lovebet 2

lovebet 3

 

你能够点击上边包车型大巴复制链接来赢得U安德拉L,你也足以Ctrl +
N,然后从地点栏复制U劲客L。

下一场就会在新窗口中开辟,能够见到打开记录时候的U揽胜极光L是近乎: 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
。这一个U酷路泽L中的id=%7b 和 %7d之间的正是以此记录的ID。

复制出来的UXC60L为:

作者们还索要实施的工作流的ID,在缓解方案中双击打开该工作流,有像样那样的U福睿斯L: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 

http://yourserver/yourorganization/main.aspx?etc=1&extraqs=formid%3d0d6c2857-e8ca-435a-a830-a335ab2139fb&id=%7b8650EB9D-AAC5-E111-AD1C-00155DA83B2B%7d&pagetype=entityrecord

一样的大家得以得到这一个工作流的ID。

从那个U卡宴L我们能够收获的消息为etc(entity type
code)为1,也便是客户的object type
code值为1。大家今后开拓的这些表单的Form
ID为0d6c2857-e8ca-435a-a830-a335ab2139fb。该客户的ID为7b8650EB9D-AAC5-E111-AD1C-00155DA83B2B%7d。固然你要开辟3个联系人的窗口,你只须要精晓那一个关系人的ID,联系人的object
type code,以及要用哪三个Form打开(Form
ID)。其实在SDK中有三个章节已经把这些局地讲的很明白了,我们可以参见SDK中“Open
Forms, Views, and Dialogs with a U君越L”这一章节。

自个儿那边借助Fiddler来Replay,启用Fiddler抓包,右击二个伸手,选取 Replay
> 雷斯sue from Composer.

 

 lovebet 4

对此二个窗口恐怕表单(Form),大家早就知道如何查看它的U路虎极光L了,但假设是一个对话框(Dialog),大家怎么样查看它的ULANDL呢?比如点击客户上的Parent
Company查找按钮,就足以弹出1个对话框来。日常在这些对话框中,你是看不到UQX56L的。

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

lovebet 5

lovebet 6

自个儿在前边的小说向我们介绍过应用F12 Developer
Tools来对CEscortM实行剖析
,这一作品中,作者再向我们介绍另贰个利器lovebet 7,来协理大家获得对话框的UPRADOL,它正是Fiddler。当然Fiddler绝不只是用来获取U宝马X5L的,它的成效非凡有力,有趣味的同室能够参见http://www.fiddler2.com/fiddler2/。首先运转Fiddler。

 

lovebet 8

接下来我们就可以改变请求方法,请求U瑞鹰L,请求头Header和请求体Body。小编那边更改如下:

接下来点击Parent Company查找按钮,Fiddler能够显示出你拜访过的U奥德赛L是什么。

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

lovebet 9

 Request
Body笔者改成了如下,特别注意那些库克ie的要素值要封存,用来验证的,当然也会晚点:

慎选带有lookup的那一行记录,复制U奇骏L,复制结果为:

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

http://yourserver/yourorganization/_controls/lookup/lookupinfo.aspx?AllowFilterOff=0&DefaultType=1&DefaultViewId=%7bA9AF0AB8-861D-4CFA-92A5-C6281FED7FAB%7d&DisableQuickFind=0&DisableViewPicker=0&LookupStyle=single&ShowNewButton=1&ShowPropButton=1&browse=0&currentid=%7b8650EB9D-AAC5-E111-AD1C-00155DA83B2B%7d&objecttypes=1
857-e8ca-435a-a830-a335ab2139fb&id=%7b8650EB9D-AAC5-E111-AD1C-00155DA83B2B%7d&pagetype=entityrecord

 Request Body小编改成了:

 

{“EntityId”:”B907DE1B-CF99-E611-8161-000D3A80C8B8″}

出于地点的U奥德赛L是被encode过的,所以不是很简单读,笔者推荐大家再使用三个U奥迪Q5L
Decoder/Encoder的网站来扶助您对UOdysseyL解码。

 小编执行的话会再次回到HTTP Status为500,内部错误:

lovebet 10

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

解码后的U福睿斯L为:

{
“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://yourserver/yourorganization/_controls/lookup/lookupinfo.aspx?AllowFilterOff=0&DefaultType=1&DefaultViewId=%7BA9AF0AB8-861D-4CFA-92A5-C6281FED7FAB%7D&DisableQuickFind=0&DisableViewPicker=0&LookupStyle=single&ShowNewButton=1&ShowPropButton=1&browse=0&currentid=%7B8650EB9D-AAC5-E111-AD1C-00155DA83B2B%7D&objecttypes=1
857-e8ca-435a-a830-a335ab2139fb&id={8650EB9D-AAC5-E111-AD1C-00155DA83B2B}&pagetype=entityrecord

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

 

lovebet 11

小编们来看ULANDL里的参数:

一旦翻开原版的回到内容是这么的:

(1)objecttypes:那些参数前边的数值表示能够查找的entity type
code,那里的1意味着是客户,假如我们还想搜寻联系人,能够将那里改为objecttypes=1,2。
(2)DefaultType:暗中同意的查找entity

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

(3)DefaultViewId: 对默认entity的默认View

{
“@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
}

(4)DisableQuickFind: 对应Search栏

 能够看来实行成功,笔者去界面上也得以看看进行了工作流:

(5)DisableViewPicker: 不容许改变View

lovebet 12

(6) LookupStyle:决定是多选(multi)依然单选(single)

 

(7) ShowNewButton:显示New按钮

(8)ShowPropButton:显示Properties按钮

(9)browse:决定lookfor, view, search整个这几个是还是不是留存,1为不存在

lovebet 13

大家来构建三个UWranglerL,达成以下职能:

(1)objecttypes:可检索类型为客户、联系人(entity type code 1, 2)
(2)DefaultType:暗许的查找entity为关联人

(3)DefaultViewId: 不使用那个参数,能够让系统控制利用哪个view

(4)DisableQuickFind: 不disable

(5)DisableViewPicker: disable

(6) LookupStyle:单选

(7) ShowNewButton:不显示

(8)ShowPropButton:不显示

(9)browse:0

营造好的U宝马X3L应为:

http://yourserver/yourorganization/_controls/lookup/lookupinfo.aspx?AllowFilterOff=0&DefaultType=2&DisableQuickFind=0&DisableViewPicker=1&LookupStyle=single&ShowNewButton=0&ShowPropButton=0&browse=0&objecttypes=1,2

将以此U昂科拉L直接复制到IE中打开,看到结果为:

lovebet 14

在JS中,怎么着采纳这几个U翼虎L来打开对话框呢?大家可以利用window.showModalDialog那个办法。举2个例证,大家为三个联系人采用parent
customer。

lovebet 15

在JS中,使用以下代码:

var url = Xrm.Page.context.prependOrgName("/_controls/lookup/lookupinfo.aspx?"
+ "AllowFilterOff=0&DefaultType=2&DisableQuickFind=0&DisableViewPicker=1" 
+ "&LookupStyle=single&ShowNewButton=0&ShowPropButton=0&browse=0&objecttypes=1,2");
var result = window.showModalDialog(url);
if (result != null) {
    var value = new Array();
    value[0] = new Object();
    value[0].id = result.items[0].id;
    value[0].name = result.items[0].name;
    value[0].entityType = result.items[0].type == 1 ? "account" : "contact";
    Xrm.Page.getAttribute("parentcustomerid").setValue(value);
}

再进阶一下,看一个多选的例证。咱们要写一封email,大家要选拔收件人:

lovebet 16

咱俩能够运用以下的UCRUISERL及JScript:

/_controls/lookup/lookupinfo.aspx?AllowFilterOff=0&DefaultType=1&DisableQuickFind=0&DisableViewPicker=1&LookupStyle=multi&ShowNewButton=0&ShowPropButton=0&browse=0&objecttypes=1,2

留意参数中的值是multi,不是multiple。

var url = Xrm.Page.context.prependOrgName("/_controls/lookup/lookupinfo.aspx?"
+ "AllowFilterOff=0&DefaultType=1&DisableQuickFind=0&DisableViewPicker=1"
+ "&LookupStyle=multi&ShowNewButton=0&ShowPropButton=0&browse=0&objecttypes=1,2");
var result = window.showModalDialog(url);
if (result != null) {
    var value = new Array();
    for (var i = 0; i < result.items.length; i++) {
        value[i] = new Object();
        value[i].id = result.items[i].id;
        value[i].name = result.items[i].name;
        value[i].entityType = result.items[i].type == 1 ? "account" : "contact";
    }
    Xrm.Page.getAttribute("to").setValue(value);
}

 

 

相关文章