我是微软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. 16.Django学习之文件上传和下载

    上传就这么六步! 一. settings配置文件中配置 MEDIA_URL = '/media/' MEDIA_ROOT = os.path.join(BASE_DIR, 'medias').repl ...

  2. JWT攻击手册:如何入侵你的Token

    JSON Web Token(JWT)对于渗透测试人员而言,可能是一个非常吸引人的攻击途径.因为它不仅可以让你伪造任意用户获得无限的访问权限,而且还可能进一步发现更多的安全漏洞,如信息泄露,越权访问, ...

  3. MyBatis三个查询方法_selectList_selectOne_selectMap

    mybatis-cfg.xml的配置: <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE co ...

  4. acm模板总结

    模板链接 字符串模板 KMP EXKMP Trie 可持久化Trie树+DFS序 01Trie Manacher 字符串哈希 2019上海网络赛G题 17 SA(后缀数组)  最大不重叠相似子串 求两 ...

  5. LightOJ1355 Game Of CS(green 博弈)

    Jolly and Emily are two bees studying in Computer Science. Unlike other bees they are fond of playin ...

  6. HDU1079 Calender Game

    Adam and Eve enter this year’s ACM International Collegiate Programming Contest. Last night, they pl ...

  7. 【关注图像采集视频传输】之CYUSB3014 EZ-USB FX3 Software Development Kit

    网址:http://www.cypress.com.与之前的High Speed FX2相比,新的产品叫Super Speed  FX3,沿用了之前的命名习惯.FX2芯片内嵌一个8051核,FX3则内 ...

  8. 静态页面开发JS页面跳转加密解密URL和参数

    页面跳转加密URL地址参数传递 window.location.href="foot.html?"+"good="+encodeURI(encodeURI(go ...

  9. [vue]初探vue生态核心插件Vuex

    为什么会有 Vuex 这个东西 ? 一个应用内部运行的机制,事件 -> 状态 -> UI,我们的前端常常会因为这两个过程而产生大量代码,从而变得难以维护. vue的声明式渲染,解决了从 状 ...

  10. 201871010119-帖佼佼《面向对象程序设计(java)》第十周学习总结

    博文正文开头格式:(2分) 项目 内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu-daizh/ 这个作业的要求在哪里 https://www.cnblogs.co ...