Dynamics 365





Thursday, April 22, 2021

dynamics 365 filter sub grid lookup on add - D365 Onpremise lookup filter on subgrid using Java script


Dynamics 365 filter sub grid lookup on add - D365 On-premise lookup filter on subgrid using Java script






///////////////////////////
// START

// JScript source code

function setSubgridLookupFiltering() {
    var subgridAddButtonId = "Requirements_addImageButton";

    //Try to get the element from both the current and the parent document.
    var subgridAddButton = document.getElementById(subgridAddButtonId) || window.parent.document.getElementById(subgridAddButtonId);

    //This script may run before the subgrid has been fully loaded on the form. If this is the case,
    //delay and retry until the subgrid has been loaded.
    if (subgridAddButton == null) {
        setTimeout(setSubgridLookupFiltering, 2000);
        return;
    }

    //Local function to retrieve the lookup control and apply the filter. We will queue this function in the click event handler of the
    //Add button's click event.
    var getSubgridLookupAndAddFilter = function () {
        debugger;
        var subgridLookup = Xrm.Page.getControl("lookup_Requirements");

        //Delay and retry until we can locate the lookup.
        if (subgridLookup == null) {
            setTimeout(getSubgridLookupAndAddFilter, 200);
            return;
        }

        //This is a custom property we are tagging on to the lookup control to ensure that we will
        //apply the custom filter only once when the Add button is first clicked.
        if (subgridLookup.customFilterAdded) {
            return;
        }

        subgridLookup.addPreSearch(function () {
            debugger;
            //Standard logic to build up the filter query string
            var filterQuery = "";
            // var Property = Xrm.Page.getAttribute("").getValue();
            var lookupfield = new Array;
            lookupfield = Xrm.Page.getAttribute("msdyn_account").getValue();//lookup name which lookup values need to be filters where sub grid is placed
            if (lookupfield != null) {
                var lookupid = lookupfield[0].id;
            }

            filterQuery = "<filter  type='and'><condition attribute='has_property' operator='eq' value='" + lookupid + "'/></filter>";


            //Standard call to add filter to the lookup control
            subgridLookup.addCustomFilter(filterQuery, "has_pointmapping");//subgrid entity schema name
        });

        //Mark the fact that we have already added the filter so that we won't do it again the next time the user clicks the Add button.
        subgridLookup.customFilterAdded = true;
    };

    //Attach the function to retrieve the lookup and apply the filter to the Add button's click event. Remember that we
    //can only get the lookup after the user has clicked the Add button.
    subgridAddButton.addEventListener("click", function () {
        debugger;
        setTimeout(getSubgridLookupAndAddFilter, 200);
    });
}

//END

/////////////////////////