注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

微软MVP罗勇的博客

微软MVP罗勇,www.luoyong.me

 
 
 

日志

 
 

Dynamics CRM定制子网格添加按钮实例之二:调试代码、打开Web资源及获取选择的记录  

2016-05-01 11:34:57|  分类: CRM客户端开发 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
关注本人微信和易信公众号: 微软动态CRM专家罗勇 ,回复222或者20160501可方便获取本文,同时可以在第一间得到我发布的最新的博文信息,follow me!我的网站是 www.luoyong.me 
以前我就注意到命令栏按钮调用的JScript类型的Web资源似乎无法在浏览器中进行调试,伤不起。后来看到这篇文章 CRM JS webresource best practice for ribbon Commands / Forms ,知道这个命令栏使用的JScript类型的Web资源是动态加载的,所以怪不得使用F12调试的时候找不到这个资源。根据这篇文章的提示,MSDN上的文章 Debugging custom JavaScript code in CRM using browser developer tools  介绍了Chrome浏览器可以调试动态代码,具体可以参考链接 https://developer.chrome.com/devtools/docs/javascript-debugging#breakpoints-dynamic-javascript ,但是这个链接需要翻墙才能看到内容,是不是心中瞬间又在祝福病魔早日战胜方校长呢?
我这里简单说下怎么调试吧。我这个命令栏按钮用到的JScript 类型web资源是 ly_/common/js/RibbonScript.js ,需要在这个文件的最后加上一行以 //# sourceURL= 的注释,后面你可以自己命名文件名,比如我这里就是加了一行如下:
//# sourceURL=LYRibbonScript.js
然后保存并发布这个文件,注意只能用Chrome浏览器进行这个动态代码调试。按F12打开Chrome的调试工具,如下,选择 Sources 这个Tab,然后点击左边栏右上角的图标,选择 Go to file 这个菜单项。
Dynamics CRM定制子网格添加按钮实例之二:调试代码及获取自网格选择的记录 - 罗勇 - 微软MVP罗勇的博客
 
输入我之前通过注释命名的文件名,这里是LYRibbonScript.js ,就可以找到了。
Dynamics CRM定制子网格添加按钮实例之二:调试代码及获取自网格选择的记录 - 罗勇 - 微软MVP罗勇的博客
 
打开这个文件,我可以设置一个断点,如下:
Dynamics CRM定制子网格添加按钮实例之二:调试代码及获取自网格选择的记录 - 罗勇 - 微软MVP罗勇的博客
 
然后再去点击子网格的加号图标出发代码运行,看它是否会在设定的断点处停留,答案是会,效果如下,可以看到击中断点了:
Dynamics CRM定制子网格添加按钮实例之二:调试代码及获取自网格选择的记录 - 罗勇 - 微软MVP罗勇的博客
 
可以调试,以后就方便多了。
我们来看看效果,点击 加号 图标后,告诉我在子网格中选择了3条记录,正确:

Dynamics CRM定制子网格添加按钮实例之二:调试代码及获取自网格选择的记录 - 罗勇 - 微软MVP罗勇的博客
 
 然后看弹出三条记录的内容,正确(我这里会弹出三次,我只截图一个):
Dynamics CRM定制子网格添加按钮实例之二:调试代码及获取自网格选择的记录 - 罗勇 - 微软MVP罗勇的博客
 
最后也帮我打开了我指定的 Web资源 (url是:https://demo.luoyong.me/%7B635976680220000079%7D/WebResources/ly_/common/page/DisplayNotes.htm?id=%7b77770FCF-21D6-E511-80ED-000D3A8020EE%7d&typename=ly_test ),我需要的参数也正确传递过去了:
Dynamics CRM定制子网格添加按钮实例之二:调试代码及获取自网格选择的记录 - 罗勇 - 微软MVP罗勇的博客
 
我这里用到的JavaScript代码如下:

function openHtmlWebResource(SelectedEntityTypeName, PrimaryEntityTypeCode, FirstPrimaryItemId, PrimaryControl, SelectedControl, WebResourceName, PrimaryEntityTypeName, SelectedEntityTypeName) {
    Xrm.Utility.alertDialog('SelectedEntityTypeName=' + SelectedEntityTypeName + ";PrimaryEntityTypeCode=" + PrimaryEntityTypeCode + ";FirstPrimaryItemId=" + FirstPrimaryItemId + ";WebResourceName=" + WebResourceName + ";PrimaryEntityTypeName=" + PrimaryEntityTypeName + ";SelectedEntityTypeName=" + SelectedEntityTypeName);
    var selectedEntityReferences = [];
    var selectedRows = SelectedControl.getGrid().getSelectedRows();
    selectedRows.forEach(function (selectedRow, i) {
        selectedEntityReferences.push(selectedRow.getData().getEntity().getEntityReference());
    });
    Xrm.Utility.alertDialog("你在子网格中选中了" + selectedEntityReferences.length + "条记录!");
    for (var i = 0; i < selectedEntityReferences.length; i++) {
        Xrm.Utility.alertDialog("选择的第" + (i+1) + "条记录:entityType=" + selectedEntityReferences[i].entityType + ";id=" + selectedEntityReferences[i].id + ";name=" + selectedEntityReferences[i].name);
    }
    Xrm.Utility.openWebResource(WebResourceName + "?typename=" + PrimaryEntityTypeName + "&id=" + FirstPrimaryItemId, null, 800, 600)
}
//# sourceURL=LYRibbonScript.js

值得注意的是,通过Xrm.Utility.openWebResource 打开Web资源的时候,通过?后面直接url中传递的参数有限,仅限于 Pass parameters to HTML web resources 章节说明的参数,主要包括typename, type, id, orgname, userlcid, orglcid, data, formid, entrypoint 等等,如果传递了其他参数会怎么样呢?我这里稍微更改下代码来传递第三个不是前面指定的函数,代码如下:
Xrm.Utility.openWebResource(WebResourceName + "?typename=" + PrimaryEntityTypeName + "&id=" + FirstPrimaryItemId + "&otherpara=nihao", null, 800, 600)

这样打开的时候会报错,如下:
Dynamics CRM定制子网格添加按钮实例之二:调试代码及获取自网格选择的记录 - 罗勇 - 微软MVP罗勇的博客

那有办法传递不在列表中的参数吗?当然有,这里提供SDK中提到的方法,代码如下:

    var customParameters = encodeURIComponent("first=First Value&second=Second Value&third=Third Value");
    Xrm.Utility.openWebResource(WebResourceName + "?typename=" + PrimaryEntityTypeName + "&id=" + FirstPrimaryItemId, customParameters, 800, 600);

然后就不会报错了,打开的URL变成了:
https://demo.luoyong.me/%7B635976700960000079%7D/WebResources/ly_/common/page/DisplayNotes.htm?Data=first%3dFirst%20Value%26second%3dSecond%20Value%26third%3dThird%20Value&id=%7b77770FCF-21D6-E511-80ED-000D3A8020EE%7d&typename=ly_test
可以看到自定义的参数被放入了 Data 这个QueryString中了,当然自己可以用代码解析出来参数名称和参数值,怎么解析出来可以参考SDK的Sample: Pass multiple values to a web resource through the data parameter 章节,我这里不赘述了。
素格格新疆特产店--做新疆特产的搬运工。
本店由博主的新疆老婆开设,搬运各种上等的新疆特产,是自用,送礼,年货,孝敬长辈特别是(岳)父母的首选!
Dynamics CRM中的地址知多D? - 罗勇 - 微软MVP-罗勇的博客

  评论这张
 
阅读(516)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017