我是微软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)的更多相关文章

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

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

  2. Dynamics 365 Customer Engagement中使用JavaScript和C#调用操作Action示例

    微软动态CRM专家罗勇 ,回复334或者20190509可方便获取本文,同时可以在第一间得到我发布的最新博文信息,follow me! Action (操作)是流程的一种,可以在工作流中调用,可以使用 ...

  3. Dynamics 365 Customer Engagement 中对API的调整内容分享

    当前版本中弃用了以下客户端 API 以重新组织 Xrm 客户端 API 对象模型,从而更好地满足以下需求:使用同一客户端脚本而不必基于上下文或基于运行这些脚本的客户端(Web 客户端或新的统一接口)来 ...

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

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

  5. 配置基于服务器认证的Dynamics 365 Customer Engagement和SharePoint Online集成

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

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

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

  7. Dynamics 365 Customer Engagement安装FAQ

    微软动态CRM专家罗勇 ,回复310或者20190308可方便获取本文,同时可以在第一间得到我发布的最新博文信息,follow me!我的网站是 www.luoyong.me . 本文参考了包括但不限 ...

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

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

  9. 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方面 ...

随机推荐

  1. IOS弓箭传说的插件开发

    1.导出ipa进行解压后,定位到执行程序archero,ida加载后,发现很多都是sub_xxx开头的. 2.搜索资料后,原来Unity编写的程序,可以使用Il2CppDumper进行符号表还原. 下 ...

  2. 达梦7入门技术总结--DCA级别

    说明: 1)该实验所有过程均是本人亲自敲命令完成,所有代码运行正确 2)安装过程使用的是suse11 sp3操作系统,后续的实验过程换成了麒麟中标,因此部分路径可能存在差异 3)安装过程使用了命令行安 ...

  3. spingboot 2.1.3 与 elasticsearch7 兼容问题

    pom 加入 elasticsearch7  的依赖, <dependency> <groupId>org.elasticsearch</groupId> < ...

  4. java bean 属性验证框架 valid

    项目介绍 java 开发中,参数校验是非常常见的需求. 但是 hibernate-validator 在使用过程中,依然会存在一些问题. 特性 支持 fluent-validation 支持 jsr- ...

  5. Unity 声音处理 之 语音识别

    音量检测 检测当前麦克风的输入音量 using System.Collections; using System.Collections.Generic; using UnityEngine; usi ...

  6. DevExpress Applications<3>

    Project Template Project Template Information Template Name Template Description Controls and Compon ...

  7. web.xml的常见配置

    web.xml的常见配置 <!-- 配置全局的编码过滤器 --> <filter> <description>编码过滤器</description> & ...

  8. ES 6新语法

    一.块级作用域绑定 回顾:使用var关键字定义变量 定义 = 声明 + 赋值:   1. 可以一次定义多个变量 2. 定义时可以只声明不赋值 3. 定义之后可以随时修改变量的值 4. 变量声明会被提升 ...

  9. python浅见 (Python 3000)

    1.该版本不考虑向下兼容 2.下载地址: https://www.python.org/downloads/source/ # tar -zxvf Python-3.6.1.tgz # cd Pyth ...

  10. Go Modules使用教程

    Go Modules 不完全教程 文章转载自公众号 Golang 成神之路 , 作者 L Go Modules 是 Golang 官方最近几个版本推出的原生的包管理方式,在此之前,社区也不乏多种包管理 ...