smemo

技術メモです。

【Dynamics】検索コントロール(Lookupフィールド)にフィルターを適用

ある特定のフォームだけLookupフィールドの検索条件を変更したい場合の対応方法。


通常Lookupフィールドに表示するレコードは「検索ダイアログ ボックス ビュー」で定義しますが、addCustomFilterというメソッドを使用することでLookupフィールドに表示するレコードを絞り込むことが可能になります。
https://msdn.microsoft.com/ja-jp/library/gg334266.aspx#BKMK_addCustomFilter


サンプルとして、取引先担当者の「電子メールを許可しない」フィールドが許可のみの取引先担当者を抽出するようなスクリプトを実装してみようと思います。


取引先担当者のレコードの状態
f:id:smemo:20170103204946p:plain

コード

var AddCustomFilterSample = (function () {
    return {
        // Onloadイベントに設定
        SetFilter: function () {
            Xrm.Page.getControl("parentcontactid").addPreSearch(AddCustomFilterSample.Filter);
        },
        // フィルターの設定
        Filter: function () {
            var filter = "<filter type='and'>" +
                         "<condition attribute='donotemail' operator='eq' value='false' />" +
                         "</filter>";
            Xrm.Page.getControl("parentcontactid").addCustomFilter(filter, "contact");
        }
    };
})();

実行結果:取引先担当者が絞り込まれています。
f:id:smemo:20170103204939p:plain


今回はOnloadイベントでフィルターを設定しましたが、フィールドの特定の値によってフィルターを動的に変更してUXの向上することができそうと感じました。