19 July 2011

CRM 4 Out of Memory When Creating Organisation

I ran into a problem when trying to create a new organisation in CRM 4 today. The error that was thrown was: Insufficient memory to continue the execution of the program.

I did the usual of checking the event logs on the CRM Application Server and the SQL server but nothing really jumped out at me. I was then told how to fix it by adding the a new DWORD registry value

1. Open Regedit and navigate to: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa\Kerberos\Parameters

2. Add a new DWORD value called: MaxTokenSize

3. Enter the following decimal value: 65535.



Note: Changing the registry can be dangerous, take reasonable care and backups! - If you stuff up your machine it's your fault not mine.

12 July 2011

Remove CRM 4.0 IFrame Whitespace

In CRM 4.0 it's often a requirement to display a list view in an IFrame on a form. This is quite a simple task of using the IE Developer Toolbar to determine the URL of the list view and then injecting the URL into the IFrame src property through JavaScript.

However when you do this you may notice that the list view doesn't stretch take up the whole IFrame, it leaves some whitespace around it:



In the past I've used various JavaScript to remove the whitespace and have settled on a method supplied by Andrew Zimmer's blog (http://blogs.inetium.com/blogs/azimmer/archive/2010/01/14/crm-displaying-related-entity-in-iframe-slightly-improved.aspx).

The following method should be called after setting the src value:

function FixStylingInFrameSource(iframeID)
{
// Check the content window's ready state
if (document.getElementById(iframeID).contentWindow.document.readyState != "complete")
{
// Re-run this function in 10 ticks
window.setTimeout(function () { FixStylingInFrameSource(iframeID) }, 2);
}
// Content window is ready
else
{
// Change the background color
document.getElementById(iframeID).contentWindow.document.body.style.backgroundColor = "#eef0f6";
// Remove the left border
document.getElementById(iframeID).contentWindow.document.body.all(0).style.borderLeftStyle = "none";
// Remove padding
document.getElementById(iframeID).contentWindow.document.body.all(0).all(0).all(0).all(0).style.padding = "0px";

// Make the cell the full width of the IFRAME
document.getElementById(iframeID).contentWindow.document.body.all(0).style.width = "102%"

// Show the IFrame
document.getElementById(iframeID).style.display = "block";
}
}


After using this script the IFrame looks a lot nicer:

08 July 2011

CRM 2011 Change SubGrid FetchXML - Updated for rollup 5

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

11 May 2011

Microsoft Dynamics CRM 2011 Practice Exams

So Microsoft are releasing the exams for Dynamcs CRM 2011, currently there are two availabile:




There will be more to follow so I'll try to keep this page upto date.

In terms of getting ready for the exams there are instructor led and e-learning courses available from Microsoft, or you can find all the information you need from the implementation guide and SDK. However how do you know when you're ready to take the exam, the answer is to take practice exams.

Here is a link to the accelerated ideas web-site which offers free practice exams including for the above CRM 2011 exams. I've not taken the proper exams yet but the practice one seems to be asking the sort of questions that I think will be asked in real life.

CRM 2011 JScript IntelliSense

So I've been messing around with CRM 2011 and one of the big things that I like is the Web Resources. It's much nicer to be able to write JScript in Visual Studio rather than the script window in previous versions of CRM.

The only draw-back that I've found is that you need to remember the syntax for the Xrm.Page object. Well help is at hand from PatrickVerbeeten.com

The page shows a link to a js file which you can reference within your JScript files to get IntelliSense.

Happy JScripting....

28 February 2011

Create a WCF Web Service

The following instructions were taken, mostly, from Eric White's blog on MSDN.

The point of this post is to offer a simply no frills guide to getting a WCF web service created and working.

1. There is is some setup that needs to be done before the first WCF service can be created, I'll skip these steps here. For further information check Eric White's blog.

2. Create a folder that will host the web service, e.g. c:\myWebService

3. Open Visual Studio 2010 (or 2008).

4. Click File --> New --> Project.

5. Select the WCF Template category, and WCF Service Application.

6. Set the target .NET Framework.

7. Un-tick "Create directory for solution".

8. Name the project.

9. Choose the location that was created in step 2.

10. Debug through Visual Studio to confirm that the Web Service is working.

11. Open Internet Information Services (IIS) Manager.

12. Create an application pointing to the new Web Service.

13. Change the Authentication so that "Anonymous Authentication", "ASP.NET Impersonation", and "Windows Authentication" are Enabled.

14. Confirm that the application pool user has rights to the WCF folder.

15. Add the .svc file to the Default Document list.

16. Browse to confirm that the service is working through IIS.

08 December 2010

Force CRM 4.0 Record Deletion

As standard CRM 4 deletes records, marked with deletionstatecode=2, on a 24 hourly basis.

Mitch Milam has written, an unsupported, utility that forces the deletion. The utility can be downloaded from his blog: http://blogs.infinite-x.net/2009/08/26/free-utility-run-crm-deletion-service. After installing the utility the exe can be found in \Program Files\CRM Accelerators\Run CRM Deletion Service.

There is also a utility, by Microsoft, that allows you to change the frequency of deletion and re-indexing. This utility is called Scale Group Job Editor. This tool can be downloaded from: http://code.msdn.microsoft.com/ScaleGroupJobEditor