在CRM中经常需要打开自定义的HTML界面,而且打开这个界面的时候需要模态窗体,阻止用户填写除了弹窗之外的东西,只能先填写窗体的内容;

这个时候很多人喜欢选择第三方的library去实现模态窗体,但是个人不建议使用第三方library的,毕竟,一旦系统升级,很可能功能就失效了,而且样式跟系统不一定匹配;特别是Online版本,一旦更新,功能失效可就麻烦大了!

现在已经可以使用官方支持的做法来实现

使用简短的几行代码即可,以下示例还包括了向窗体传递参数以及如何接收返回参数,觉得有用就点赞吧

var options = primaryControl.getAttribute("new_selectattribute").getOptions();
var params = JSON.stringify({ 'type': 'Reason', 'options': options });
var pageInput = { pageType: "webresource", webresourceName: "new_custom.html", data: params };
var navigationOptions = {
    target: 2, // 窗体实现模式,1表示内联窗体,完全遮挡当前页面. 2表示模态窗体,在当前页面之上弹出窗体
    width: 400, // value specified in pixel
    height: 400, // value specified in pixel
    position: 1, // 窗体位置,1表示中间位置,2表示侧边栏显示
    title: primaryControl.getControl('new_attribute').getLabel() // 获取窗体上的字段标签
};
Xrm.Navigation.navigateTo(pageInput, navigationOptions).then(
    function success(result) {
        // Run code on success  
        // 接收返回值
        if (result != null && result.returnValue != null) {
            console.log(result.returnValue));  
        }
    },
    function error() {
        // Handle errors while failed to open web resource
        console.log('error')
    }
);

  

中间弹窗效果

侧边栏显示效果

自定义WebResource代码示例

<!DOCTYPE html>
<html>
<!--
文件说明:
创建人:
创建时间:
-->
<head>
<meta charset="utf-8" />
<title></title>
</head> <body onload="onLoad()">
<select id="selectOptions"></select>
<button id='btnConfirm' onclick="onClose()"></button>
<script type="text/javascript">
// 获取查询参数
function getUrlParameters() {
var queryString = location.search.substring(1);
var params = {};
var queryStringParts = queryString.split("&");
for (var i = 0; i < queryStringParts.length; i++) {
var pieces = queryStringParts[i].split("=");
params[pieces[0].toLowerCase()] = pieces.length === 1 ? null : decodeURIComponent(pieces[1]);
}
return params;
}
// 获取DOM
function getEl(id) {
return document.getElementById(id);
}
// 确认按钮事件
function onClose() {
var selectControl = document.getElementById("selectOptions");
var selectedValue = selectControl.options[selectControl.selectedIndex].value;
window.returnValue = selectedValue;
window.close();
}
// 页面加载
function onLoad() {
console.log('select reason page on load...');
// 获取传递过来的参数
var params = getUrlParameters();
if (params != null) {
var parameters = JSON.parse(params.data);
appendOptions(parameters.options);
// 确认按钮翻译,sys是自己写的库
sys.getLocalizedMsg('confirm').then(function (res) {
getEl('btnConfirm').innerHTML = res;
});
}
} // 为下拉框增加选项
function appendOptions(options) {
var selectControl = document.getElementById("selectOptions");
options.forEach(element => {
var option = document.createElement('option')
option.value = element.value;
option.innerHTML = element.text;
selectControl.appendChild(option);
});
}
</script>
</body>
</html>

  

关于样式,你可以使用第三方库,如bootstrap去美化下

最新文章

  1. 使用IIS发布WCF服务
  2. 使用C#调用windows API入门
  3. Android编程: MVC模式、应用的生命周期
  4. jquery查找父元素、子元素(个人经验总结)
  5. 慎用StringEscapeUtils.escapeHtml步骤
  6. map和lambda
  7. Highcharts属性介绍
  8. Delphi 中的常用事件
  9. c#控件攻略宝典之ListBox控件
  10. 【Android Studio安装部署系列】二十二、Android studio自动生成set、get方法
  11. 后端开发者的Vue学习之路(一)
  12. Bar 柱状图
  13. qml: 自定义滚动条;
  14. node中glob模块
  15. Java学习笔记(十七):构造器和setter方法选用
  16. 【Oracle】ORA 01810 格式代码出现两次-转
  17. 一句命令激活windows/office
  18. 打开struts-config.xml 报错 解决方法Could not open the editor
  19. R语言低级绘图函数-abline
  20. IOS-快速集成检查更新

热门文章

  1. Vulnhub:recon靶机
  2. 安装pytorch报错 ERROR: Could not install packages due to an OSError: [Errno 28] No space left on device
  3. win10bug可导致系统崩溃
  4. WPF 布局控件
  5. 关于java业务限流组件的应用推广
  6. 070_GET https://login.salesforce.com/17181/logo180.png 404 (Not Found)
  7. 【Linux】常用
  8. memoの关于Qt的一些用法记录
  9. Flink Table API &amp; SQL 自定义Redis Sink 代码实现
  10. csdn 复制