Microsoft Dynamics CRM 2011 – Javascript to display associated views

By - October 21, 2011

This post is a companion post of Microsoft Dynamics CRM 2011 – Activity Sub-grids only display regarded records, which details a known CRM 2011 issue with Activity Sub-grids. This article provides CRM 2011 javascript to display the activity associated views, in the same manner as we did in CRM 4.0. Please read the end of this post where I detail the caveats of using this workaround with CRM 2011. The original javascript for 4.0 was authored by Daniel Cai here: mscrm-40-remove-existing-xxxxx-to-this.html.

/**

* Load an associated view into an IFrame, hide it from LHS navigation menu,

* and remove "Add Existing" button in the associated view.

* @author Daniel Cai, http://danielcai.blogspot.com/

*

* Parameters:

* @param iframe: The IFrame's object, e.g. crmForm.all.IFrame_Employer_Address

* @param navItemId: LHS navigator's HTML element ID of the associated view.

It usually starts with "nav".

* @param relName: The relationship name, this parameter is only required

* when you want to remove "Add Existing" button.

* Modified by Bill Caldwell for CRM 2011. There was some laziness here in not porting all the code to CRM 2011 javascript

* Removed, "Removed 'Add Existing' button" because N/A in 2011. Removed code to remove from left navigation on form since this can be done OOB with CRM 2011.

* Insert entire code into On load function or call function from on load event (see last line of code)

* No code to account for "new" record, so it looks ugly on new record. Very easy to add this though.

* This is not an issue if your contacts are always created from leads (as was the case with my project).

* The subgrid for Current activities is probably fine. For historical, it's not since only "regarding" records show.

*/

function loadAssociatedViewInIFrame(iframe, navItemId, relName) {

var clickActionPattern = /loadArea(['"]{1}([A-Za-z0-9_]+)['"]{1}(, ?['"]x26roleOrdx3d(d)['"])*).*/;

var roleOrd;

var getFrameSrc = function (areaId) {

var url = "areas.aspx?oId=" + encodeURI(Xrm.Page.data.entity.getId());

url += "&oType=" + crmForm.ObjectTypeCode;

url += "&security=" + crmFormSubmit.crmFormSubmitSecurity.value;

url += "&tabSet=" + areaId;

url += (!roleOrd) ? "" : "&roleOrd=" + roleOrd;

return url;

};

var onReadyStateChange = function () {

if (iframe.readyState === 'complete') {

var frameDoc = iframe.contentWindow.document;

// Remove the padding space around the iframe

//frameDoc.body.scroll = "no";

//frameDoc.body.childNodes[0].rows[0].cells[0].style.padding = "0px";

}

};

(function init() {

if (!Xrm.Page.data.entity.getId()) return;

var navItem = document.getElementById(navItemId);

if (!navItem) return;

var clickAction = navItem.getAttributeNode('onclick').nodeValue;

if (!clickAction || !clickActionPattern.test(clickAction))

return;

//navItem.style.display = 'none';

var areaId = clickAction.replace(clickActionPattern, '$1');

roleOrd = clickAction.replace(clickActionPattern, '$3');

iframe.src = getFrameSrc(areaId);

iframe.allowTransparency = true; // Get rid of the white area around the IFrame

iframe.attachEvent('onreadystatechange', onReadyStateChange);

})();

};

loadAssociatedViewInIFrame(crmForm.all.IFRAME_History, 'navActivityHistory', 'Contact_ActivityPointers');

Caveats:

  • When using the javascript, you are not able to click in the grid area and see the ribbon change to be able to add an activity.
  • You have to go to the “Add” tab at the top to be able to add new activities.
  • The add, add existing and other toolbar buttons are no longer available in associated views in CRM 2011. Related to above item.
  • The subgrids (because they are part of the form) automatically refresh when you add a new activity. This old school method using the javascript still requires you to click the refresh icon to see new activities or see them move from current to history.
  • When I (Bill C) rewrote this for CRM 2011, I still used some CRM 4.0 object references which can probably be replaced with CRM 2011 references. They worked for me and I was under the gun, so I didn’t do it.

By: Bill Caldwell – Colorado Microsoft Dynamics CRM Partner

Follow Bill on Google+

RSM empowers middle market companies worldwide to take charge of change. Our unique middle market perspective makes RSM the natural choice for growth-oriented, internationally active organizations seeking relevant insights and tailored, innovative solutions for a complex and changing world. With a global reach spanning more than 120 countries, we instill confidence in a world of change by bringing the full power of RSM to make a lasting impact on our clients, colleagues and communities.

Contact our team to learn more!

Receive Posts by Email

Subscribe and stay aware of new posts by email.

Please Select Your Interests