介绍Dynamics 365 Customer Engagement中的备用键(alternate key)
我是微软Dynamics 365 & Power Platform方面的工程师罗勇,也是2015年7月到2018年6月连续三年Dynamics CRM/Business Solutions方面的微软最有价值专家(Microsoft MVP),欢迎关注我的微信公众号 MSFTDynamics365erLuoYong ,回复350或者20190813可方便获取本文,同时可以在第一间得到我发布的最新博文信息,follow me!
从Dynamics CRM 2015 UR1开始新增了备用键,我做个简单介绍。以前Dynamics CRM实体的主键(primary key)都是Guid,现在新增了一种新的键,叫备用键。就是在实体中可以定义一个或者多个字段(属性)组成一个备用键,通过备用键可以唯一的确定实体中的一条记录,这个功能有点类似数据库中不能为空的唯一索引,通过备用键有如下三个好处:
- 不需要通过其他本来可以唯一标识一条记录的实体字段值来查找实体的主键
- 提升批量数据处理的吞吐量,特别是对于CRM Online来讲
- 可以不借助CRM实体主键来CRM数据进行编程交互
我们这里实际来定义一个备用键看看,官方参考文档是 Define alternate keys for an entity ,我这里实际操作下,步骤我都标注出来了。这里介绍的是通过CRM界面定义备用键的方法,通过编程也可以,我不做不介绍,可以自行参考 Use an alternate key to create a record:

当然定义有限制,定义为备用键的字段只能是单行文本字段 或者 十进制字段 或者整数字段,一个实体最多定义5个备用键,一个备用键包含的字段不能超过16个或者字段长度(不是字段值实际占用擦长度,而是字段定义的最多字符)加起来超过900个字节。
创建备用键以后系统会启动一个作业来创建数据库的唯一索引,在 设置 > 系统作业 中可以看到,类似如下:

成功以后我们可以看到数据库中也有唯一索引产生,我这里用 sp_help ly_TestBase 来查看下。

备用键用途不错,可以根据备用键的值来更新记录,为查找字段赋值,我这里演示下,先创建两条记录,代码根据备用键来更新他们,也创建了一个罗勇测试辅助实体,它有一个查找字段,查找的就是罗勇测试这个实体,现有的两条记录如下:

然后我用如下的代码来更新这两条记录:
using Microsoft.Xrm.Client;
using Microsoft.Xrm.Client.Services;
using Microsoft.Xrm.Sdk;
using System;
using System.ServiceModel; namespace LuoYongLab
{
class Program
{
static void Main(string[] args)
{
try
{
var orgService = new OrganizationService(new CrmConnection("CRM"));
var testEntity = new Entity("ly_test", "ly_alternatekey", "");
testEntity["ly_name"] = "罗勇测试记录一修改";
orgService.Update(testEntity);
//请记住键名使用的是备用键字段名,而不是备用键的名称
testEntity = new Entity("ly_test", new KeyAttributeCollection { { "ly_alternatekey", "" } });
testEntity["ly_name"] = "罗勇测试记录二修改";
orgService.Update(testEntity);
var testSubEntity = new Entity("ly_testsub");
testSubEntity["ly_name"] = "测试使用备用键来创建查找字段的值";
testSubEntity["ly_test"] = new EntityReference("ly_test", "ly_alternatekey", "");
orgService.Create(testSubEntity);
Console.WriteLine("程序运行完成");
Console.ReadKey();
}
catch (FaultException ex)
{
Console.WriteLine("程序出现异常:ex.Message=" + ex.Message);
Console.WriteLine("ex.StackTrace=" + ex.StackTrace);
Console.ReadKey();
}
}
}
}
结果是如我所愿的,更新记录和创建记录为查找字段赋值也成功。


如果使用重复的备用键插件记录呢?当然会报错,界面报错如下:

在Web APi中使用备用键可以参考这个博文:Using alternate keys with the WebApi ,简单来说就是使用备用键对应的列及其值来查找及更新字段。
如果备用键不是在实体创建后没有数据就建立的话,或者备用键从随实体从一个CRM环境迁移到另外一个环境,都有可能导致备用键对应的索引创建失败而导致备用键形同虚设。
所以最好是检查下备用创建是否成功,手工一个个检查?No!我这篇博文写了用代码做检查:使用代码检查Dynamics 365中的备用键状态
介绍Dynamics 365 Customer Engagement中的备用键(alternate key)的更多相关文章
- Dynamics 365 Customer Engagement中插件的调试
微软动态CRM专家罗勇 ,回复319或者20190319可方便获取本文,同时可以在第一间得到我发布的最新博文信息,follow me!我的网站是 www.luoyong.me . 本文主要根据官方的教 ...
- Dynamics 365 Customer Engagement中使用JavaScript和C#调用操作Action示例
微软动态CRM专家罗勇 ,回复334或者20190509可方便获取本文,同时可以在第一间得到我发布的最新博文信息,follow me! Action (操作)是流程的一种,可以在工作流中调用,可以使用 ...
- Dynamics 365 Customer Engagement 中对API的调整内容分享
当前版本中弃用了以下客户端 API 以重新组织 Xrm 客户端 API 对象模型,从而更好地满足以下需求:使用同一客户端脚本而不必基于上下文或基于运行这些脚本的客户端(Web 客户端或新的统一接口)来 ...
- 嵌入Canvas App到Dynamics 365 Customer Engagement(Model-Driven App)中,创造更多可能!
我是微软Dynamics 365 & Power Platform方面的工程师罗勇,也是2015年7月到2018年6月连续三年Dynamics CRM/Business Solutions方面 ...
- 配置基于服务器认证的Dynamics 365 Customer Engagement和SharePoint Online集成
我是微软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 ...
- Dynamics 365 Customer Engagement安装FAQ
微软动态CRM专家罗勇 ,回复310或者20190308可方便获取本文,同时可以在第一间得到我发布的最新博文信息,follow me!我的网站是 www.luoyong.me . 本文参考了包括但不限 ...
- Dynamics 365 Customer Engagement的标准导入不支持并行导入了吗?
我是微软Dynamics 365 & Power Platform方面的工程师罗勇,也是2015年7月到2018年6月连续三年Dynamics CRM/Business Solutions方面 ...
- Dynamics 365 Customer Engagement导入解决方案时出错:Microsoft.Crm.CrmException: Plug-in assembly does not contain the required types or assembly content cannot be updated.
我是微软Dynamics 365 & Power Platform方面的工程师罗勇,也是2015年7月到2018年6月连续三年Dynamics CRM/Business Solutions方面 ...
随机推荐
- Python提升“技术逼格”的6个方法
1 列表生成式和生成器 from numpy import randoma = random.random(10000) lst = []for i in a: lst.append(i * i) # ...
- Create a Report at Runtime 在运行时创建报表
In this lesson, you will learn how to create reports at runtime. A report showing a list of Tasks wi ...
- Server基本语句的用法
1.创建数据库 create database databaseName use databaseName go /* 转到指定数据库 */ 2.创建表 create table tableNa ...
- 成套销售交货组与BOM 546719 - FAQ: Delivery group and BOM in the delivery
交货组:将需要同时交互给客户的项目捆绑在一起,按行项目中最后交货日期做完交货组的计划行日期 1.如果销售订单标记为完全交货,则所有行项目都会分配到同一个交货组中 删除交货单是会给出警告 2.为母键行项 ...
- C lang:The smallest negative plus one equals the largest positive
- 页面中加入地图map
1.首先要有密钥AK ,可以自己注册获取或复制别人的 .搜索百度地图API (http://lbsyun.baidu.com/apiconsole/key) 2.地图示例 <head> & ...
- 从零开始搭建solo个人博客系统
目录 1.博客系统的搭建流程 2.服务器选购 2.1阿里云学生主机 2.2普通云主机 3.域名购买与备案(可选) 3.1域名购买 3.2域名服务器备案 3.3域名服务器解析 4.solo安装 4.1 ...
- 使用PowerShell实现服务器常用软件的无人值守安装
操作系统:windows server 2016 , windows server 2019 软件环境: 类型 名称 版本 系统功能 TelnetClien IIS 启用Asp.n ...
- python 基础学习笔记(4)--字典 和 集合
**字典:** - [ ] 列表可以存储大量的数据,但是如果数据量大的话,他的查询速度比较慢,因为列表只能顺序存储,数据与数据之间的关联性不强.所以便有了字典(dict)这种容器的数据类型,它是以{} ...
- Struts2.0
流程详解: 配置详解: constant (常用常量配置) 使用Struts2 框架 ,先要导入Struts2 需要的jar 包 , 通过配置中央控制器 以及web.xml 来实现 Str ...