在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. [Windows] 屏幕截图工具Snipaste 开发过程更轻松

    前言 老大:你去把用户登录代码写完. 老大:你把这周的周报发一下 老大:你把生产的数据清理一下. 结果.... 今天刚把登录代码写完,下班,明天就处理别的事情去了!!! 之后我就... 直接F1 截屏 ...

  2. Redis工具可视化工具Redis Desktop Manager(附安装包)

    前言 redis工具,我相信每个开发都需要,如果每次查都去client执行指令,我怕查完之后,老大就要发版咯.我之前一直用的Redis可视化工具RedisDesktopManager,总觉得差点意思, ...

  3. spool参数详解

    SQL*PLUS维护系统变量,也称SET变量,利用它可为SQL*PLUS交互建立一个特殊的环境,如:设置NUMBER数据的显示宽度;设置每页的行数;设置列的宽度等.可用SET命令改变这些系统变量,也可 ...

  4. 9-5 额外的string操作

    9.5.1 构造string的其他方法:略 9.5.2 改变string的其他方法:略 9.5.3 string搜索操作:略 9.5.4 compare函数:略 9.5.5 数值转换 int main ...

  5. 20.Kubernetes可视化界面kubesphere

    Kubernetes可视化界面kubesphere 前言 Kubernetes也提供了默认的dashboard页面,但是功能不是很强大,这里就不使用了 而是采用Kubesphere大桶全部的devop ...

  6. JDBC性能小贴

    本文由 ImportNew - 刘志军 翻译自 javarevisited.如需转载本文,请先参见文章末尾处的转载要求. 本文收集了一些用于提升JDBC性能的方法.Java应用或者JavaEE Web ...

  7. 【原创】linux实时操作系统xenomai看门狗(watchdog)机制及作用介绍

    版权声明:本文为本文为博主原创文章,转载请注明出处 https://www.cnblogs.com/wsg1100.如有错误,欢迎指正. 目录 一.前言 PREEMPT-RT(RT Throttlin ...

  8. Redis集群搭建-多服务器

    条件 l 基于redis5.0.*版本进行集群的搭建 l 集群要求至少六个节点,即每个主节点配置1个从节点,本集群是使用了3个主节点并每个下面挂一个从节点,三个主节点分布在3台服务器上 l 集群配置信 ...

  9. F650A光猫的一些命令(一)

    查看有 / # uname -a Linux F650A 4.1.25 #12 SMP Tue Aug 15 21:57:30 CST 2017 armv7l GNU/Linux / # cat /p ...

  10. Git学习【1】 -- 基本常用命令

    目录 1.设置用户名 2.设置用户邮箱 3.初始化文件夹 4.如何修改文件 5.如何删除文件 6. 远程github操作 7. 设置密码 安装完Git,如何玩呢?下面是一些初始化和初级的常用命令. 新 ...