Filtered Lookup多个字段

时间:2017-02-20 09:27:34

标签: javascript dynamics-crm filtered-lookup

我想在一个表单上的多个字段上过滤查找。 问题是我添加的最后一个eventhandler只适用于所有字段。 为此,我想使用上下文来获取当前使用的字段。 但过滤器应用于" 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中的上下文,因此我可以将过滤器设置为正确的字段?或者有更好的方法来过滤一个表单上的多个字段吗?

1 个答案:

答案 0 :(得分:0)

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

在函数调用addLookupFilterFunction(executionContext)中,executionContext引用函数preFilterLookupFunction(executionContext)的参数变量,对于for循环的每次迭代都是相同的。

替换此代码:

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

由此:

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