关注本人微信和易信公众号: 微软动态CRM专家罗勇 ,回复169或者20151105可方便获取本文,同时可以在第一时间得到我发布的最新的博文信息,follow me!

CRM中的地址以前不是很了解,定制我家 素格格新疆特产店 的CRM系统的时候发现在联系人界面录入的地址,在订单界面使用 查找地址 功能的时候找不到,难道要手工再次录入发货的地址,收货人和电话等信息吗?当时没有深究,但是今天我打算仔细研究下,与大家分享,也好完善我家素格格新疆特产店的CRM。
 
首先我们通过 MetadataBrowser 解决方案来查看下有多少与地址相关的实体,我搜索下 addre ,看到结果如下,看来地址相关的实体还挺多的,这次我们主要关注 地址 (CustomerAddress) 这个实体。
 
这个实体的主要信息截图如下,主要属性是name,唯一键字段是customeraddressid,显示名称为地址的除了主键以外还有一个,那就是composite,这个是一个复合字段,是你输入地址各个部分组合后的值。还有一个字段类型为选项集的字段 objecttypecode ,它不可以定制,而且也只有 客户 和 联系人 两个选项。
 
那这个地址是属于哪个客户或者联系人呢?是通过字段parentid来关联的。关联到联系人是这个字段,关联到客户也是这个字段,这中行为是我们自定义字段无法做到的。
 

值得注意的是地址实体有个限制就是无法与其他建立关系,无论是 1:N, 还是 N:1 ,还是 N:N 的关系,比如你建立查找字段就会发现无法找到实体:

 
我们来继续测试怎么利用,我这里建立一个联系人,并且输入了地址如下。
 
那么这里输入的地址会进入到地址实体(CustomerAddress)吗?我们直接用SQL来看看就知道了:

select CustomerAddressId,ParentId,ObjectTypeCode,AddressNumber,Line1,
City,StateOrProvince,Country,Composite,DATEADD(HOUR,8,CreatedOn) as createdon
from CustomerAddress
where ParentId='A58C6780-8783-E511-80FD-000D3A80A5AB' and ObjectTypeCode=2

结果如下,可以知道是进入了地址实体(CustomerAddress),而且一次新增了三行,其中AddressNumber等于1的那行就是我录入的地址,其余两行主要内容都是空的。

 
那我有个疑问,如果我创建的联系人没有录入地址呢,它会自动帮我创建三条记录吗?带着这个疑问,我创建了一个联系人,没有录入地址保存后验证结果是会的,不过主要字段内容都是空的。
 
继续我的疑问,那我如果修改联系人界面的地址,地址实体的记录值会跟着自动修改吗?我把我的地址改成老家的地址,再去看看,发现自动同步了,这个功能还不错。
 
还有疑问,那就是每个客户或者联系人只能有3个地址吗?我可以增加1个地址吗?所以我用了如下的代码来做试验:
static void Main(string[] args)
{
try
{
var service = GetOrganizationService();
var custaddr = new Entity("customeraddress");
custaddr["addressnumber"] = ;
custaddr["parentid"] = new EntityReference("contact", new Guid("A58C6780-8783-E511-80FD-000D3A80A5AB"));
custaddr["country"] = "中国";
custaddr["stateorprovince"] = "新疆";
custaddr["city"] = "昌吉";
custaddr["line1"] = "呼图壁县";
custaddr["composite"] = "新疆昌吉呼图壁县";//这个字段要自己赋值,囧
custaddr["name"] = "代码增加的地址";
service.Create(custaddr);
Console.WriteLine("程序运行完成!");
Console.ReadKey();
}
catch (Exception ex)
{
Console.WriteLine("程序运行遇到异常." + ex.Message);
Console.ReadKey();
}
}

答案是增加成功,我们用sql可以看到:

 
当然用高级查询也是可以看到的,我是用的查询条件如下
 
查询结果如下:
 
双击记录是可以修改并保存的,在这个高级查询界面也是可以删除的,可是在这里没有办法新增。也有一个办法,随便双击一条记录进去,点击 保存并新建 是可以新增当前的联系人或者客户的地址的,这里增加的地址的composite字段是没有值的,addressnumber会自动增加。还有一个办法,后面使用订单的查找地址功能时候,也可以新建地址。这个地址表单最好稍微客制化一下,增加街道2,街道3,地址等的显示,增加地址编号列作为只读字段显示。
 
默认联系人创建了3个地址行,其他两个呢,我猜想应该对应联系人的地址2和地址3字段,于是将其放到联系人的主窗体上面,如下所示:
 
然后我去录入这两个地址信息如下:
 

你会发现真的是对应他的地址实体的AddreeNumber字段为2和3的记录。

 
当然,如果你喜欢,也可以在联系人界面插入一个子网格来显示地址,这样就可以方便的新增地址了,也方便修改地址,为地址的 地址名称 字段录入值以后,这个地址就会显示在 查找地址 功能中(后文有说明)。我这里子网格使用的 所有客户地址 视图是自己定制过的,去掉了所有筛选条件(因为默认的筛选条件有误),修改了显示列。
 
下面我们来测试下订单可否使用上面的地址,我这里创建了一个订单,订单的潜在顾客(这个翻译不好,应该是顾客好点吧)就是我前面创建的联系人,我自己。我们使用命令栏的查找地址看看:
 
可以看到能找到两个地址,其他的地址为啥没有呢?
 
我们从这个视图 -- 客户地址查找视图 来着手吧。顺便提一句,如果我切换成 客户所有地址,不但不是更多,而是更少了,只有地址名称为 代码增加的地址 这一个地址了,伤不起。
 

打开 客户地址查找视图 的筛选条件如下,这下明白了,4个地址只有两个可以看到,因为它只显示字段 地址名称 列包含值的地址,所以地址录入以后最后设置一个地址名称。我把这个删选条件删除,保存并发布,就会显示所有的地址吗?不会,我测试结果是这样,囧。

 
然后我们来看看 所有客户地址 视图的筛选条件如下,居然说 显示该条件时出错,哎,bug,我的做法是删除这些筛选条件。
 
我选择一个地址来看看效果:
 
真的帮我把地址填入了送货地址,效果如下:
 
如果我到联系人界面更改了这个地址,订单这里会有所反应吗?也就是会自动更新订单的送货地址吗?答案是不会。因为这个值是直接填入了订单实体。订单的ShipTo_AddressId记载了送货地址来自哪个地址,地址相关的字段映射到了 ShipTo_City,ShipTo_Composite,ShipTo_Country,ShipTo_Line1,ShipTo_Line2,ShipTo_Line3,ShipTo_PostalCode,ShipTo_StateOrProvince 等字段。
但是地址中的直接联系人(primarycontactname) 并没有映射到订单的 ShipTo_ContactName,地址中的主要电话(telephone1) 并没有映射到订单中的ShipTo_Telephone字段,地址中的地址地址名称(name)并没有映射到订单中的ShipTo_Name字段。
我也搞不懂开发Dynamics CRM的人为什么留下几个字段不做对应映射呢?而这些没有映射的字段又比较重要。怎么办?如果想用实时工作流或者插件来做,发现都有问题,就是都不能监控 ShipTo_AddressId 这个字段的变化,搞么子哦。没有条件创造条件也要上,看我如何解决它。
其实解决办法非常简单,就是讲没有映射到的字段拉出来放到订单界面上就可以了,如下
 
有个小问题就是,如果上面的 送货地址 选择 自提 的话,系统默认会隐藏下面的送货地址,而不会隐藏我添加的 送货地的电话号码 和 送货地的联系人姓名 字段,这个简单,我们用个业务规则轻松解决.

Dynamics CRM中的地址知多D?的更多相关文章

  1. Dyanmics CRM您无法登陆系统。原因可能是您的用户记录或所属的业务部门在Microoft Dynamics CRM中已被禁用

    当在操作CRM时,做不论什么的写操作包含创建数据.更新数据.都会提示以下截图中的错误:"您无法登陆系统.原因可能是您的用户记录或所属的业务部门在Microoft Dynamics CRM中已 ...

  2. Dynamics CRM中一个查找字段引发的【血案】

    摘要: 本人微信和易信公众号: 微软动态CRM专家罗勇 ,回复267或者20180311可方便获取本文,同时可以在第一间得到我发布的最新的博文信息,follow me!我的网站是 www.luoyon ...

  3. 在Dynamics CRM中使用Bootstrap

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

  4. 在Dynamics CRM中自定义一个通用的查看编辑注释页面

    关注本人微信和易信公众号: 微软动态CRM专家罗勇 ,回复162或者20151016可方便获取本文,同时可以在第一时间得到我发布的最新的博文信息,follow me! 注释在CRM中的显示是比较特别, ...

  5. Dynamics CRM中的注释(Note)及RollupRequest消息初探

    关注本人微信和易信公众号: 微软动态CRM专家罗勇 ,回复161或者20151015可方便获取本文,同时可以在第一时间得到我发布的最新的博文信息,follow me! 注释,这个实体的架构名称是Ann ...

  6. Dynamics CRM中的操作(action)是否是一个事务(transaction)?

    关注本人微信和易信公众号: 微软动态CRM专家罗勇 ,回复168或者20151104可方便获取本文,同时可以在第一时间得到我发布的最新的博文信息,follow me! 以前的博文 微软Dynamics ...

  7. Dynamics CRM 中Web API中的深度创建(Deep Insert)

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

  8. 您无法登陆系统。原因可能是您的用户记录或所属的业务部门在Microoft Dynamics CRM中已被禁用

    问题发生在CRM 4.0 上 1 用户所在办事处及办事处上级被禁用. 2 如果已经重新启用了,还是报这个错误. 可以把停用的办事处及相关下级再重新--停用--启用一次试试. 3 如果还是报错,查看是否 ...

  9. 在Dynamics CRM 2015中通过3CX插件(以及3CX windows phone)拨出电话

    背景 在On-premises部署的Dynamics CRM中实现通过网页拨通客户电话的功能 要点 3CX 提供了开箱即用的Dynamics CRM Solution,只需要在Microsoft Dy ...

随机推荐

  1. LeetCode刷题--无重复字符的最长子串(中等)

    题目描述: 给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度. 示例 1: 输入: "abcabcbb" 输出: 3 解释: 因为无重复字符的最长子串是 " ...

  2. jquery.countdown 倒计时插件的学习

    1.第一种简单的使用 第一个时间是你的倒计时截止时间,finalDate格式可以是YYYY/MM/DD MM/DD/YYYY YYYY/MM/DD hh:mm:ss MM/DD/YYYY hh:mm: ...

  3. 使用echarts去对数据进行图形分析

    首先导入js包:echarts.min.js <script type="text/javascript" src="js/echarts.min.js" ...

  4. ACM中java中BigInteger和Decimal用到的主要函数

    java中大数以及高精度常用函数 使用java大数类解决问题时我们需要注意两个方面:1.不能有包名,也就是说我们要把主类放到默认的包里,如果你的代码里出现形如package cn.gov.test;这 ...

  5. HDU1561 The more ,The better (树形背包Dp)

    ACboy很喜欢玩一种战略游戏,在一个地图上,有N座城堡,每座城堡都有一定的宝物,在每次游戏中ACboy允许攻克M个城堡并获得里面的宝物.但由于地理位置原因,有些城堡不能直接攻克,要攻克这些城堡必须先 ...

  6. 最全的三剑客和linux正则符号讲解

    第2章 linux符号系列与三剑客    194 2.1 特殊符号系列    194 2.1.1 普通符号系列    194 2.1.2 引号符号系列    196 2.1.3 定向符号    197 ...

  7. SQL Server导入mdf数据库文件

    方法一: 1.新建查询然后输入如下代码,点击F5键或者点击运行按钮即可 EXEC sp_attach_db @dbname = '你的数据库名', @filename1 = 'mdf文件路径(包缀名) ...

  8. Navicat for mysql 免费破解工具+教程

    转载自:https://blog.csdn.net/BigCabbageFy/article/details/79789833 navicat for mysql带给大家这款高性能数据库管理开发工具的 ...

  9. C语言每日一练——第1题

    一.程序功能 程序的功能是:将大于整数m且紧靠m的k个素数存入数组xx.并把in.dat文件的内容输入到程序,并把输出结果输出道out.dat文件夹中例如:若输入17,5 则应该输入:19,23,29 ...

  10. array、list和set相互转化的方法

    这里总结一下Array.List和Set相互转化的方法. Array转化为List 将Array转化为List是使用Arrays.asList()方法. String[] arr= new Strin ...