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

我这里有个简单的需求,就是选择了查找字段的值以后对地区字段做筛选,查找字段查找的是客户实体,客户实体上面有个所属地区字段,显示了这个客户所属的省份,然后地区就只能选择这个省份下面的城市。
对查找字段做筛选大概有三个方法,方法一:
1. 这种从我了解到的CRM 2011开始就支持了。制作一个公共视图,然后在表单上设置查找字段的属性,将默认视图设置为制作的这个公共视图,并将视图选择器关闭,如下图所示。
 
这种方式比较简单,效果如下,只能选择这个公共视图中的记录,配置简单功能也就简单。
 
方法2. 这种筛选方法从2013开始才提供,主要是使用 addPreSearch和addCustomFilter  来做,优点是页面OnLoad的时候不会执行代码,而且所加的筛选条件会应用到所有视图,缺点是它只能使用查找的实体做筛选,不能用关联的实体做筛选,这个问题 Using Linked-Entity in addCustomFilter 也有提到这个限制。我的文章 微软Dynamics CRM 2013介绍系列之三十:筛选查找控件,so easy。有介绍,这里不赘述了。 
方法3. 这种方法从CRM 2011(或许更早)就开始提供了,主要是使用 addCustomView 来做,这是今天博文要讲解的。先看看SDK中的介绍 Xrm.Page.getControl(arg).addCustomView(viewId, entityName, viewDisplayName, fetchXml, layoutXml, isDefault) ,参数含义我这里不解释了。首先是要构造一个fetchXml,使用高级查询最方便了,这里值得一提的是很多人构造的时候不加上状态等于可用这个条件,很多情况下应该加上的。
一般还需要调整列,我这里调整如下:

配置好后当然要点击 结果 查看结果是不是对的,我这里如下,是对的:

在这个结果页面点击F12按钮,打开Developer Tools这个工具,我这用的Chrome浏览器,再按Ctrl + F,输入 layoutxml 进行查找,查找到的第一个如下,刚好就是我要找的。
 
可以分别复制出来fetchxml如下:
<fetch version="1.0" output-format="xml-platform" mapping="logical" distinct="true">
<entity name="ly_district">
<attribute name="ly_districtid" />
<attribute name="ly_name" />
<attribute name="ly_districtno" />
<attribute name="ly_parentdistrict" />
<order attribute="ly_name" descending="false" />
<link-entity name="ly_district" from="ly_districtid" to="ly_parentdistrict" alias="bg">
<link-entity name="account" from="ly_district" to="ly_districtid" alias="bh">
<filter type="and">
<condition attribute="accountid" operator="eq" uiname="Adventure Works (示例)" uitype="account" value="{C223165A-3AA3-E511-80C7-000D3A807EC7}" />
</filter>
</link-entity>
</link-entity>
</entity>
</fetch>
 
复制出来的 LayoutXml 如下:
<grid name="resultset" object="10067" jump="ly_name" select="1" icon="1" preview="1">
<row name="result" id="ly_districtid">
<cell name="ly_name" width="125" />
<cell name="ly_parentdistrict" width="125" />
<cell name="ly_districtno" width="125" />
</row>
</grid>
然后就可以写代码了,注意:
1. FetchXML中查找字段筛选条件中的 uiname='湖南省' 和 uitype='ly_district' 部分可以去掉,我就把这两个属性去掉。
2. LayoutXml 中的属性preview在写代码的时候请设置为0,这样选择框好看点。
3. 复制出来的fetchxml和layoutxml中双引号替换为单引号比较好。
4. 若只能从这个筛选出来的记录选择,请在addCustomView时设置为默认视图,并且禁用选择其他视图,如下图所示:还需要在addCustomView 后执行 setDefaultView 。
5. 一般窗体的onload事件和影响这个筛选条件的字段的onchange事件都要执行相同的代码。
 
最后我所用的关键代码如下,在窗体的OnLoad事件和查找字段的onchange事件中执行如下代码:

Xrm.Page.getControl("ly_district").addCustomView("{6753B0C9-0B8C-431B-8E96-44D1D4EF6A06}", "ly_district", '地区筛选视图', "<fetch version='1.0' output-format='xml-platform' mapping='logical' distinct='false'><entity name='ly_district'><attribute name='ly_districtid'/><attribute name='ly_name'/><attribute name='ly_districtno'/><attribute name='ly_parentdistrict'/><order attribute='ly_name' descending='false'/><link-entity name='ly_district' from='ly_districtid' to='ly_parentdistrict' alias='bg'><link-entity name='account' from='ly_district' to='ly_districtid' alias='bh'><filter type='and'><condition attribute='accountid' operator='eq' value='" + (Xrm.Page.getAttribute("ly_lookup").getValue() ? Xrm.Page.getAttribute("ly_lookup").getValue()[0].id : "00000000-0000-0000-0000-000000000000") + "'/></filter></link-entity></link-entity></entity></fetch>", "<grid name='resultset' object='10067' jump='ly_name' select='1' icon='1' preview='0'><row name='result' id='ly_districtid'><cell name='ly_name' width='125'/><cell name='ly_parentdistrict' width='125'/><cell name='ly_districtno' width='125'/></row></grid>", true);
Xrm.Page.getControl("ly_district").setDefaultView("{6753B0C9-0B8C-431B-8E96-44D1D4EF6A06}");

效果如下,不能选择到其他视图,只能在限定的范围内选择。
 

查找字段的筛选-使用addCustomView的更多相关文章

  1. mysql通过字段注释查找字段名称

    原文:mysql通过字段注释查找字段名称 有时候表的字段太多,只是大致记得表的注释,想通过字段注释查找字段名称,可以用如下语句: SELECT COLUMN_NAME,column_comment F ...

  2. openEntityForm时候如何给关于(regardingobjectid)类型查找字段赋值?

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

  3. Dynamics 365中使用Web API将查找字段的值设置为空值的方法。

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

  4. Dynamics CRM2016 Web Api之查询查找字段的相关属性

    之前有篇博文介绍了如何获取查找字段的name值(跳转),本篇在此基础上再延伸下,实现的效果类似于EntityReference,可以取到查找字段的id,name,localname. 这里我以客户实体 ...

  5. Dynamics CRM2016 Web API之删除单个查找字段值

    之前的博文中有介绍过,Web Api中的一个删除单个属性的Api但没提供查找字段的删除方法,本篇补充上,这里给出的示例代码是C#的(主要看url的拼接),看下url中最后的/$ref,这个标示表明了当 ...

  6. openEntityForm如何给关于(regardingobjectid)类型查找字段赋值?

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

  7. Sed+Grep 快速替换查找字段(批量替换字符串)

    格式: sed -i "s/查找字段/替换字段/g" `grep 查找字段 -rl路径` 命令分解: grep 查找字段 -rl路径   列出”路径”中” 查找字段” 的所有文件 ...

  8. mysql通过字段凝视查找字段名称

    有时候表的字段太多.仅仅是大致记得表的凝视,想通过字段凝视查找字段名称,能够用例如以下语句: SELECT COLUMN_NAME,column_comment FROM INFORMATION_SC ...

  9. ORACLE 查找字段在哪些表里存在

    查找不是主键的字段在哪些表里存在: select owner, table_namefrom dba_tab_columnswhere lower(column_name)='firstname'; ...

随机推荐

  1. 移除 DevExpress 的 XtraForm 标题文字阴影

    问题 在使用 DevExpress 开发 WinForm 程序时,我是使用的默认皮肤进行开发.但客户要求标题栏背景色改为蓝色,标题文字颜色改为白色. 改颜色比较简单,参考了 DevExpress Su ...

  2. Go-包

    Go-包 包的介绍以及使用 为什么使用包 为了更加好的维护代码 包的位置 必须再GOPATH路径的src中 能导入的内容 导入的内容名称必须是大写字母开头不然无法导入 包 src中的一个文件夹为一个包 ...

  3. javaWeb核心技术第十一篇之Listener

    监听器:所谓的监听器是指对整个WEB环境的监听,当被监视的对象发生改变时,立即调用相应的方法进行处理. 监听术语: 事件源:被监听的对象. 监听器对象:监听事件源的对象 注册或绑定:1和2结合的过程 ...

  4. bay——安装_Oracle 12C-单实例-Centos7 -DG.txt

    用户和密码: root/bayaimbayaim/064286BAIbayoracle/oracleSID:orclsys/oraclesystem/oraclempay/mpaydx/dx ---- ...

  5. Linux防火墙firewall和iptables的使用

    防火墙是整个数据包进入主机前的第一道关卡. Linux中有两种防火墙软件,ConterOS 7.0以上使用的是 firewall,ConterOS 7.0以下使用的是 iptables,本文将分别介绍 ...

  6. 小型数据库性能对比(对比了SQLite、FireBird、FastDB、SQLServer2000绿色版、Access、BDB、PostgreSQL)

    一.全面对比 SQLite.FireBird.FastDB.SQLServer2000绿色版.Access.BDB.PostgreSQL对比结果如下: 二.国产数据库 三.SQLite 与Postgr ...

  7. 最小化MarkdownPad 2安装体积(win10)

    一.原因 MarkdownPad2在Win10当中可能无法正常运行,右侧预览界面会出现错误"This view has crashed!"查阅官网FAQ得知大多数情况下安装Awes ...

  8. 避免python二维列表append一维列表时浅拷贝问题

    原始问题: 由于浅拷贝原因,使得当a列表变动时,b列表也发生变动 解决办法: 如上图所示,添加的时候添加新列即可,类似新建一个列表,使得与原有列表a不共用同一个内存

  9. 【文本处理命令】之sed命令详解

    sed行处理命令详解 一.简介 sed命令是一种在线编辑器.一个面向字符流的非交互式编辑器,也就是说sed不允许用户与它进行交互操作.sed是按行来处理文本内容的,它一次处理一行内容.处理时,把当前处 ...

  10. windows 下命令行启动 appium-desktop

    启动appium-desktop如果要启动appium-desktop,双击appium.exe,启动后如下图:   启动appium-server通过下面解决方案直接启动appium-server, ...