Lookup Filtreleme işlemi bazı uygulamalarımızda gerekli olabilir.Bu işlemi ben kendi çalışmam için hazırladığım bir örnek üzerinden anlatacağım.Kendi uygulamam için City ve County adında iki tane custom entity oluşturdum. City entity sinde il değerleri county etitysinde ise bu illere ait ilçeler tutulacak.Ama county entity sini yaratırken city entity sine n:1 relation olarak tanımladım.Başka bir entity de ise n:1 relation olarak City ve County entity lerimi ekledim.Test Entity sinde Lookup olarak yeralan bu controllerde amacım city seçimi yapınca county lookup ına sadece seçilen city e ait county kayıtlarının yüklenmesidir.Bu işlem için crmserver ında /_custom klasörü altında lookupFilter.js dosyamı oluşturdum.
Bu dosyada yer alan get_LookupFilter() metodunda gerekli fetchxml sorgusu aşağıdaki kod halinde yazınız.
LookupFilter.js dosyasına bu kod yazılacak.
function get_LookupFilter()
{
if( crmForm.all.pro_cityid.DataValue != null && crmForm.all.pro_cityid.DataValue[0]!=null)
{
var name = crmForm.all.pro_cityid.DataValue[0].name;
var id = crmForm.all.pro_cityid.DataValue[0].id;
var fetchStr = "<fetch version='1.0' output-format='xml-platform' mapping='logical' distinct='false'>"
+ "<entity name='pro_county'>"
+ "<all-attributes/>"
+ "<filter type='and'>"
+ "<condition attribute='pro_cityid' operator='eq' uiname='"+name+"' uitype='pro_city' value='"+id +"'/>"
+ "</filter>"
+ "</entity>"
+ "</fetch>";
crmForm.all.pro_countyid.lookupbrowse = 1;
crmForm.all.pro_countyid.additionalparams = "search="+fetchStr ;
crmForm.all.pro_countyid.setAttribute("readonly", false);
}
else
{
crmForm.all.pro_countyid.setAttribute("readonly", true);
crmForm.all.pro_countyid.DataValue = null;
}
}
Lookup kontrolünün fetchxml sorgusu üzerinden yüklenebilmesi için aşağıda javascript kodu belirtilen dosya yolu altında bulunan crm e ait lookupsingle.aspx dosyasına yapıştırınız.
crmserver\_tools\lookup\lookupsingle.aspx dosyasınada bu kod eklenecek.
<script runat="server">
protected override void OnLoad( EventArgs e )
{
base.OnLoad(e);
crmGrid.PreRender += new EventHandler( crmgrid_PreRender );
}
void crmgrid_PreRender( object sender , EventArgs e )
{
if (Request["search"] != null && Request["search"].StartsWith("<fetch"))
{
crmGrid.AddParameter("fetchxml", Request["search"] );
crmGrid.Parameters.Remove("searchvalue");
this._showNewButton = false;
}
}
</script>
Lookup ın onchange() eventine aşağıdaki kodu yazınız.(LookupFilter.js ye ait bir metod.)
Formun onload() eventine aşağıdaki kodu yazınız(Bu kod serverdaki lookupfilter.js file kullanmak için).
var field = crmForm.all.new_countyid;
field.Disabled = true;
SERVER_URL = SERVER_URL.replace(ORG_UNIQUE_NAME,"");
var oScript = document.createElement("<script src='"+ SERVER_URL +"_custom/LookupFilter.js' type='text/javascript' />");
document.getElementsByTagName("head")[0].insertAdjacentElement("beforeEnd", oScript);
Sonuç:
City Lookup ından bir kayıt seçelim..
İstanbulu seçince County Lokup ına istanbula ait ilçeler aşağıdaki gibi yüklenir.
Seçimden sonraki formun görüntüsü aşağıdaki gibi olacaktır...
İyi çalışmalar...
Örnek Uygulamanın Kodları >> LookupFilter.txt (2,50 kb)