Dynamics 365 CRM 弹窗 打开自定义页面 Xrm.Navigation.navigateTo Open Web Resource
2024-09-08 15:41:17
在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去美化下
最新文章
- 使用IIS发布WCF服务
- 使用C#调用windows API入门
- Android编程: MVC模式、应用的生命周期
- jquery查找父元素、子元素(个人经验总结)
- 慎用StringEscapeUtils.escapeHtml步骤
- map和lambda
- Highcharts属性介绍
- Delphi 中的常用事件
- c#控件攻略宝典之ListBox控件
- 【Android Studio安装部署系列】二十二、Android studio自动生成set、get方法
- 后端开发者的Vue学习之路(一)
- Bar 柱状图
- qml: 自定义滚动条;
- node中glob模块
- Java学习笔记(十七):构造器和setter方法选用
- 【Oracle】ORA 01810 格式代码出现两次-转
- 一句命令激活windows/office
- 打开struts-config.xml 报错 解决方法Could not open the editor
- R语言低级绘图函数-abline
- IOS-快速集成检查更新
热门文章
- Vulnhub:recon靶机
- 安装pytorch报错 ERROR: Could not install packages due to an OSError: [Errno 28] No space left on device
- win10bug可导致系统崩溃
- WPF 布局控件
- 关于java业务限流组件的应用推广
- 070_GET https://login.salesforce.com/17181/logo180.png 404 (Not Found)
- 【Linux】常用
- memoの关于Qt的一些用法记录
- Flink Table API &; SQL 自定义Redis Sink 代码实现
- csdn 复制