Dynamics 365 Customer Engagement V9.X新引入的自动编号属性介绍
我是微软Dynamics 365 & Power Platform方面的工程师罗勇,也是2015年7月到2018年6月连续三年Dynamics CRM/Business Solutions方面的微软最有价值专家(Microsoft MVP),欢迎关注我的微信公众号 MSFTDynamics365erLuoYong ,回复352或者20190816可方便获取本文,同时可以在第一间得到我发布的最新博文信息,follow me!
以前系统为部分实体的部分字段做了自动编号,比如案例的编号等,其他的若要实现自动编号则需要开发写插件等,需要开发人员介入。从Dynamics 365 Customer Engagement V9.X版本为单行文本类型字段开始引入自动编号属性,目前尚无界面可以设置单行文本字段的改属性,当然能通过编程方式修改,但是我相信在很短时间内会实现界面可配置,目前PowerApps的Model-Driven App已经实现了界面可以配置。
本文主要根据官方文档:Create auto-number attributes 而写,具体以官方文档为准,本人的文章系自行实验撰写分享,读者请辩之。
此种字段是单行文本类型字段(不能更改为其他格式),增加了自动编号格式(AutoNumberFormat)这个属性,这个属性可以组合
- 固定文本;
- 随机字符,据我观察应该是大写英文字母和数字,最多6位随机字符,示例:{RANDSTRING:3}
- 流水号,流水号的唯一性由SQL Server负责,可以在定义时候指定最小位数,产生的流水号不足最小位数时前面自动补齐0,比如你指定了5位流水号,默认情况下流水号从1000开始,那么这里显示的第一个流水号便是 01000 ,示例:{SEQNUM:10}。因为流水号长度指定的最小长度,比如说5位,那么当流水号到达100000时会出现什么情况?情况就是自动编号的长度增加1位,不会被截断,也就是显示100000。
- 还有当前UTC时间格式化后的文本,示例:{DATETIMEUTC:yyyyMMddhhmmss}
还可以将现有的文本字段的属性改成自动编号以便应用自动编号。自动编号属性字段在表单上是只读的,保存后自动产生自动编号。
特性说了那么多,我这里用代码创建一个,因为官方推荐Web API,所以我就用Web API来创建,这个代码是为逻辑名称为ly_workorder的实体增加一个自动编号属性的单行文本字段ly_autonumber。
打开Dynamics 365 Customer Engagement,按F12打开开发者面板,在Console这个Tab中输入类似如下的代码。
var clientUrl = Xrm.Utility.getGlobalContext().getClientUrl();
var req = new XMLHttpRequest()
req.open("POST", encodeURI(clientUrl + "/api/data/v9.0/EntityDefinitions(LogicalName='ly_workorder')/Attributes"), true);
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 /* complete */) {
req.onreadystatechange = null;
if (this.status == 204) {
var alertStrings = { text: "操作成功!" };
var alertOptions = { height: 300, width: 400 };
Xrm.Navigation.openAlertDialog(alertStrings, alertOptions);
}
else {
Xrm.Navigation.openErrorDialog({ message: this.responseText });
}
}
};
var requestMsg = JSON.parse('{'+
'"AttributeType": "String",'+
'"AttributeTypeName": {'+
'"Value": "StringType"'+
'},' +
'"Description": {' +
'"@odata.type": "Microsoft.Dynamics.CRM.Label",' +
'"LocalizedLabels": [' +
'{' +
'"@odata.type": "Microsoft.Dynamics.CRM.LocalizedLabel",' +
'"Label": "编号",' +
'"LanguageCode": 2052' +
'}' +
']' +
'},' +
'"DisplayName": {' +
'"@odata.type": "Microsoft.Dynamics.CRM.Label",' +
'"LocalizedLabels": [' +
'{' +
'"@odata.type": "Microsoft.Dynamics.CRM.LocalizedLabel",' +
'"Label": "自动编号",' +
'"LanguageCode": 2052' +
'}' +
']' +
'},' +
'"RequiredLevel": {' +
'"Value": "None",' +
'"CanBeChanged": true,' +
'"ManagedPropertyLogicalName": "canmodifyrequirementlevelsettings"' +
'},' +
'"SchemaName": "ly_autonumber",' +
'"AutoNumberFormat": "WID-{SEQNUM:5}-{RANDSTRING:6}-{DATETIMEUTC:yyyyMMddhhmmss}",' +
'"@odata.type": "Microsoft.Dynamics.CRM.StringAttributeMetadata",' +
'"FormatName": {' +
'"Value": "Text"' +
'},' +
'"MaxLength": 100' +
'}');
req.send(JSON.stringify(requestMsg));
我这里执行截图如下:
执行成功后创建的字段如下:
此字段在界面上是只读的:
新建记录后保存后会给改字段赋值,我这里的一些示例如下:
当然,如果想这个字段流水号又从某个值开始可以设置的,设置示例代码如下:
var clientUrl = Xrm.Utility.getGlobalContext().getClientUrl();
var req = new XMLHttpRequest()
req.open("POST", encodeURI(clientUrl + "/api/data/v9.0/SetAutoNumberSeed"), true);
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 /* complete */) {
req.onreadystatechange = null;
if (this.status == 204) {
var alertStrings = { text: "操作成功!" };
var alertOptions = { height: 300, width: 400 };
Xrm.Navigation.openAlertDialog(alertStrings, alertOptions);
}
else {
Xrm.Navigation.openErrorDialog({ message: this.responseText });
}
}
};
var requestMsg = {};
requestMsg.EntityName = "ly_workorder";
requestMsg.AttributeName = "ly_autonumber";
requestMsg.Value = 1;
req.send(JSON.stringify(requestMsg));
可以看到自动编号中的流水号又从1开始了,值得一提的是,更改流水号的起始号码不会随着解决方案而迁移到新的环境,所以新的环境也需要设置下。
这样可以设置的话,可以自己部署一个定时程序,让每个周期,比如每月,每年从1开始设置流水号。
注意不会保证流水号会连号,中间可能空号,从目前来看,若是并发不大,生成的流水号是连号的。
如果要查看呢?可以参考 Query metadata using the Web API ,我这里直接列出方法:
https://demo.luoyong.me/api/data/v9.0/EntityDefinitions(LogicalName='ly_workorder')?$select=LogicalName&$expand=Attributes($select=AutoNumberFormat;$filter=LogicalName eq 'ly_autonumber')
最后提一下,PowerApps的解决方案编辑界面已经支持可视化设置此属性了,截图如下,就不用代码了,更方便,为它点赞。
最后提一下,实体的主属性,一般是前缀加上_name,也支持设置为自动编号格式了(以前只能为文本格式),这样更加方便了。
Dynamics 365 Customer Engagement V9.X新引入的自动编号属性介绍的更多相关文章
- Dynamics 365 Customer Engagement V9 活动源功能报错的解决方法
微软动态CRM专家罗勇 ,回复300或者20190120可方便获取本文,同时可以在第一间得到我发布的最新博文信息,follow me!我的网站是 www.luoyong.me . 安装好Dynamic ...
- 下载Dynamics 365 Customer Engagement 工具
微软动态CRM专家罗勇 ,回复312或者20190311可方便获取本文,同时可以在第一间得到我发布的最新博文信息,follow me!我的网站是 www.luoyong.me . 从Dynamics ...
- Dynamics 365 Customer Engagement的标准导入不支持并行导入了吗?
我是微软Dynamics 365 & Power Platform方面的工程师罗勇,也是2015年7月到2018年6月连续三年Dynamics CRM/Business Solutions方面 ...
- 利用Dynamics 365 Customer Engagement的标准导入功能导入附件。
我是微软Dynamics 365 & Power Platform方面的工程师罗勇,也是2015年7月到2018年6月连续三年Dynamics CRM/Business Solutions方面 ...
- Dynamics 365 Customer Engagement中插件的调试
微软动态CRM专家罗勇 ,回复319或者20190319可方便获取本文,同时可以在第一间得到我发布的最新博文信息,follow me!我的网站是 www.luoyong.me . 本文主要根据官方的教 ...
- 嵌入Canvas App到Dynamics 365 Customer Engagement(Model-Driven App)中,创造更多可能!
我是微软Dynamics 365 & Power Platform方面的工程师罗勇,也是2015年7月到2018年6月连续三年Dynamics CRM/Business Solutions方面 ...
- 利用Azure虚拟机安装Dynamics 365 Customer Engagement之五:安装SQL Server
我是微软Dynamics 365 & Power Platform方面的工程师罗勇,也是2015年7月到2018年6月连续三年Dynamics CRM/Business Solutions方面 ...
- 利用Azure虚拟机安装Dynamics 365 Customer Engagement之二:创建域控虚拟机
我是微软Dynamics 365 & Power Platform方面的工程师罗勇,也是2015年7月到2018年6月连续三年Dynamics CRM/Business Solutions方面 ...
- 如何让用户登录Dynamics 365 Customer Engagement后自动登录到Unified Interface App?
微软动态CRM专家罗勇 ,回复324或者20190422可方便获取本文,同时可以在第一间得到我发布的最新博文信息,follow me! Dynamics 365 Customer Engagement ...
随机推荐
- ASP.NET Core 选项模式源码学习Options IOptions(二)
前言 上一篇文章介绍IOptions的注册,本章我们继续往下看 IOptions IOptions是一个接口里面只有一个Values属性,该接口通过OptionsManager实现 public in ...
- mac+chrome 最常用快捷键
12个mac快捷键 命令 含义 command+空格 (先摁command再摁空格) Spotlight搜索 crt+command+F 最大化和关闭最大化切换 Command+H 隐藏当前窗口 Co ...
- python geohash算法逆地址编码原理初探
1.geohash有什么用途呢?这几天刚好有个测试任务是关于设备信息位置处理的,里面提及到geohash:抱着测试的警觉性,打算研读一下这个geohash到底是什么?Geohash 是一种地理编码系统 ...
- Oracle - 给rac创建单实例dg,并做主从切换
一.概述 本文将介绍如何给rac搭建单节点的dg,以及如何对其进行角色转换.预先具备的知识(rac搭建,单实例-单实例dg搭建) 二.实验环境介绍 主库rac(已安装rac,并已有数据库orcl)ra ...
- Python爬虫--喜马拉雅三国音频爬取
前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理.作者:Botreechan 1.进入地址我们可以发现,页面有着非常整齐的目 ...
- Python爬虫爬取异步加载的数据
前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理.作者:努力努力再努力 爬取qq音乐歌手数据接口数据 https://y.qq ...
- postman高级应用
目录 提取接口返回值 设置动态参数 流程控制 调试 定义公共函数 外部数据文件 提取接口返回值 1.获取响应的header值 var Content-Type=postman.getResponseH ...
- js中promise解决callback回调地狱以及使用async+await异步处理的方法
1.callback回调地狱 function ajax(fn) { setTimeout(()=> { console.log('你好') fn() }, 1000) } ajax(() =& ...
- Spring Bean Scope (作用域)
singleton: 单例模式,针对每个spring容器,只有一个该类的实例被管理,每次调用此实例都是同一个对象被返回,所以适用于无状态bean.默认情况下,singleton作为spring容器中b ...
- 什么是RMI?
RMI(Remote Method Invocation,远程方法调用)是用Java在JDK1.2中实现的,它大大增强了Java开发分布式应用的能力.Java作为一种风靡一时的网络开发语言,其巨大的威 ...