关注本人微信和易信公众号: 微软动态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 这个菜单项。
 
输入我之前通过注释命名的文件名,这里是LYRibbonScript.js ,就可以找到了。
 
打开这个文件,我可以设置一个断点,如下:
 
然后再去点击子网格的加号图标出发代码运行,看它是否会在设定的断点处停留,答案是会,效果如下,可以看到击中断点了:
 
可以调试,以后就方便多了。
我们来看看效果,点击 加号 图标后,告诉我在子网格中选择了3条记录,正确:
 

然后看弹出三条记录的内容,正确(我这里会弹出三次,我只截图一个):

最后也帮我打开了我指定的 Web资源 (url是:https://demo.luoyong.me/%7B635976680220000079%7D/WebResources/ly_/common/page/DisplayNotes.htm?id=%7b77770FCF-21D6-E511-80ED-000D3A8020EE%7d&typename=ly_test ),我需要的参数也正确传递过去了:
我这里用到的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)
 
这样打开的时候会报错,如下:
 
那有办法传递不在列表中的参数吗?当然有,这里提供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定制子网格添加按钮实例之二:调试代码、打开Web资源及获取选择的记录的更多相关文章

  1. Dynamics CRM定制子网格添加按钮实例之一

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

  2. Microsoft Dynamics CRM 4.0 如何添加自定义按钮

    一.通过导入导出ISV.Config(ISV配置),具体如下图: 先设置—>打开导出自定义项—>选择ISV配置—>选择导出所选自定义项 点击确定 保存到桌面,解压,用VS打开cust ...

  3. Dynamics CRM使用JS隐藏自定义按钮

    在我们平时客制化开发的时候会经常遇到要制作自定义按钮的情况,而这个自定义按钮的功能又经常会有一些隐藏逻辑需要实现,所以每次通过获取控件查找这个按钮再隐藏比较麻烦,而且偶尔会出现代码没起作用的效果.下面 ...

  4. HTML5+JS 《五子飞》游戏实现(二)路线分析和资源准备

    上一节 里沃特与我们分享了<五子飞>的下棋规则,可能有些伙伴看得不清楚,像我们码农还是看到代码比较靠谱.下面就把可以走棋的路线跟大家说一下. 假设从左上角开始,以0开始编号,往右数(没看第 ...

  5. 在标准实体特殊消息上注册插件及Dynamics CRM 2015中计算字段的使用

    关注本人微信和易信公众号: 微软动态CRM专家罗勇 ,回复157或者20151005可方便获取本文,同时可以在第一时间得到我发布的最新的博文信息,follow me! 前面的 插件系列博客教程 讲述了 ...

  6. Dynamics CRM 4.0升级Dynamics CRM 2013后全局Ribbon的修改

    最近在为一个客户在Dynamics CRM 4.0到Dynamics CRM 2013的升级,升级之后发现原来在Dynamics CRM 4.0中定义的全局Ribbon按钮像牛皮癣一样,在每个实体页面 ...

  7. 通过store为toolbar添加按钮

    目的是实现导航条toolbar可以动态加载按钮. ExtJS的版本是4.0. 实现方案有两个.方案一:添加render事件监听,在监听事件处理函数中使用Ext.Ajax获取按钮信息,实现动态添加按钮. ...

  8. iOS 9应用开发教程之使用代码添加按钮美化按钮

    iOS 9应用开发教程之使用代码添加按钮美化按钮 丰富的用户界面 在iOS9中提供了很多的控件以及视图来丰富用户界面,对于这些视图以及控件我们在上一章中做了简单的介绍.本章我们将详细讲解这些视图. i ...

  9. Dynamics CRM记录页面上隐藏子网格“+”标识

    前段时间微软发布了Dynamics 365,这是Dynamics产品的又一次大的变动,期待新的版本能够更好的满足客户的需求,同时提供更多的可定制化的内容. 近期做Dynamics CRM项目遇到很多审 ...

随机推荐

  1. C#函数的递归

    using System; namespace ConsoleApp3 { class Program { static void Main(string[] args) { ); Console.W ...

  2. Astyle 一键格式化项目代码

    代码格式化差异问题: 一个团队有多个开发,因开发习惯不同,开发时少添加了空格.换行等. 格式化代码时,一般会将整个文档格式化,代码提交时会发现未知的修改项. Astyle格式化工具 官网下载地址:Ar ...

  3. QT防止程序多次启动

    Question:最近在linux下作的一个项目,设置了crontab自启动,但是经常出现启动多个进程的原因,针对这种情况,我做了如下处理: QLockFile *lockFile = new QLo ...

  4. tomcat7控制台日志中文乱码

    windows电脑 idea启动Tomcat调试程序时,Tomcat控制台输出里,中文是乱码. 解决办法: 修改Tomcat/bin/catalina.bat文件: set JAVA_OPTS= 的内 ...

  5. 转战物联网·基础篇07-深入理解MQTT协议之控制报文(数据包)格式

      在MQTT协议中,一个控制报文(数据包)的结构按照前后顺序分如下三部分: 结构名 中文名 解释说明 Fixed header 固定报头 报文的最开始部分,所有报文都包含这个部分 Variable ...

  6. Linux下使用 github+hexo 搭建个人博客02-hexo部署到Github Pages

    之前的这篇文章<Linux下使用 github+hexo 搭建个人博客01-hexo搭建>,相信大家都知道怎么搭建 hexo ,怎么切换主题,并且完成了一篇博文的创建,以及 MarkDow ...

  7. bay——安装_Oracle 12C-单实例-Centos7 -DG.txt

    用户和密码: root/bayaimbayaim/064286BAIbayoracle/oracleSID:orclsys/oraclesystem/oraclempay/mpaydx/dx ---- ...

  8. linux 性能调优工具参考 (linux performance tools)

    之前发现几张图对于linux使用者有着较强的参考意义,下面对其进行简单备忘: # linux 静态信息查看工具 # linux 性能测试工具 benchmark # linux 性能观测工具 # li ...

  9. 高通平台:USB充电【转】

    USB Battery Charging V1.2 Specification 定义了USB充电器的类型或者叫做充电源. 1. 支持的充电器类型 1.1 Standard Downstream Por ...

  10. docker 存储卷 Volumes

    一,docker容器面临的困境: 容器运行中产生的数据,是放到容器栈的最顶层,当容器停止并被删除后,这些数据就被删除了. docker采用COW(写时复制)策略,导致性能低下.比如有个mysql容器, ...