我是微软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新引入的自动编号属性介绍的更多相关文章

  1. Dynamics 365 Customer Engagement V9 活动源功能报错的解决方法

    微软动态CRM专家罗勇 ,回复300或者20190120可方便获取本文,同时可以在第一间得到我发布的最新博文信息,follow me!我的网站是 www.luoyong.me . 安装好Dynamic ...

  2. 下载Dynamics 365 Customer Engagement 工具

    微软动态CRM专家罗勇 ,回复312或者20190311可方便获取本文,同时可以在第一间得到我发布的最新博文信息,follow me!我的网站是 www.luoyong.me . 从Dynamics ...

  3. Dynamics 365 Customer Engagement的标准导入不支持并行导入了吗?

    我是微软Dynamics 365 & Power Platform方面的工程师罗勇,也是2015年7月到2018年6月连续三年Dynamics CRM/Business Solutions方面 ...

  4. 利用Dynamics 365 Customer Engagement的标准导入功能导入附件。

    我是微软Dynamics 365 & Power Platform方面的工程师罗勇,也是2015年7月到2018年6月连续三年Dynamics CRM/Business Solutions方面 ...

  5. Dynamics 365 Customer Engagement中插件的调试

    微软动态CRM专家罗勇 ,回复319或者20190319可方便获取本文,同时可以在第一间得到我发布的最新博文信息,follow me!我的网站是 www.luoyong.me . 本文主要根据官方的教 ...

  6. 嵌入Canvas App到Dynamics 365 Customer Engagement(Model-Driven App)中,创造更多可能!

    我是微软Dynamics 365 & Power Platform方面的工程师罗勇,也是2015年7月到2018年6月连续三年Dynamics CRM/Business Solutions方面 ...

  7. 利用Azure虚拟机安装Dynamics 365 Customer Engagement之五:安装SQL Server

    我是微软Dynamics 365 & Power Platform方面的工程师罗勇,也是2015年7月到2018年6月连续三年Dynamics CRM/Business Solutions方面 ...

  8. 利用Azure虚拟机安装Dynamics 365 Customer Engagement之二:创建域控虚拟机

    我是微软Dynamics 365 & Power Platform方面的工程师罗勇,也是2015年7月到2018年6月连续三年Dynamics CRM/Business Solutions方面 ...

  9. 如何让用户登录Dynamics 365 Customer Engagement后自动登录到Unified Interface App?

    微软动态CRM专家罗勇 ,回复324或者20190422可方便获取本文,同时可以在第一间得到我发布的最新博文信息,follow me! Dynamics 365 Customer Engagement ...

随机推荐

  1. Seata AT 模式启动源码分析

    从上一篇文章「分布式事务中间件Seata的设计原理」讲了下 Seata AT 模式的一些设计原理,从中也知道了 AT 模式的三个角色(RM.TM.TC),接下来我会更新 Seata 源码分析系列文章. ...

  2. gsoap使用

    一. 安装gsoap 下载地址:http://sourceforge.net/projects/gsoap2/files/ 解压安装:./configure --prefix=/usr/local/g ...

  3. 记一次Elasticsearch OOM的优化过程——基于segments force merge 和 store type 转为 niofs

    首选,说明笔者的机器环境(不结合环境谈解决方案都是耍流氓): cpu 32核,内存128G,非固态硬盘: RAID0 (4T * 6),单节点,数据量在700G到1800G,索引15亿~21亿.敖丙大 ...

  4. react-native中TextInput在ios平台下不能输入中文

    目录 1. github上相关资料 2.需要满足defultValue和value属性 react-native 0.55.4版本,发现TextInput 在iOS平台上无法输入中文的问题. 1. g ...

  5. 配置文件—— .travis.yml

    .travis.yml 介绍 https://docs.travis-ci.com/user/getting-started/ 用途 yaml语法的写出来的配置文件,用来描述如何持续构建,支持各种语言 ...

  6. 四点之间最短路(spfa+优先队列+枚举优化)UESTC1955喜马拉雅山上的猴子

    喜马拉雅山上的猴子 Time Limit: 1000 MS     Memory Limit: 256 MB Submit Status 余周周告诉我喜马拉雅山上有猴子,他们知道点石成金的方法.我不信 ...

  7. 支付宝支付功能(使用支付宝sdk)

    1.准备参数        新建一个公共参数配置类NewAlipayconfig (可将参数存放到config配置文件中读取)          public class NewAlipayconfi ...

  8. python数据结构——单向链表

    链表 ( Linked List ) 定义:由许多相同数据类型的数据项按照特定顺序排列而成的线性表. 特点:各个数据在计算机中是随机存放且不连续. 优点:数据的增删改查都很方便,当有新的数据加入的时候 ...

  9. Orleans[NET Core 3.1] 学习笔记(三)( 3 )服务端配置

    服务端配置 Silo通过SiloHostBuilder和许多补充选项类以编程方式进行配置. Silo配置有几个关键方面: Orleans集群信息 集群提供程序(不知道咋翻译) Silo到Silo和Cl ...

  10. Es6中箭头函数与普通函数的区别

    Es6中箭头函数与普通函数的区别? 普通function的声明在变量提升中是最高的,箭头函数没有函数提升 箭头函数没有属于自己的this,arguments 箭头函数不能作为构造函数,不能被new,没 ...