fetchxml 汇总_Dynamic CRM 2013学习笔记(八)过滤查找控件 (类似省市联动)

我们经常要实现类似省市联动一样的功能,常见的就是二个查找控件,一个选择了省后,另一个市的查找控件就自动过滤了,只显示当前省下的市,而不是所有的市。当然这是最简单的,实际工作中还有更复杂的功能要通过过滤查找控件来实现。本文主要介绍基本的查找控件过滤、多表关联的复杂过滤以及子表里实现查找控件的过滤。

一、简单的过滤

先看下需求:

9ac4bc6f535d58002b8323da2bc7739c.png

按“Special GL Indicator” 来过滤 Posting

查找控件增加了preSearch事件。它发生在查找控件显示对话框供用户查找记录之前,与其他事件不同的是,不能使用界面来设定这个事件发生时执行的代码。只有通过Xrm.Page.getControl(arg).addPreSearch(handler) 和 Xrm.Page.getControl(arg).removePreSearch(handler) 来为该事件增加或者清除执行的代码。

实现方法很简单,在Form的OnLoad事件加上preFilterLookup

function preFilterLookup() {

Xrm.Page.getControl("new_postingid").addPreSearch(function () { // child field

addPostingLookupFilter();

});

}

function addPostingLookupFilter() {

var gl = Xrm.Page.getAttribute("new_special_gl_indicatorid").getValue(); // parent field

var fetchXml = "";

if (gl != null) {

fetchXml = "";

}

else {

fetchXml = "";

}

Xrm.Page.getControl("new_postingid").addCustomFilter(fetchXml); // child field

}

首先为要过滤的查找控件加上addPresearch方法,并用addCustomFilter来控制。 (这里好像只能inner关联)

二、复杂的过滤

上面我们实现了一个简单的过滤,下面我们来实现一个复杂点的过滤。上面用到的是addCustomFilter,也就是说用filter来过滤,如果关系复杂点,有多个关联表,filter就没办法实现了,这时就要用到addCustomView了。

84c92a2cdde8df9cda43b0243d739267.png

如上图,先按“Company Code”过滤出来,再按“ Company Tax Procedure"(页面上没显示)来过滤 Tax Code。

首先在form OnLoad事件里加上一个新的方法 TaxCodeCustomView,其实现如下:

function TaxCodeCustomView() {

var company = Xrm.Page.getAttribute("new_company_codeid").getValue();

var viewId = "{00000000-0000-0000-0000-000000000001}";

var viewDisplayName = "Tax Code View";

var fetchXml = "" +

"" +

"" +

"";

if (company != null) {

fetchXml += "";

}

fetchXml += "" +

"" +

"";

var layoutXml = "" +

"" +

"" +

"" +

"";

Xrm.Page.getControl("new_tax_codeid").addCustomView(viewId, "new_taxprocedure_taxcode", viewDisplayName, fetchXml, layoutXml, true);

}

这里用到的是addCustomView配合fetchxml来实现复杂的关联过滤。

三、子表里用主表字段来过滤

下图是上图的子表,也有Posting 及 Tax Code,也要像主表那样过滤,但子表上并没要过滤的字段“Special GL Indicator” ,“Company Code”

6a4f8674b9ca76cb3a44dad9ac01d4cb.png

当然我们可以通过OData通过主表id来查询到主表上的这二个值,再来过滤,但这样做效率太低,而且上面的代码还不能重用。

这时可以通过主表上来新建1:N的关系把我们需要的主表上的这二个字段mapping到子表上

9dd49a71e7d958156d6fb78673973473.png

把这二个字段加到子表里,但不用显示出来

b37b40127841c5cb85853552c746412c.png

这样在子表里就可以重用主表里的js代码,也只用在form OnLoad事件上加上preFilterLookup就行了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值