2017-02-20 111 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