Subgrids are new feature to CRM 2011 and allow records that are linked to a record to be shown on the form. By default the linking is limited to records which are related to parent.
I had a requirement to show a list of leads which have the same company name as the current lead. A subgrid seemed to be the way forwards, in CRM 4.0 I'd have added an IFrame displaying an advanced find list, but the limitation of only displaying related records added something of a stumbling block.
With a bit of, unsupported, scripting I managed to work around this issue. Here's how:
1. Add a subgrid to the Lead form showing all leads. Take a note of the subgrid name.
2. Generate the FetchXML that you want to inject into the subgrid (Advanced Find is your friend here).
3. The following JScript method demonstrates changing the FetchXml for a subgrid called "RelatedLeads"
function UpdateSubGrid()
{
var leadGrid = document.getElementById("RelatedLeads");
//If this method is called from the form OnLoad, make sure that the grid is loaded before proceeding //Included extra null check as a rollup 5 fix
if (leadGrid ==null || leadGrid.readyState != "complete")
{
//The subgrid hasn't loaded, wait 1 second and then try again
setTimeout('UpdateLeadSubGrid()', 1000);
return;
}
//Update the fetchXML that will be used by the grid.
var fetchXml = "";
fetchXml += " ";
fetchXml += " ";
fetchXml += " ";
fetchXml += " ";
fetchXml += " ";
fetchXml += " ";
fetchXml += " ";
fetchXml += " ";
fetchXml += " ";
fetchXml += " ";
fetchXml += " ";
fetchXml += " ";
fetchXml += "";
//Inject the new fetchXml
leadGrid.control.setParameter("fetchXml", fetchXml);
//Force the subgrid to refresh
leadGrid.control.refresh();
}
4. As a minimum the method can be called from the OnLoad event but it's probably best to call it from the OnChange event of any attributes that are used to generate the FetchXML