Cry about...
Dynamics CRM 2011 How To
How to get all the entities in a one to many relationship (C#)
I had an entity which had a one to many relationship with a second entity, those second entities were listed on a sub-grid on a form and I needed a way to get those entities in a plugin.
The idea is straight forward, query the relationship between the entity and the entities in the sub-grid.
So, given the Entity, the logical name of the related entity and the
logical name of the relationship the following function will return a
EntityCollection
of the related entities:
public EntityCollection ListRelatedEntities(Entity parent,
string
relationshipLogicalName, string relatedEntity)
{
// The
relationship both (i.) defines the
// relationship to the 'relatedEntity'
and
// (ii.) acts as a key into responses back.
Relationship
relationship = new Relationship()
{
SchemaName =
relationshipLogicalName
};
RelationshipQueryCollection relatedEntityCollection
= new RelationshipQueryCollection();
relatedEntityCollection.Add(relationship,
new QueryExpression()
{
EntityName = relatedEntity,
ColumnSet =
new ColumnSet(true)
});
RetrieveRequest request = new RetrieveRequest()
{
RelatedEntitiesQuery = relatedEntityCollection,
ColumnSet = new
ColumnSet(true),
Target = new EntityReference
{
Id = parent.Id,
LogicalName = parent.LogicalName
}
};
RetrieveResponse
response = (RetrieveResponse)this._crmService.Execute(request);
if
(response == null) return null;
if (response.Entity == null) return
null;
return response.Entity.RelatedEntities[relationship];
}
The above should work for both an N:N relationship as well as a 1:N relationship.
These notes have been tested with Microsoft Dynamics CRM 2011, and may apply to other versions as well.
About the author: Brian Cryer is a dedicated software developer and webmaster. For his day job he develops websites and desktop applications as well as providing IT services. He moonlights as a technical author and consultant.