在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. 一份阅读量30万+免费且全面的C#/.NET面试宝典

    前言 C#/.NET/.NET Core相关技术常见面试题汇总,不仅仅为了面试而学习,更多的是查漏补缺.扩充知识面和大家共同学习进步.该知识库主要由自己平时学习实践总结.网上优秀文章资料收集(这一部分 ...

  2. SSAS部署失败方法总结

    最近在自学SSAS,从最简单的入手,却频频遇到问题,为了以后在学习过程中能更快的进行问题的定位,所以在此将遇到的问题以及解决方案进行记录 Q1:数据源"Adventure Works DW2 ...

  3. 基于微服务SDK框架与JavaAgent技术,低成本助力应用高效发布

    本文分享自<华为云DTSE>第五期开源专刊,作者:聂子雄 华为云高级工程师.李来 华为云高级工程师. 微服务是一种用于构建应用的架构方案,可使应用的各个部分既能独立工作,又能协同配合,微服 ...

  4. WPS Excel中配置下拉多选(VBA)

    网上找到两种方案,一种利用数据选择其他单元格,也就是在其他单元格建数据.需求是模板,不合适 这里我用的VBA,踩了挺多坑,详细说下 首先更新WPS为最新版,确保可用VBA和JSA 确定使用VBA还是J ...

  5. ubuntu环境安装街机风格的太空飞船游戏(2D飞机射击游戏)游戏——Chromium_B.S.U.

    相关: https://en.wikipedia.org/wiki/Chromium_B.S.U. https://manpages.ubuntu.com/manpages/focal/en/man6 ...

  6. 基于Java+SpringBoot+Mysql实现的快递柜寄取快递系统功能实现三

    一.前言介绍: 1.1 项目摘要 随着电子商务的迅猛发展和城市化进程的加快,快递业务量呈现出爆炸式增长的趋势.传统的快递寄取方式,如人工配送和定点领取,已经无法满足现代社会的快速.便捷需求.这些问题不 ...

  7. Abp源码分析之虚拟文件系统Volo.Abp.VirtualFileSystem

    前言 Volo.Abp.VirtualFileSystem 是ABP(ASP.NET Boilerplate)框架中的一个重要组件,它提供了一种抽象文件系统的方式,使得应用程序可以轻松地访问和管理文件 ...

  8. Socket编程与IO多路复用

    0.引言 本篇博客将从socket模型为起点,引入IO多路复用的学习. 1.Socket模型 1.1.Socket的诞生 Socket的诞生背景: Socket最早出现在20实际80年代的Unix操作 ...

  9. AbstractQueuedSynchronizer源码解析之ReentrantLock(二)

    上篇文章分析了ReentrantLock的lock,tryLock,unlock方法,继续分析剩下的方法,首先开始lockInterruptibly,先看其API说明:lockInterruptibl ...

  10. java——棋牌类游戏斗地主(webddz1.0)之二

    package com.ddz; import java.io.ObjectInputStream; import java.net.DatagramSocket; /**************** ...