在Dynamics CRM平台中使用自定义页面拓展功能实现有多种方式,比如嵌套iframe,比如直接打开一个新页面,再就是打开对话框了,对话框里为自定义页面。
调用方式很简单,先把自定义页面上传好后,直接使用Xrm.Internal.openDialog函数即可。
 
JS打开对话框方法一(注意参数要encodeURIComponent转码):
 1 //URL为上传好后的web资源地址
2 let URL = Xrm.Page.context.getClientUrl() + "/WebResources/xxxx_xxxxhtml"
3 let encodeParams = "entityName=" + entityName + "&entityId=" + entityId + "&business=" + business + "&bub=" + bub + "&kdFactoryId=" + kdFactoryId + "&productionFactoryId=" + productionFactoryId + "&packageFactoryId=" + packageFactoryId
4 let ReturnMsg = null
5 let DialogOption = new Xrm.DialogOptions
6 DialogOption.width = 1000
7 DialogOption.height = 700
8 Xrm.Internal.openDialog(URL + "?Data=" + encodeURIComponent(encodeParams),
9 DialogOption,
10 null, null,
11 function (returnValue) {
12 console.log(returnValue)
13 ReturnMsg = "{" + returnValue + "}";
14 if (Xrm.Page.getControl("kd_claimdetail")) {
15 Xrm.Page.getControl("kd_claimdetail").refresh();
16 Xrm.Page.data.refresh();
17 }
18 })
对应自定义页面获取取参数:
 1 let entityId = getParam("entityId")
2 let entityName = getParam("entityName")
3 let business = getParam("business")
4
5 /**
6 * 从URL中读取参数Data下的指定参数的值,如URL为【http://test.com?Data=name%3D%E6%82%A8%E5%A5%BD】
7 * getParam('name')读取的为Data的值通过解码后,读取其中name参数的值
8 */
9 function getParam(param) {
10 let htmlParameters = parseParams()
11 return htmlParameters[param]
12 }
13 // 解析URL传入的参数
14 function parseParams() {
15 var objData = {};
16 var vals = decodeURIComponent(getParameter("Data")).split("&");
17 for (var i = 0; i < vals.length; i++) {
18 var pr = vals[i].replace(/\+/g, " ").split("=");
19 if (pr.length != 2) {
20 continue;
21 }
22 objData[pr[0]] = pr[1];
23 }
24 return objData;
25 }
26 //获得参数信息
27 function getParameter(param) {
28 var query = window.location.search;
29 var iLen = param.length;
30 var iStart = query.indexOf(param);
31 if (iStart == -1)
32 return "";
33 iStart += iLen + 1;
34 var iEnd = query.indexOf("&", iStart);
35 if (iEnd == -1)
36 return query.substring(iStart);
37 return query.substring(iStart, iEnd);
38 }

JS打开对话框方法二:

上面是把参数拼接到url中,需要单独在页面中封装解析参数的方法,实际上可以url直接接web资源地址,然后使用对话框参数。
1 let params = { 'id': EntityId, 'type': EntityName, 'status': status, 'roles': roles }
2 var DialogOption = new Xrm.DialogOptions
3 DialogOption.width = 750;
4 DialogOption.height = 550;
5 Xrm.Internal.openDialog("/WebResources/xxxx_xxxhtml", DialogOption, params, null, function (returnValue) {
6 console.log('调用成功 返回值:' + returnValue); //这里就可以接收到弹窗上面传过来的数组
7 });
在自定页面中可以直接获取参数:
1 //获取url参数
2 var id = window.getDialogArguments().id;
3 var type = window.getDialogArguments().type;
4 var str_status = window.getDialogArguments().status;
5 var roles = window.getDialogArguments().roles;

实现效果:

Xrm.Internal.openDialog打开对话框自定义页面的更多相关文章

  1. 运用javascript的成员访问特性来实现通用版的兼容所有浏览器的打开对话框功能

    打开网页对话框,一般有三种方法:window.open.window.showModalDialog.window.showModelessDialog,每一种都有它的优点与不足.第一种方法:wind ...

  2. worldpress自定义页面

    一:wordpress制作自定义页面的方法 有时候我们需要制作一些个性化的页面,而不是直接用wordpress的page页面模板.这时候我们就需要自已写一个页面出来.下面介绍一下制作流程: 第一步:制 ...

  3. H5打开app指定页面(H5+app项目)

    H5+app项目,在HBuilderX中设置 详情参考官方 https://ask.dcloud.net.cn/article/64 给h5+app设置scheme值,作用:在其它app和h5页面中启 ...

  4. 帝国CMS自定义页面的添加与目录式链接的处理

    需求: 1.将某一本地前端自定义页面模板,导入到帝国系统,应用到网站 2.将导入的页面在站点中打开为目录式链接 www.abc.com/softlink/ 环境: 1.windows服务器 2.帝国C ...

  5. JS事件 加载事件(onload)注意:1. 加载页面时,触发onload事件,事件写在<body>标签内。 2. 此节的加载页面,可理解为打开一个新页面时。

    加载事件(onload) 事件会在页面加载完成后,立即发生,同时执行被调用的程序. 注意:1. 加载页面时,触发onload事件,事件写在<body>标签内. 2. 此节的加载页面,可理解 ...

  6. SharePoint开发 - 自定义页面(错误页、登出页)

    博客地址 http://blog.csdn.net/foxdave 本文叙述如何自定义SharePoint的固有页面,比较简单,用一句话说就是"做个页面,写一句代码." 创建Sha ...

  7. js showModalDialog打开新的页面给原页面传值问题

    a.html中打开一个新页面b.html,b.html页面给a.html中的input传一个值并将value赋给input框. a.html: <html>  <head>   ...

  8. .net开发---自定义页面打印区域

    自定义页面打印区域 有3种办法: 办法一:将不需要打印的部位隐藏掉 Examp: <%-- (1)使用css样式,定义一个.noprint的class,将不打印的内容放入这个class内. -- ...

  9. unity3d打开对话框

    最近一直在忙项目,没时间更新博客,这两天趁空封装windows下的打开对话框,支持多选.其他系统可以用ngui或者ugui封装一个. 这里就不上封装的源码了提供dll供小伙伴们使用,如果有需要源码请请 ...

  10. Android系统对话框——自定义关闭

    Android系统对话框--自定义关闭 Dialog是我们在项目中经常用到的,5.x以后的Dialog也很好看,很安卓风,Android也给我们提供了新的包,低版本可以显示一样的效果.我们在使用的导入 ...

随机推荐

  1. awk优化钉钉通知测试报告

    一.背景 在之前的博客 Go服务自动触发单元测试覆盖率 中钉钉通知的效果实现如下图: 最近RD提出对本次和上次覆盖率的比对需求,并把比对结果也显示在钉钉通知上. 二.实现思路 要实现数据比对,就需要对 ...

  2. php接收二进制流

    /** 二进制流生成文件 * $_POST 无法解释二进制流,需要用到 $GLOBALS['HTTP_RAW_POST_DATA'] 或 php://input * $GLOBALS['HTTP_RA ...

  3. RAC:无训练持续扩展,基于检索的目标检测器 | ECCV'24

    来源:晓飞的算法工程笔记 公众号,转载请注明出处 论文: Online Learning via Memory: Retrieval-Augmented Detector Adaptation 论文地 ...

  4. 使用 C# 入门深度学习:Pytorch 基础

    教程名称:使用 C# 入门深度学习 作者:痴者工良 地址: https://torch.whuanle.cn 1.2 Pytorch 基础 本文内容介绍 Pytorcn 的基础 API,主要是数组的创 ...

  5. P4629 SHOI2015 聚变反应炉

    P4629 SHOI2015 聚变反应炉 树上背包+树形dp. 算是套娃题吗? 思路 看到数据考虑数据分治. part1 贪心 \(c_i\leq 1\) 对于这种情况,我们考虑贪心的点亮. 手玩几组 ...

  6. golang之常用第三方包汇总

    汇总golang日常开发中常用的库包 [web] gin:  github.com/gin-gonic/gin [MySQL] gorm: [Redis] go-redis:  github.com/ ...

  7. Tornado框架之应用安全(四)

    知识点 Cookie操作 安全Cookie 跨站请求伪造原理 XSRF保护 模板 请求体 HTTP报文头 用户验证 authenticated装饰器 get_current_user()方法 logi ...

  8. .NET周刊【11月第4期 2024-11-24】

    国内文章 C# 入门深度学习:万字长文讲解微积分和梯度下降 https://www.cnblogs.com/whuanle/p/18551532 这篇文章主要介绍了使用 C# 进行深度学习的方法,特别 ...

  9. Java 设计模式——观察者模式:从优衣库不使用新疆棉事件看系统的动态响应

    背景事件:近日,优衣库宣布不再使用新疆棉花,这一举措引发了广泛的社会讨论.消费者的反应和舆论的压力,让优衣库的决策迅速影响了市场和品牌形象.类似的,许多系统也面临着需要根据外部事件或状态的变化,做出即 ...

  10. Python 潮流周刊#80:Django 项目性能调优(摘要)

    本周刊由 Python猫 出品,精心筛选国内外的 250+ 信息源,为你挑选最值得分享的文章.教程.开源项目.软件工具.播客和视频.热门话题等内容.愿景:帮助所有读者精进 Python 技术,并增长职 ...