2009-09-14 3 views
0

Je travaille sur un projet lancé par quelqu'un d'autre et j'essaie de corriger quelques bogues. Une entité personnalisée contient une liste d'entités à traiter. Cependant, si une entité personnalisée est supprimée et que la liste n'est pas mise à jour, une erreur est générée.Drnamics CRM - Add on - Vérification de l'existence de l'entité

Je voudrais ajouter une vérification qui garantit que chaque entité traitée est vérifiée pour s'assurer qu'elle existe en premier. Est-ce possible dans CRM? Si oui, quelle est la meilleure façon. Notez que cela a été écrit en C# 2008.

[edit] Note: J'ai seulement le nom de l'entité à utiliser. [fin de modification] Remerciements

Répondre

3

Utilisez le service de métadonnées CRM (sample Metadata code from MSDN for CRM 4). Vous pouvez récupérer une liste de toutes les entités (RetrieveAllEntitiesRequest), puis vérifier à chaque fois dans la boucle si l'entité figure ou non dans cette liste.

0

Pour les versions plus récentes de CRM, vous pouvez utiliser un MetadataFilterExpression pour demander que l'entité que vous êtes intéressé par:

var entityName = "WHATEVER"; 

var entityFilter = new MetadataFilterExpression(LogicalOperator.And); 
entityFilter.Conditions.Add(new MetadataConditionExpression("LogicalName", MetadataConditionOperator.Equals, entityName)); 

// we don't need all of the metadata, so we can just ask for a couple of basic things 
var mpe = new MetadataPropertiesExpression() 
{ 
    AllProperties = false, 
    PropertyNames = {"DisplayName", "ObjectTypeCode", "PrimaryIdAttribute", "PrimaryNameAttribute"} 
}; 

var entityQueryExpression = new EntityQueryExpression() 
{ 
    Criteria = entityFilter, 
    Properties = mpe 
}; 

var retrieveMetadataChangesRequest = new RetrieveMetadataChangesRequest() 
{ 
    Query = entityQueryExpression 
}; 

var metadataResponse = (RetrieveMetadataChangesResponse)orgService.Execute(retrieveMetadataChangesRequest); 

if (metadataResponse.EntityMetadata.Count == 0) 
{ 
    // does not exist 
    Console.WriteLine(entityName + " was not found."); 
} 
else if (metadataResponse.EntityMetadata.Count == 1) 
{ 
    // found entity 
    Console.WriteLine(entityName + " was found."); 
}