Code Generating Code…programmatically retrieve N:N relationships

Gayan Perera, 07 January 2012

We recently needed to write a plugin that associated multiple different record types with a custom entity. The custom entity contained over 30 system many to many relationships with the other record types.

We could’ve taken a couple of different approaches. One would’ve been to dynamically retrieve the relationship when the plugin ran, this means an extra call to the CRM service. The other option was to have a static dictionary mapping inside the plugin code.

We chose the 2nd option because the relationships would not change and there is no need to make an additional call to the CRM service.

Now we had the time consuming task of copy pasting attributes and schema names from the customizations area. 30-45 seconds per copy paste would have taken around 15-20mins but there’s a better, less error prone way.

Write a small console application to retrieve the N:N relationships for the entity and write out to the debug window and copy paste.

Here’s the code, enjoy!

IOrganizationService sdk = null; // connect to crm here
 
RetrieveEntityRequest request = new RetrieveEntityRequest();
request.RetrieveAsIfPublished = true;
request.LogicalName = "...your entity name here...";
request.EntityFilters = EntityFilters.Relationships;
 
RetrieveEntityResponse response = (RetrieveEntityResponse)sdk.Execute(request);
EntityMetadata metadata = response.EntityMetadata;
 
if (metadata != null && metadata.ManyToManyRelationships != null)
{
    metadata.ManyToManyRelationships.ToList().ForEach(nn =>
    {
        System.Diagnostics.Debug.WriteLine("");
    });
}