前端
PostbirdAlertBox = { //=====================弹窗提示======================== /* * context:弹窗内容 * 通过全局对象 PostbirdAlertBox 调用相关方法,三个方法为: * PostbirdAlertBox.alert({}); 提示弹窗 * PostbirdAlertBox.confirm({}); 确定弹窗 * PostbirdAlertBox.prompt({});输入弹窗 */ containerClass: 'postbird-box-container active', box: null, // 用于标识增加的div textTemplate: { title: '提示信息', content: '提示内容', okBtn: '确认', cancelBtn: '取消', contentColor: '#000000', okBtnColor: '#0e90d2', promptTitle: '请输入内容', promptOkBtn: "确认" }, //绘制弹窗界面 getAlertTemplate: function () { /* PostbirdAlertBox.alert({ 'title': '提示标题', 'content': '提示内容主体', 'okBtn': '确认按钮', 'contentColor': 'red(提示内容颜色)', 'onConfirm': function () {//点击确认按钮执行回调方法 console.log("回调触发后隐藏提示框"); alert("回调触发后隐藏提示框"); } */ var temp = '<div class="postbird-box-dialog">' + '<div class="postbird-box-content">' + '<div class="postbird-box-header">' + '<span class="postbird-box-close-btn">×</span>' + '<span class="postbird-box-title">' + '<span >' + this.textTemplate.title + '</span>' + '</span>' + '</div>' + '<div class="postbird-box-text">' + '<span style="color:' + this.textTemplate.contentColor + ';">' + this.textTemplate.content + '</span>' + '</div>' + '<div class="postbird-box-footer">' + '<button class="btn-footer btn-block-footer btn-footer-ok" style="color:' + this.textTemplate.okBtnColor + ';">' + this.textTemplate.okBtn + '</button>' + '</div>' + '</div>' + '</div>'; return temp; }, getConfirmTemplate: function () { /* PostbirdAlertBox.confirm({ 'title': '提示标题', 'content': '离开本页面进行跳转', 'okBtn': '好的', 'contentColor': 'red', 'onConfirm': function () { alert("点击确认按钮触发事件"); }, 'onCancel': function () { alert("点击取消按钮触发事件"); } }); } */ return '<div class="postbird-box-container">' + '<div class="postbird-box-dialog">' + '<div class="postbird-box-content">' + '<div class="postbird-box-header">' + '<span class="postbird-box-close-btn">×</span>' + '<span class="postbird-box-title">' + '<span >' + this.textTemplate.title + '</span>' + '</span>' + '</div>' + '<div class="postbird-box-text">' + '<span style="color:' + this.textTemplate.contentColor + ';">' + this.textTemplate.content + '?</span>' + '</div>' + '<div class="postbird-box-footer">' + '<button class="btn-footer btn-left-footer btn-footer-cancel" style="color:' + this.textTemplate.cancelBtnColor + ';">' + this.textTemplate.cancelBtn + '</button>' + '<button class="btn-footer btn-right-footer btn-footer-ok" style="color:' + this.textTemplate.okBtnColor + ';">' + this.textTemplate.okBtn + '</button>' + '</div>' + '</div>' + '</div>' + '</div>'; }, getPromptTemplate: function () { /* PostbirdAlertBox.prompt({ 'title': '请输入姓名', 'okBtn': '提交', onConfirm: function (data) { console.log("输入框内容是:" + data); alert("点击确认按钮触发事件"); }, onCancel: function (data) { console.log("输入框内容是:" + data); alert("点击取消按钮触发事件"); }, }); */ return '<div class="postbird-box-container">' + '<div class="postbird-box-dialog">' + '<div class="postbird-box-content">' + '<div class="postbird-box-header">' + '<span class="postbird-box-close-btn">×</span>' + '<span class="postbird-box-title">' + '<span >' + this.textTemplate.title + '</span>' + '</span>' + '</div>' + '<div class="postbird-box-text">' + '<input type="text" class="postbird-prompt-input" autofocus="true" >' + '</div>' + '<div class="postbird-box-footer">' + '<button class="btn-footer btn-left-footer btn-footer-cancel" style="color:' + this.textTemplate.cancelBtnColor + ';">' + this.textTemplate.cancelBtn + '</button>' + '<button class="btn-footer btn-right-footer btn-footer-ok" style="color:' + this.textTemplate.okBtnColor + ';">' + this.textTemplate.okBtn + '</button>' + '</div>' + '</div>' + '</div>' + '</div>'; }, //执行回调方法 alert: function (opt) { this.textTemplate.title = opt.title || this.textTemplate.title; this.textTemplate.content = opt.content || this.textTemplate.content; this.textTemplate.okBtn = opt.okBtn || this.textTemplate.okBtn; this.textTemplate.okBtnColor = opt.okBtnColor || this.textTemplate.okBtnColor; this.textTemplate.contentColor = opt.contentColor || this.textTemplate.contentColor; var box = document.createElement("div"), _this = this; box.className = this.containerClass; box.innerHTML = this.getAlertTemplate(); this.box = box; document.body.appendChild(this.box); var btn = document.getElementsByClassName('btn-footer-ok'); btn[btn.length - 1].focus(); btn[btn.length - 1].onclick = function () { if (opt.onConfirm) { opt.onConfirm(); } _this.removeBox(); } }, confirm: function (opt) { this.textTemplate.title = opt.title || this.textTemplate.promptTitle; this.textTemplate.promptPlaceholder = opt.promptPlaceholder || this.textTemplate.promptPlaceholder; this.textTemplate.okBtn = opt.okBtn || this.textTemplate.promptOkBtn; this.textTemplate.okBtnColor = opt.okBtnColor || this.textTemplate.okBtnColor; this.textTemplate.cancelBtn = opt.cancelBtn || this.textTemplate.cancelBtn; this.textTemplate.cancelBtnColor = opt.cancelBtnColor || this.textTemplate.cancelBtnColor; this.textTemplate.content = opt.content || this.textTemplate.content; var box = document.createElement("div"), _this = this; this.box = box; box.className = this.containerClass; box.innerHTML = this.getConfirmTemplate(); document.body.appendChild(box); var okBtn = document.getElementsByClassName('btn-footer-ok'); okBtn[okBtn.length - 1].focus(); okBtn[okBtn.length - 1].onclick = function () { if (opt.onConfirm) { opt.onConfirm(); } _this.removeBox(); } var cancelBtn = document.getElementsByClassName('btn-footer-cancel'); cancelBtn[cancelBtn.length - 1].onclick = function () { if (opt.onCancel) { opt.onCancel(); } _this.removeBox(); } }, prompt: function (opt) { this.textTemplate.title = opt.title || this.textTemplate.title; this.textTemplate.content = opt.content || this.textTemplate.content; this.textTemplate.contentColor = opt.contentColor || this.textTemplate.contentColor; this.textTemplate.okBtn = opt.okBtn || this.textTemplate.okBtn; this.textTemplate.okBtnColor = opt.okBtnColor || this.textTemplate.okBtnColor; this.textTemplate.cancelBtn = opt.cancelBtn || this.textTemplate.cancelBtn; this.textTemplate.cancelBtnColor = opt.cancelBtnColor || this.textTemplate.cancelBtnColor; var box = document.createElement("div"), _this = this; box.className = this.containerClass; box.innerHTML = this.getPromptTemplate(); this.box = box; document.body.appendChild(box); var promptInput = document.getElementsByClassName('postbird-prompt-input'); promptInput = promptInput[promptInput.length - 1]; promptInput.focus(); var okBtn = document.getElementsByClassName('btn-footer-ok'); var inputData = promptInput.value;; okBtn[okBtn.length - 1].onclick = function () { if (opt.onConfirm) { opt.onConfirm(promptInput.value); } _this.removeBox(); } var cancelBtn = document.getElementsByClassName('btn-footer-cancel'); cancelBtn[cancelBtn.length - 1].onclick = function () { if (opt.onCancel) { opt.onCancel(promptInput.value); } _this.removeBox(); } }, //关闭弹窗 colse: function () { this.removeBox(); }, removeBox: function () { var box = document.getElementsByClassName(this.containerClass); document.body.removeChild(box[box.length - 1]); } } DynamicHelper={ //=================显示请求加载动画==================== ShowLoading:function(context) { //context:加载提示内容 //加载的图片路径可替换 var tit = context || "加载中,请稍候…"; var loadingHtml = "<div style=' 100%; height: 100%; position: fixed; z-index: 9999999; left: 0px; top: 0px; background: rgba(255,255,255,0.2);'><div style='position: absolute;left:50%;top:50%;transform: translate(-50%, -50%);background:white; text-align:center;'><img src='/_imgs/AdvFind/progress.gif' style='40px;height:40px;' /><br/><span style='margin-top:5px;'>" + tit + "</span></div></div>"; var loadingElement = document.createElement('div'); loadingElement.id = "myloading"; loadingElement.innerHTML = loadingHtml; window.parent.parent.document.body.appendChild(loadingElement); }, //=================加载请求动画关闭==================== CloseLoading:function() { var element = window.parent.parent.document.getElementById("myloading"); window.parent.parent.document.body.removeChild(element); }, //=================FetchXml数据查询==================== GetEntityDatas:function(url, fetchxml) { //url:请求地址,fetchxml:fetchXml语句 var req = new XMLHttpRequest(); var list = []; var erro = ""; req.open("GET", encodeURI(url + encodeURI(fetchxml), true), false); req.setRequestHeader("Accept", "application/json"); req.setRequestHeader("Content-Type", "application/json; charset=utf-8"); req.setRequestHeader("OData-MaxVersion", "4.0"); req.setRequestHeader("OData-Version", "4.0"); req.onreadystatechange = function () { if (this.readyState == 4) { req.onreadystatechange = null; if (this.status == 200) { if (JSON.parse(this.response).value.length > 0) list = JSON.parse(this.response).value; } else { erro = JSON.parse(this.response).error; } } }; req.send(); if (erro != "") { return erro; } else { return list; } }, //===================冒泡顺序排序====================== Order:function(arr) { //arr:冒泡数据集合 // 遍历数组,次数就是arr.length - 1 if (arr.length > 1) { for (var j = 0; j < arr.length - 1; j++) { for (var i = 0; i < arr.length - 1; i++) { var num_1 = arr[i]; var num_2 = arr[i + 1]; if (num_1 > num_2) { var temp = arr[i]; arr[i] = arr[i + 1]; arr[i + 1] = temp; } } } } return arr; }, //===================冒泡倒序排序====================== FlashbacksSort:function(arr) { //arr:冒泡数据集合 // 遍历数组,次数就是arr.length - 1 if (arr.length > 1) { for (var j = 0; j < arr.length - 1; j++) { for (var i = 0; i < arr.length - 1; i++) { var num_1 = arr[i]; var num_2 = arr[i + 1]; if (num_1 < num_2) { var temp = arr[i]; arr[i] = arr[i + 1]; arr[i + 1] = temp; } } } } return arr; }, //==================金额小写转大写===================== changeNumMoneyToChinese:function(money) { //money:十进制数据 var cnNums = new Array("零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖"); //汉字的数字 var cnIntRadice = new Array("", "拾", "佰", "仟"); //基本单位 var cnIntUnits = new Array("", "万", "亿", "兆"); //对应整数部分扩展单位 var cnDecUnits = new Array("角", "分", "毫", "厘"); //对应小数部分单位 var cnInteger = "整"; //整数金额时后面跟的字符 var cnIntLast = "元"; //整型完以后的单位 var maxNum = 999999999999999.9999; //最大处理的数字 var IntegerNum; //金额整数部分 var DecimalNum; //金额小数部分 var ChineseStr = ""; //输出的中文金额字符串 var parts; //分离金额后用的数组,预定义 var Symbol = "";//正负值标记 if (money == "") { return ""; } money = parseFloat(money); if (money >= maxNum) { alert('超出最大处理数字'); return ""; } if (money == 0) { ChineseStr = cnNums[0] + cnIntLast + cnInteger; return ChineseStr; } if (money < 0) { money = -money; Symbol = "负 "; } money = money.toString(); //转换为字符串 if (money.indexOf(".") == -1) { IntegerNum = money; DecimalNum = ''; } else { parts = money.split("."); IntegerNum = parts[0]; DecimalNum = parts[1].substr(0, 4); } if (parseInt(IntegerNum, 10) > 0) { //获取整型部分转换 var zeroCount = 0; var IntLen = IntegerNum.length; for (var i = 0; i < IntLen; i++) { var n = IntegerNum.substr(i, 1); var p = IntLen - i - 1; var q = p / 4; var m = p % 4; if (n == "0") { zeroCount++; } else { if (zeroCount > 0) { ChineseStr += cnNums[0]; } zeroCount = 0; //归零 ChineseStr += cnNums[parseInt(n)] + cnIntRadice[m]; } if (m == 0 && zeroCount < 4) { ChineseStr += cnIntUnits[q]; } } ChineseStr += cnIntLast; //整型部分处理完毕 } if (DecimalNum != '') { //小数部分 var decLen = DecimalNum.length; for (var i = 0; i < decLen; i++) { var n = DecimalNum.substr(i, 1); if (n != '0') { ChineseStr += cnNums[Number(n)] + cnDecUnits[i]; } } } if (ChineseStr == '') { ChineseStr += cnNums[0] + cnIntLast + cnInteger; } else if (DecimalNum == '') { ChineseStr += cnInteger; } ChineseStr = Symbol + ChineseStr; return ChineseStr; }, //========判断当前操作人员的安全角色是否符合=========== CallerPermissionsIsAre:function(list) { //list:安全角色名称集合 //获取当前操作者权限id集合 var RoleId = Xrm.Page.context.getUserRoles();//获取当前的权限id var bool = false; for (var i = 0; i < RoleId.length; i++) { //之所以用for是因为当前的用户可能不止一个角色,我们需要将他遍历出来。 var req = new XMLHttpRequest(); req.open("GET", "/api/data/v9.0/roles(" + RoleId[i] + ")?$select=name", false);//true是异步,false是同步 req.setRequestHeader("OData-MaxVersion", "4.0"); req.setRequestHeader("OData-Version", "4.0"); req.setRequestHeader("Accept", "application/json"); req.setRequestHeader("Content-Type", "application/json; charset=utf-8"); req.setRequestHeader("Prefer", "odata.include-annotations="*""); req.onreadystatechange = function () { if (this.readyState === 4) { req.onreadystatechange = null; if (this.status === 200) {//200执行成功且有返回值 var result = JSON.parse(this.response); var name = result["name"]; if (list.indexOf(name) != -1) { bool = true; } } else { var error = JSON.parse(this.response).error; Xrm.Utility.alertDialog(this.statusText + error.message + "错误"); } } }; req.send(); } return bool; }, //============获取指定用户的安全角色名称=============== GetUserRolesName:function (UserID) { //UserID:用户的Guid,带{} var ServerUrl = Xrm.Page.context.getClientUrl(); if (ServerUrl.match(//$/)) { ServerUrl = ServerUrl.substring(0, ServerUrl.length - 1); } var retrieveReq = new XMLHttpRequest(); retrieveReq.open("GET", ServerUrl + "/XRMServices/2011/OrganizationData.svc/SystemUserSet?$select=systemuserroles_association/Name&$expand=systemuserroles_association&$filter=SystemUserId eq guid'" + UserID + "'", false); retrieveReq.setRequestHeader("Accept", "application/json"); retrieveReq.setRequestHeader("Content-Type", "application/json;charset=utf-8"); retrieveReq.send(); var ODataResult = JSON.parse(retrieveReq.responseText).d; var rolesNameList = []; if (ODataResult != null && ODataResult.results.length == 1 && ODataResult.results[0].systemuserroles_association.results.length > 0) { var oDataRoles = ODataResult.results[0].systemuserroles_association.results; for (var i = 0; i < oDataRoles.length; i++) { rolesNameList.push(oDataRoles[i]["Name"]); } } return rolesNameList; }, //==================实体字段赋值======================= FileldsSetValue:function(list, obj) { //list:实体字段集合,obj需要赋值的信息 //循环添加信息,查找类型不予添加 for (var key in list) { var filedName = list[key]; //验证字段是否存在 if (Xrm.Page.getAttribute(list[key]) == null) { return list[key] + ":字段不存在!"; } //判断当前字段类型 var type = Xrm.Page.getControl(filedName).getControlType(); switch (type) { case "standard"://文本格式,日期格式,十进制格式,两个选项 var DateType = new Date(Xrm.Page.getAttribute(filedName).getValue()); if (DateType == "Invalid Date") { //文本格式 Xrm.Page.getAttribute(filedName).setValue(obj[filedName]); } else { //日期 Xrm.Page.getAttribute(filedName).setValue(new Date(obj[filedName])); } break; case "multiselectoptionset"://多选选项集 //获取选项集值 var multi_select_value = obj[filedName].split(','); //将文本类型的信息转化为数字类型进行数据赋值 var multiSelectList = []; for (var i in multi_select_value) { multiSelectList.push(multi_select_value[i]); } //信息赋值 Xrm.Page.getAttribute(filedName).setValue(multiSelectList); break; case "optionset"://单选选项集 Xrm.Page.getAttribute(filedName).setValue(obj[filedName]); break; default: } } }, //================实体字段隐藏显示===================== FileldsSetVisible:function(list, isHiddon) { //list:字段集合,isHiddon:是否隐藏 true隐藏 false显示 //判断是隐藏还是显示 if (isHiddon) { //隐藏 for (var i in list) { //验证字段是否存在 if (Xrm.Page.getAttribute(list[i]) == null) { return list[i] + ":字段不存在!"; } //隐藏字段 Xrm.Page.getControl(list[i]).setVisible(false) } } else { //显示 for (var i in list) { //验证字段是否存在 if (Xrm.Page.getAttribute(list[i]) == null) { return list[i] + ":字段不存在!"; } //显示字段 Xrm.Page.getControl(list[i]).setVisible(true) } } }, //===============-实体字段是否必填===================== FileldsSetRequiredLevel:function(list, isRequired) { //list:字段集合,isRequired:是否必填 true必填 false非必填 //判断是隐藏还是显示 if (isRequired) { //必填 for (var i in list) { //验证字段是否存在 if (Xrm.Page.getAttribute(list[i]) == null) { return list[i] + ":字段不存在!"; } //字段必填 Xrm.Page.getAttribute(list[i]).setRequiredLevel('required'); } } else { //非必填 for (var i in list) { //验证字段是否存在 if (Xrm.Page.getAttribute(list[i]) == null) { return list[i] + ":字段不存在!"; } //字段非必填 Xrm.Page.getAttribute(list[i]).setRequiredLevel('none'); } } }, //================实体字段是否锁定===================== FileldsSetDisabled:function(list, isLock) { //list:字段集合,isLock:是否锁定 true锁定 false非锁定 //判断是隐藏还是显示 if (isLock) { //锁定 for (var i in list) { //验证字段是否存在 if (Xrm.Page.getAttribute(list[i]) == null) { return list[i] + ":字段不存在!"; } //字段锁定 Xrm.Page.getControl(list[i]).setDisabled(true) } } else { //非锁定 for (var i in list) { //验证字段是否存在 if (Xrm.Page.getAttribute(list[i]) == null) { return list[i] + ":字段不存在!"; } //字段非锁定 Xrm.Page.getControl(list[i]).setDisabled(false) } } }, //=============子网格数据自定义筛选显示================ SubGridScreening:function (SubGridName, fetchXml) { //SubGridName:子网格名称;fetchXml:筛选的fetchXml语句 if (Xrm.Page.data.entity.getId()) { Xrm.Page.getControl(SubGridName).addOnLoad(function (){ //SubGridName:子网格名称;fetchXml:筛选的fetchXml语句 var grid = window.parent.document.getElementById(SubGridName).control; if (grid.SetParameter) { grid.SetParameter("fetchXml", fetchXml); grid.Refresh(); } else grid.get_innerControl().setParameter("fetchXml", fetchXML); }); } }, //======子网格增删改信息对应主窗体个别字段信息刷新===== SubGridloadRefreshPage: function (list,fetchXml,SubGridName) { //list:需要刷新页面字段集合,fetchXml:主窗体信息,SubGridName:子网格名称 //防止在未保存数据情况下进行操作 if (Xrm.Page.data.entity.getId()) { Xrm.Page.getControl(SubGridName).addOnLoad(function () { //获取当前实体复数形式 var entityName = Xrm.Page.data.entity.getEntitySetName(); var list = GetEntityDatas("/api/data/v9.0/" + entityName + "?fetchXml=", fetchXml); var obj = list[0]; //刷新页面数据 DynamicHelper.FileldsSetValue(list, obj); Xrm.Page.data.save(); }); } }, //==============判断当前字段是否被修改================= IsFileldsGetIsDirty: function (filelsdName) { //fileldName:字段名称集合 var list = [];//将修改字段信息放入集合之中 for (var i in filelsdName) { //默认该字段是未修改状态 var bool = false; //验证字段是否存在 if (Xrm.Page.getAttribute(filelsdName[i]) == null) { return filelsdName[i] + ":字段不存在!"; } //判断字段是否被修改(ture值被修改,false值未被修改) bool = Xrm.Page.getAttribute(filelsdName[i]).getIsDirty(); //当值被修改,将修改字段添加值list集合中 if (bool == true) list.push(filelsdName[i]); } //返回被修改字段信息 return list; }, //===============去除文本数据左右空格================== ClearTrim: function (Value) { //value:string类型数据 return Value.replace(/(^s*)|(s*$)/g, ""); }, //=========比较不同信息字段数据是否信息一致============ FieldInfoComparison: function (list, obj) { //list:字段信息,obj:比较信息 if (obj) { for (var key in list) { var filedName = list[key]; //验证字段是否存在 if (!Xrm.Page.getAttribute(list[key])) { return list[key] + ":字段不存在!"; } //当前数据字段 var targetFieldKey = list[key]; //上一次数据 var sourceVal = data[targetFieldKey]; if (!sourceVal) { sourceVal = null; } //当前数据 var targetVal = Xrm.Page.getAttribute(targetFieldKey).getValue(); //判断当前字段类型 var type = Xrm.Page.getControl(filedName).getControlType(); switch (type) { case "standard"://文本格式,日期格式,十进制格式,两个选项 var DateType = new Date(Xrm.Page.getAttribute(filedName).getValue()); if (DateType != "Invalid Date") { //日期格式 targetVal = new Date(targetVal).getTime(); sourceVal = new Date(sourceVal).getTime(); } break; case "multiselectoptionset"://多选选项集 if (targetVal) { var centerValue = ""; for (var i in targetVal) { centerValue += targetVal[i] + "," } targetVal = centerValue.replace(/(.*),/, '$1');; } else { targetVal = null; } break; case "lookup"://查找字段 if (targetVal) { targetVal = targetVal[0].id.replace("{", "").replace("}", "").toLowerCase(); } else { targetVal = ""; } sourceVal = data["_" + targetFieldKey + "_value"]; if (sourceVal) { sourceVal = sourceVal.toLowerCase(); } break; default: } if (!compare(sourceVal, targetVal)) { parent.$("#" + targetFieldKey + "_cl").css("cssText", "color:red!important"); } } } } }
这个是弹窗样式
/** * PostbirdAlertBox.js * - 原生javascript弹框插件 * Author: Postbird * License: MIT * Date: 2017-09-23 */ * { margin: 0; padding: 0; box-sizing: border-box; } .postbird-box-container { width: 100%; height: 100%; overflow: hidden; position: fixed; top: 0; left: 0; z-index: 9999; background-color: rgba(0, 0, 0, 0.2); display: block; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; } .postbird-box-container.active { display: block; } .postbird-box-content { width: 400px; max-width: 90%; min-height: 150px; background-color: #fff; border: solid 1px #dfdfdf; position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); /* margin-top: -100px; */ } .postbird-box-header { width: 100%; padding: 10px 15px; position: relative; font-size: 1.1em; letter-spacing: 2px; } .postbird-box-close-btn { cursor: pointer; font-weight: 700; color: #000; float: right; opacity: 0.5; font-size: 1.3em; margin-top: -3px; display: none; } .postbird-box-close-btn:hover { opacity: 1; } .postbird-box-text { width: 100%; padding: 0 10%; text-align: center; line-height: 40px; font-size: 20px; letter-spacing: 1px; } .postbird-box-footer { width: 100%; position: absolute; bottom: 0; padding: 0; margin: 0; display: flex; display: -webkit-flex; justify-content: space-around; border-top: solid 1px #dfdfdf; align-items: flex-end; } .postbird-box-footer .btn-footer { line-height: 44px; border: 0; cursor: pointer; background-color: #fff; color: #0e90d2; font-size: 1.1em; letter-spacing: 2px; transition: background-color .5s; -webkit-transition: background-color .5s; -o-transition: background-color .5s; -moz-transition: background-color .5s; outline: 0; } .postbird-box-footer .btn-footer:hover { background-color: #e5e5e5; } .postbird-box-footer .btn-block-footer { width: 100%; } .postbird-box-footer .btn-left-footer, .postbird-box-footer .btn-right-footer { position: relative; width: 100%; } .postbird-box-footer .btn-left-footer::after { content: ""; position: absolute; right: 0; top: 0; background-color: #e5e5e5; height: 100%; width: 1px; } .postbird-box-footer .btn-footer-cancel { color: #333333; } .postbird-prompt-input { width: 100%; font-size: 16px; border: 1px solid #cccccc; outline: none; padding: 5px 10px 5px 10px; }
后端
//=================================================== // Copyright @ 优文途新科技(上海)有限公司 2021 // 作者:杨海 // 时间:2021-07-31 // 说明:Dynamic工具类 //=================================================== using Microsoft.Crm.Sdk.Messages; using Microsoft.Xrm.Sdk; using Microsoft.Xrm.Sdk.Query; using System; using System.Collections.Generic; using System.IO; using System.Net; using System.Text; namespace DLL { public class DynamicHelper { /// <summary> /// 共享记录 /// </summary> /// <param name="service"></param> /// <param name="teamOrSystem">要共享给用户或者团队</param> /// <param name="target">要共享的记录</param> public void Grant(IOrganizationService service, EntityReference teamOrSystem, EntityReference target) { GrantAccessRequest grantAccessRequest = new GrantAccessRequest { PrincipalAccess = new PrincipalAccess { Principal = teamOrSystem, //共享的权限 读、写、共享、追加、追加到 AccessMask = AccessRights.ReadAccess | AccessRights.WriteAccess | AccessRights.ShareAccess | AccessRights.AppendAccess | AccessRights.AppendToAccess }, Target = target, }; service.Execute(grantAccessRequest); } /// <summary> /// 清除共享记录 /// </summary> /// <param name="service"></param> /// <param name="teamOrSystems">要取消共享给用户或者团队集合</param> /// <param name="target">取消共享记录</param> public void ClearGrant(IOrganizationService service, List<EntityReference> teamOrSystems, EntityReference target) { foreach (EntityReference item in teamOrSystems) { RevokeAccessRequest revokeAccessRequest = new RevokeAccessRequest { Revokee = item, Target = target, }; service.Execute(revokeAccessRequest); } } /// <summary> /// 验证用户对实体是否有读写权限 /// </summary> /// <param name="service"></param> /// <param name="entityER">验证实体的信息</param> /// <returns>需要在页面上配置【两个选项】类型,名为【new_test_right_control】的字段</returns> public bool PermissionsValidation(IOrganizationService service, EntityReference entityER) { //定义返回信息 bool mes = false; try { //验证用户查找权限 QueryExpression q = new QueryExpression(); q.EntityName = entityER.LogicalName; q.ColumnSet = new ColumnSet(true); q.Criteria.AddCondition(entityER.LogicalName+"id", ConditionOperator.Equal, entityER.Id); EntityCollection e2 = service.RetrieveMultiple(q);//获取实体信息 if (e2.Entities.Count == 0) { //没有查找权限返回false mes = false; } else { //查找权限存在,验证用户是否存在写权限,在页面配置一个两个选项字段,改变其值来测试用户是否存在数据的写权限 Entity e = e2.Entities[0]; //判断字段是否存在信息 if (!e.Attributes.Contains("new_test_right_control")) { e["new_test_right_control"] = false; } else { //判断页面上的值是true还是false,来改变其信息 if (Convert.ToBoolean(e.Attributes["new_test_right_control"])) e["new_test_right_control"] = false; else e["new_test_right_control"] = true; } service.Update(e); mes= true; } } catch (Exception) { mes = false; } return mes; } /// <summary> /// 后端GET方式调取数据 /// </summary> /// <param name="url">请求地址</param> /// <param name="headerValue">请求数据</param> /// <returns>"name:value,name1:value1"</returns> public string GetRequest(string url,string headerValue) { HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url); // 设置请求头信息 WebHeaderCollection headers = new WebHeaderCollection(); string[] data_1 = headerValue.Split(','); foreach (string item in data_1) { string[] data_2 = item.Split(':'); headers.Add(data_2[0],data_2[1]); } //数据传输 request.UserAgent = null; request.Headers = headers; request.Method = "GET"; // 返回请求数据 HttpWebResponse response = (HttpWebResponse)request.GetResponse(); // 返回的状态码 var httpStatusCode = (int)response.StatusCode; // 访问成功,返回数据 if (httpStatusCode == 200) { Stream myResponseStream = response.GetResponseStream(); //数据格式 StreamReader myStreamReader = new StreamReader(myResponseStream, Encoding.GetEncoding("utf-8")); //读取返回数据 string retString = myStreamReader.ReadToEnd(); myStreamReader.Close(); myResponseStream.Close(); return retString; } else { // todo 可以通过返回码判断处理 throw new Exception("未获取到返回值!"); } } /// <summary> /// 后端POST方式调取数据 /// </summary> /// <param name="postUrl">请求地址</param> /// <param name="paramData">请求数据</param> /// <param name="dataEncode">编码格式</param> /// <returns>var data=new { vin = car_vin, level = car_level, new_name = car_name };——》传输数据</returns> /// <returns>JsonConvert.SerializeObject(data):转化为——》字符串类型</returns> public string PostRequest(string postUrl, string paramData, Encoding dataEncode) { //定义返回信息 string ret = string.Empty; try { //将信息转化为base64格式数据 byte[] byteArray = dataEncode.GetBytes(paramData); //转化 //请求地址 HttpWebRequest webReq = (HttpWebRequest)WebRequest.Create(new Uri(postUrl)); //请求方式post webReq.Method = "POST"; //请求类型json类型 webReq.ContentType = "application/json"; //请求数据 webReq.ContentLength = byteArray.Length; //保存信息 Stream newStream = webReq.GetRequestStream(); //写入参数 newStream.Write(byteArray, 0, byteArray.Length); //关闭写入流 newStream.Close(); //请求数据 HttpWebResponse response = (HttpWebResponse)webReq.GetResponse(); //获取返回数据 StreamReader sr = new StreamReader(response.GetResponseStream(), Encoding.Default); ret = sr.ReadToEnd(); //关闭流,请求 sr.Close(); response.Close(); newStream.Close(); } catch (Exception e) { ret = e.Message; } return ret; } } }