当前位置:网站首页>Dynamics 365 开发协作最佳实践思考
Dynamics 365 开发协作最佳实践思考
2022-07-06 01:35:00 【zcy_wxy】
一、前台开发
1、首先要考虑把常用代码独立成一个公共js,然后在需要用到的时候引入。这样会更便于维护。
2、做请求聚合。如果一个页面中发请求次数太多,且不为异步,就会导致前台卡顿明显。所以为了减少请求次数,做请求聚合,把几次请求整合成一次请求,获取页面需要的数据。
常用的比如说:
锁定和释放窗体属性
/**
* 锁定或解锁属性
* @param {any} attributeName
*/
lockOrUnlockControlByAttributeName: function (attributeName,lock) {
let controls = Xrm.Page.getAttribute(attributeName).controls.getAll();
if (controls) {
for (con of controls) {
con.setDisabled(lock);
}
}
}
获取选项集字段名称
/*
* summary:前端获取选项集字段的名称
* author:
* createTime:
*/
getOptionName:function (context, attributeName, value) {
let val = value;
if (val == null || val == undefined) {
val = context.getAttribute(attributeName).getValue();
}
let attrArray = context.getControl(attributeName).getOptions().filter(t => t.value == val);
if (attrArray.length > 0) {
return attrArray[0].text;
}
return "";
}
判断用户是否为负责人
/*
* summary:判断用户是否为负责人
* author:
* createTime:
* returns:
*/
function currentUserIsOwner() {
let owner = Xrm.Page.getAttribute("ownerid");
if (owner) {
let ownerid = owner.getValue()[0].id;
return Xrm.Page.context.getUserId() == ownerid;
}
return false;
}
判断用户是否包含指定角色
/*
* summary:判断用户是否拥有某些角色
* author:
* createTime:
* returns:
*/
function currentUserContainRoles(roleNames) {
var roleNameArray = roleNames.split(',');
let userRoles = Xrm.Utility.getGlobalContext().userSettings.roles.getAll();
if (roleNameArray.length > 1) {
let nameSet = new Set();
for (let role of userRoles) {
nameSet.add(role.name);
}
for (let roleName of roleNameArray) {
if (nameSet.has(roleName)) {
return true;
}
}
return false;
}
for (var role of userRoles) {
if (role.name == roleNameArray[0]) {
return true;
}
}
return false;
}
等等。
二、插件开发
1、最好是一个实体建一个插件项目,这样既可以避免多人开发时的冲突,也能在解决方案发布时避免多发或者漏发内容。或者根据模块划分插件项目,一个插件项目中只包含单个模块所需的实体。
2、公共模块也最好提取出来,放在共享项目中。按dao、service、controller的分层概念来说,dao层和service层的公共的内容,都放在共享项目中。
边栏推荐
- National intangible cultural heritage inheritor HD Wang's shadow digital collection of "Four Beauties" made an amazing debut!
- [technology development -28]: overview of information and communication network, new technology forms, high-quality development of information and communication industry
- 一图看懂!为什么学校教了你Coding但还是不会的原因...
- Kotlin basics 1
- SPIR-V初窺
- Leetcode sword finger offer 59 - ii Maximum value of queue
- [Yu Yue education] Liaoning Vocational College of Architecture Web server application development reference
- [the most complete in the whole network] |mysql explain full interpretation
- ThreeDPoseTracker项目解析
- Redis-字符串类型
猜你喜欢
Superfluid_ HQ hacked analysis
Redis-列表
Folio. Ink is a free, fast and easy-to-use image sharing tool
Blue Bridge Cup embedded stm32g431 - the real topic and code of the eighth provincial competition
【Flask】官方教程(Tutorial)-part1:项目布局、应用程序设置、定义和访问数据库
leetcode刷题_反转字符串中的元音字母
Test de vulnérabilité de téléchargement de fichiers basé sur dvwa
Mathematical modeling learning from scratch (2): Tools
Who knows how to modify the data type accuracy of the columns in the database table of Damon
[solved] how to generate a beautiful static document description page
随机推荐
Leetcode skimming questions_ Invert vowels in a string
VMware Tools installation error: unable to automatically install vsock driver
ORA-00030
Mathematical modeling learning from scratch (2): Tools
Kotlin basics 1
Paging of a scratch (page turning processing)
基于DVWA的文件上传漏洞测试
【已解决】如何生成漂亮的静态文档说明页
File upload vulnerability test based on DVWA
Basic process and testing idea of interface automation
Opinions on softmax function
internship:项目代码所涉及陌生注解及其作用
Test de vulnérabilité de téléchargement de fichiers basé sur dvwa
SPIR-V初窥
【Flask】静态文件与模板渲染
Alibaba canal usage details (pit draining version)_ MySQL and ES data synchronization
ClickOnce 不支持请求执行级别“requireAdministrator”
How to upgrade kubernetes in place
[flask] official tutorial -part1: project layout, application settings, definition and database access
干货!通过软硬件协同设计加速稀疏神经网络