Partager via


Filtering in Sub-grids CRM 2015 | CRM online

Filter Sub-grid in CRM 2015

Contextual filtering in sub grids is a very common requirement, which is not supported out of the box in CRM. People use unsupported JavaScript which works till January update 1 and for spring release it stopped working. But if we understand why it will not work in spring release, because of new form structure and change DOM, document.getElementById stopped working.

JavaScript method which will work in January Update and Spring release 

function  getElement(elementName) {

    if  (document.getElementById(elementName) == null || document.getElementById(elementName) == 'undefined') {

        return  window.parent.document.getElementById(elementName);

    }

    else {

        return document.getElementById(elementName);

    }

}

 

The above function will return the object in both January Update 1 and Spring release. Now any sub grid can be filtered in January Update 1 and spring release both. Here is the method:

 

function  LoadGridForRollupView(subGridName, filterFetchXml) {

    var subGrid =  getElement(subGridName);

    //If this method is called from the form OnLoad, make  sure that the grid is loaded before proceeding  

    if (subGrid == null ||  subGrid.control == null || subGrid.control == 'undefined') {

        //The subgrid hasn't loaded, wait 100 mili second and  then try again

         setTimeout('LoadGridForRollupView(\'' + subGridName + '\',\'' + filterFetchXml + '\')', 100);

        return;

    }

 

    //Update the fetchXML that will be used by the grid.

    var FetchXml = filterFetchXml;

    //Inject the new fetchXml

     subGrid.control.SetParameter("fetchXml", FetchXml);

     subGrid.control.SetParameter("effectiveFetchXml", FetchXml);

     subGrid.control.SetParameter("fetchXmlForFilters", FetchXml);

 

    //Force the subgrid to refresh

     subGrid.control.refresh();

    setTimeout('RefreshSubGrid(\'' +  subGridName + '\')', 500);

}

 

 

But again this method is unsupported and it might stop working in subsequent releases of dynamics CRM online. This has been tested on Chrome and IE for CRM online for January Update 1 and spring release both.

 

Happy programming in Dynamics CRM online

Comments

  • Anonymous
    October 17, 2015
    In Crm 2015 online update 1 it's not working! window.parent.document.getElementById(elementName) returned null !!!