MS CRM 2011 剖析Form与Dialog的URL

简介:

Microsoft Dynamics CRM本质上只是一个ASP.Net程序,当然它是一个很厉害的,高手们开发出来的程序。基本上每一个窗口或者对话框都有固定的URL,这些窗口或对话框的特性也是由URL中的query string来决定。也就是说,如果你知道了某个窗口或对话框的URL是什么,你就可以在扩展CRM时,用JScript来打开这个窗口或对话框了。

 

下面举一个简单的例子来看如何获得一个窗口的URL,以及这个URL能给我们什么信息。打开一个客户:

image

你可以点击上面的复制链接来获取URL,你也可以Ctrl + N,然后从地址栏复制URL。

复制出来的URL为:

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

从这个URL我们可以得到的信息为etc(entity type code)为1,也就是客户的object type code值为1。我们现在打开的这个表单的Form ID为0d6c2857-e8ca-435a-a830-a335ab2139fb。该客户的ID为7b8650EB9D-AAC5-E111-AD1C-00155DA83B2B%7d。如果你要打开一个联系人的窗口,你只需要知道这个联系人的ID,联系人的object type code,以及要用哪一个Form打开(Form ID)。其实在SDK中有一个章节已经把这个部分讲的很明白了,大家可以参见SDK中“Open Forms, Views, and Dialogs with a URL”这一章节。

 

对于一个窗口或者表单(Form),我们已经知道如何查看它的URL了,但如果是一个对话框(Dialog),我们如何查看它的URL呢?比如点击客户上的Parent Company查找按钮,就可以弹出一个对话框来。通常在这个对话框中,你是看不到URL的。

image

我在之前的文章向大家介绍过使用F12 Developer Tools来对CRM进行剖析,这一文章中,我再向大家介绍另一个利器微笑,来帮助我们获得对话框的URL,它就是Fiddler。当然Fiddler绝不只是用来获取URL的,它的功能非常强大,有兴趣的同学可以参看http://www.fiddler2.com/fiddler2/。首先启动Fiddler。

image

然后点击Parent Company查找按钮,Fiddler可以显示出你访问过的URL是什么。

image

选择带有lookup的那一行记录,复制URL,复制结果为:

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

 

由于上面的URL是被encode过的,所以不是很容易读,我推荐大家再使用一个URL Decoder/Encoder的网站来帮助你对URL解码。

image

解码后的URL为:

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

 

我们来看URL里的参数:

(1)objecttypes:这个参数后边的数值表示可以查找的entity type code,这里的1表示是客户,如果我们还想查找联系人,可以将这里改为objecttypes=1,2。 (2)DefaultType:默认的查找entity

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

(4)DisableQuickFind: 对应Search栏

(5)DisableViewPicker: 不允许改变View

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

(7) ShowNewButton:显示New按钮

(8)ShowPropButton:显示Properties按钮

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

image

我们来构建一个URL,实现以下功能:

(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

构建好的URL应为:

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

将这个URL直接复制到IE中打开,看到结果为:

image

在JS中,如何利用这个URL来打开对话框呢?我们可以使用window.showModalDialog这个方法。举一个例子,我们为一个联系人选择parent customer。

image

在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,我们要选择收件人:

image

我们可以使用以下的URL及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);
}
复制代码


 







本文转自JF Zhu博客园博客,原文链接: http://www.cnblogs.com/jfzhu/archive/2012/10/12/2721888.html   ,如需转载请自行联系原作者





相关文章
|
4月前
|
JSON Java Go
【GoGin】(2)数据解析和绑定:结构体分析,包括JSON解析、form解析、URL解析,区分绑定的Bind方法
bind或bindXXX函数(后文中我们统一都叫bind函数)的作用就是将,以方便后续业务逻辑的处理。
345 3
|
机器学习/深度学习 BI 数据格式
|
5月前
|
人工智能 物联网 BI
诊断设备企业必看!垂直医疗行业的CRM软件有哪些?
2025年,诊断设备企业竞争核心转向精细化服务。传统CRM难堪重任,垂直医疗CRM成破局关键。本文深度解析八骏医疗云等五大解决方案,揭秘如何通过设备全周期管理、代理商管控、智能耗材预警与私有化部署,构建以客户为中心的服务体系,抢占增长制高点。
365 124
|
8月前
|
缓存 监控 安全
通义大模型与现有企业系统集成实战《CRM案例分析与安全最佳实践》
本文档详细介绍了基于通义大模型的CRM系统集成架构设计与优化实践。涵盖混合部署架构演进(新增向量缓存、双通道同步)、性能基准测试对比、客户意图分析模块、商机预测系统等核心功能实现。同时,深入探讨了安全防护体系、三级缓存架构、请求批处理优化及故障处理机制,并展示了实时客户画像生成和动态提示词工程。通过实施,显著提升客服响应速度(425%)、商机识别准确率(37%)及客户满意度(15%)。最后,规划了技术演进路线图,从单点集成迈向自主优化阶段,推动业务效率与价值持续增长。
386 8
|
9月前
|
机器学习/深度学习 人工智能 BI
500人规模的企业CRM必备的5大关键能力
文章介绍了适配大中型企业CRM系统的五大关键功能:精细化销售管理、全渠道营销、PaaS定制化、AI应用及生态连接能力。以纷享销客为例,详细解析了其在销售线索管理、行为与流程精细化管理、全渠道获客、灵活定制开发、AI赋能及生态协同等方面的优势。文章指出,在数字经济浪潮下,CRM已成为企业数字化转型的核心工具,通过重构客户运营体系,助力企业提升效率、优化决策并实现可持续增长。