Xrm.Internal.openDialog打开对话框自定义页面
在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;
实现效果: