First, we have to make sure filtering lookup is supported by your Dynamics CRM. Open lookupsingle.aspx inside <CRM site folder>\_controls\lookup\ folder. If filtering lookup has not been supported, add these code snippet to the top of the page. As usual, never change a file without a backup.
<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 ) { // As we don't want to break any other lookups, ensure that we use workaround only if // search parameter set to fetch xml. if (crmGrid.Parameters["search"] != null && crmGrid.Parameters["search"].StartsWith("<fetch")) { crmGrid.Parameters.Add("fetchxml", crmGrid.Parameters["search"]); // searchvalue needs to be removed as it's typically set to a wildcard '*' crmGrid.Parameters.Remove("searchvalue"); // Icing on a cake - ensure that user cannot create new contact outside of the account // and then select it. this._showNewButton = false; } } </script>
After that, let’s play with Dynamics CRM Forms. To filter lookup data, you have to know at least these criteria:
- What field you’ll filter
- Lookup destination entity
- Search criteria
Here I give you an example to filter Primary Contact lookup field on Account.
// Which field we will filter var field = crmForm.all.primarycontactid; // Ensure that search box is not visible in a lookup dialog field.lookupbrowse = 1; // Prepare fetch xml to filter lookup data var filterStr="<fetch mapping='logical'> "+ "<entity name='contact'> "+ "<filter> "+ "<condition attribute='parentcustomerid' operator='eq' value='" + crmForm.ObjectId + "' /> "+ "</filter> "+ "</entity> "+ "</fetch>"; // Pass fetch xml through search value parameter field.AddParam("search",filterStr);
Since this method isn’t supported by Microsoft, I can’t guarantee this is 100% safe.
No comments yet.