关注本人微信和易信公众号: 微软动态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. Python基础之第三方库gevent安装

    安装gevent库: 想要安装gevent库,我们需要确定pip版本: 使用 pip3 list: 我们可以发现pip版本为19.3.1,如果你们的pip版本不是最新版可以使用命令python -m ...

  2. 转:关于java.lang.ClassNotFoundException: org.springframework.boot.SpringApplication的解决

    在这个控制板中,出现了这个问题 java.lang.ClassNotFoundException: org.springframework.boot.SpringApplication 虽然明显知道是 ...

  3. ARTS-S ansible-playbook

    文件a.yml --- - hosts: cluster remote_user: ksotest gather_facts: false tasks: - name: delete dir if e ...

  4. 【MySQL】ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)

    问题现象: ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES) 拒绝访问root用户 ...

  5. 前端js分页功能的实现,非常实用,新手必看

    分享一个前端拿到数据后,自己生成分页的案例,案例如图显示,点击搜索后查询数据,显示数据列表,前端根据数据显示正确的分页 附上代码:代码附上,简单粗暴,自己用过的,兼容性好,没有封装,可以很好的分页原理 ...

  6. netty用法总结

    /**decoder和encoder,如果不需要解析,就使用系统的 * ch.pipeline().addLast(new StringDecoder()); * ch.pipeline().addL ...

  7. c#截取后台窗口的图片

    c#截取后台窗口的图片,自测可用,据说性能很一般,用用吧 struct RECT { public int Left; // x position of upper-left corner publi ...

  8. 微服务架构 SpringBoot(二)

    第二天内容:想来想去玩个ssm小demo吧 1.创建表 2..引入相关mybatis 数据库jar: <!--mybatis --> <dependency> <grou ...

  9. ES6+转ES5(webpack+babel、指定多个js文件、自动注入)

    接续上篇ES6+转ES5,本篇将使用webpack和babel将多个不同目录下指定的多个ES6+语法的js文件编译为ES5,并将编译后的文件配置注入对应的html文件. 所需环境node.npm.设置 ...

  10. [转]JVM参数使用手册

    内存分配相关 Xms 英文释义:Initial heap size(in bytes) 中文释义:堆区初始值 使用方法:-Xms2g 或 -XX:InitialHeapSize=2048m Xmx 英 ...