2017-02-20 8 views
0

1つのフォーム上の複数のフィールドのルックアップをフィルタ処理したいとします。 問題は、追加した最後のイベントハンドラだけがすべてのフィールドに適用されることです。 これは私が現在使用されているフィールドを取得するためにコンテキストを使用したかったのです。 しかし、フィルタはフォームの "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つのフォームでフィルタリングするより良い方法はありますか?

+2

素敵な写真Twiebie

は、このコードを置き換えます。 – user7393973

+0

フォームの複数のルックアップに同じフィルターを適用する必要がありますか?私はそれを得ましたか? (Btw:これは私が最初に書いたコードと同じです) – Alex

+0

@Alexはい、確かにそうです。私はすべてのフィールドにseperatlyイベントハンドラを追加したくありません。 – Twiebie

答えて

0

キーは、executionContextパラメータを渡す必要がないということです。

addLookupFilterFunction(executionContext)の関数呼び出しでは、preFilterLookupFunction(executionContext)の引数変数を参照します。これは、forループのすべての繰り返しで同じになります。このことにより、

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

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

私はこれを試みましたが、前と同じ結果になり、リストの最後のコントロールだけが(右)フィルターを取得し、他のすべてのコントロールはforループで説明した最後のコントロールのフィルターを取得します。私は問題を回避するために、各コントロールに対して別々の機能を追加し、フォームのロード時に呼び出すが、すべてのコントロールのループ機能はまだ機能しない。 – Twiebie

+0

'preFilterLookupFunction'がいつ呼び出されますか?フォームのロード時に一度ですか? –

+0

はい、フォームのonLoadで1回呼び出されます – Twiebie

関連する問題