2017-02-20 95 views
0

我想筛选一个表单上多个字段的查找。 问题是只有我添加的最后一个事件处理程序适用于所有字段。 为此,我想使用上下文来获取当前使用的字段。 但是,筛选器应用于窗体的“onload”事件中,在该窗体中我没有选定的上下文/字段。已筛选的查询多个字段

为此,我用这个代码:

function preFilterLookupFunction(executionContext) 
{ 
    var fieldname = new Array("field1","field2"); 
    fLen = fieldname.length; 

    for (i = 0; i < fLen; i++) 
    { 
     var tempName = fieldname[i]; 
     Xrm.Page.getControl(tempName).addPreSearch(function() 
     { 
     addLookupFilterFunction(executionContext); 
     }); 
    } 
} 

function addLookupFilterFunction(executionContext) 
{ 
    var attribute = executionContext.getEventSource(); 
    var tempFieldName = attribute.getName(); 
    alert(tempFieldName) 
    var condition = Xrm.Page.getAttribute("fieldContition").getValue(); 
    if (condition != null) 
    { 
     var fetchXml = "<filter type='and'><condition attribute='fieldContition' operator='eq' value='" + condition + "' /></filter>";    
     Xrm.Page.getControl(tempFieldName).addCustomFilter(fetchXml); 
    }  
} 

我的问题:是否有可能得到在addLookupFilterFunction的背景下,同时执行,这样我就可以过滤器设置为右场?还是有更好的方法来过滤一个表单上的多个字段?

+2

尼斯PIC Twiebie。 – user7393973

+0

您需要将相同的过滤器应用于表单上的多个查找?我有没有得到那个权利? (顺便说一句:这是我第一次写的相同的代码) – Alex

+0

@亚历确实。但我不想为每个字段分别添加事件处理程序。 – Twiebie

回答

0

关键是你不需要传递一个executionContext参数。

函数调用addLookupFilterFunction(executionContext) executionContext引用函数preFilterLookupFunction(executionContext)的自变量变量,对于for循环的每次迭代而言,它们都是相同的。

替换此代码:

Xrm.Page.getControl(tempName).addPreSearch(function() 
{ 
    addLookupFilterFunction(executionContext); 
}); 

本:

Xrm.Page.getControl(tempName).addPreSearch(addLookupFilterFunction); 
+0

我试过了,但结果与以前一样,只有列表中的最后一个控件获得了(右)过滤器,其他所有控件都获取了for循环中提到的最后一个控件的过滤器。我已经绕过这个问题,为每个controll添加一个独立的函数,并在窗体的负载中调用它,但是所有控件的循环函数仍然不起作用。 – Twiebie

+0

什么时候调用'preFilterLookupFunction',一次在窗体的onload中? –

+0

是的,它在表单的onLoad中被称为一次 – Twiebie