我是微软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. CSS样式 解决文字过长显示省略号问题

    一.CSS样式 解决文字过长显示省略号问题 1.一般样式 一般 css 样式,当宽度不够时,可能会出现换行的效果.这样的效果在某些时候肯定是不行的,可以修改 css 样式来解决这个问题. <!D ...

  2. RF之简介

    robot framework 是一个通用型的自动测试框架 - 自动测试用例的实现方式 - 自动测试用例的开发支持 :  IDE.库 - 和用例管理系统的集成 - 测试执行:相关测试套件和测试用例的执 ...

  3. Builder模式的目的是解耦构建过程,为什么要用内部类?

    还没有看过Builder模式的作用,看过一篇介绍Builder模式的文章,这里是关于Builder模式的思考:思考是否有比新建一个内部类更好的方法,首先想到的是 package xyz.n490808 ...

  4. 5分钟搞定Jenkis

    目录 什么是持续集成 Jenkins简介 Jenkins安装与启动 Jenkins插件安装 全局工具配置 自动安装 本地安装 代码上传至Git服务器 任务的创建与执行 Go项目 JAVA项目 @ 什么 ...

  5. 转载 SAP用户权限控制设置及开发

    创建用户SU01 事务码:SU01,用户主数据的维护,可以创建.修改.删除.锁定.解锁.修改密码等 缺省:可以设置用户的起始菜单.登录的默认语言.数字显示格式.以及日期和时间的格式设置 参数:SAP很 ...

  6. English: Class words

    filing cabinet pan drive penalty charge per annum light setting remote control

  7. 团队项目之Scrum3

    小组:BLACK PANDA 时间:2019.11.23 每天举行站立式会议 提供当天站立式会议照片一张 2                            昨天已完成的工作 2 完善用户注册的 ...

  8. Linux笔记16 使用Vsftpd服务传输文件;使用Samba或NFS实现文件共享。

    FTP协议有下面两种工作模式. 1.主动模式:FTP服务器主动向客户端发起连接请求. 2.被动模式:FTP服务器等待客户端发起连接请求(FTP的默认工作模式).Vsftpd服务程序vsftpd作为更加 ...

  9. FAQ: Oracle Flex ASM 12c / 12.1 (Doc ID 1573137.1)

    FAQ: Oracle Flex ASM 12c / 12.1 (Doc ID 1573137.1) APPLIES TO: Oracle Database - Enterprise Edition ...

  10. MySQL数据库:子查询的应用

    子查询 子查询是一种常用计算机语言SELECT-SQL语言中嵌套查询下层的程序模块.当一个查询是另一个查询的条件时,称之为子查询. # 子查询的用法 # 在字段 select (select cNam ...