CRM 2011 – Verbundene Objekte finden/laden (Get related Entities)

Verbindungen zwischen Entitäten werden in CRM, wie in einer Datenbank, mittels Referenzen abgebildet. Das funktioniert im GUI bzw. im Customizing (welches direkt im CRM passiert) auch sehr gut. Wenn man mittels C#-SDK versucht Entitäten zu bearbeiten/erstellen wird es dann schnell etwas umständlich.

Jeder kennt z.B. folgendes Beispiel: Angebot –> Positionen (1:n). Über die Eigenschaften (Attributes) der Angebot-Entität lässt sich nun nicht mehr ermitteln, wieviele Positionen das Angebot nun besitzt. Um diese Aufgabe zu lösen, habe ich mir zwei Helper-Methoden geschrieben, welche mir eine Collection der (Positionen-)Entitäten oder nur deren PrimaryKeys zurückliefern:

[sourcecode language=“csharp“]
/// <summary>
/// Gets the related projekt standorte.
/// </summary>
/// <param name="organization">The organization.</param>
/// <param name="entityName">Name of the entity.</param>
/// <param name="foreignKeyFieldName">Name of the foreign key field.</param>
/// <param name="foreignKeyFieldValue">The foreign key field value.</param>
/// <param name="columnSet">The column set.</param>
/// <returns></returns>
public static EntityCollection GetRelatedEntities(IOrganization organization, string entityName, string foreignKeyFieldName, string foreignKeyFieldValue, ColumnSet columnSet)
{
ConditionExpression condition = new ConditionExpression();
condition.AttributeName = foreignKeyFieldName;
condition.Operator = ConditionOperator.Equal;
condition.Values.Add(foreignKeyFieldValue);

// Create query expression.
QueryExpression query1 = new QueryExpression();
query1.ColumnSet = columnSet;
query1.EntityName = entityName;
query1.Criteria.AddCondition(condition);

EntityCollection result1 = Helper.OrgService(organization).RetrieveMultiple(query1);

return result1;
}

/// <summary>
/// Gets the related object ids.
/// </summary>
/// <param name="organization">The organization.</param>
/// <param name="entityId">The entity id.</param>
/// <param name="relatedEntityName">Name of the related entity.</param>
/// <param name="relatedEntityPrimaryKeyName">Name of the related entity primary key.</param>
/// <param name="foreignKeyName">Name of the foreign key.</param>
/// <returns></returns>
public static List<string> GetRelatedObjectIds(IOrganization organization, string entityId, string relatedEntityName, string relatedEntityPrimaryKeyName, string foreignKeyName)
{
var relEntities = EntityHelper.GetRelatedEntities(organization, relatedEntityName, foreignKeyName,
entityId, new ColumnSet(relatedEntityPrimaryKeyName));

return relEntities.Entities.Select(entity => entity.Attributes[relatedEntityPrimaryKeyName].ToString()).ToList();
}
[/sourcecode]

Ich hoffe ich konnte euch damit die Arbeit ein wenig verkürzen 😉

Cheers,
Chris

Leave a reply