vendredi 5 février 2016

Créer un enregistrement avec des enregistrements associés

Il vous est sûrement déjà arrivé de devoir créer un enregistrement avec des enregistrements associés lors de la création.
Lorsque qu'on débute sur MS CRM, la méthode la plus "simple" est de créer les enregistrements associés avant l'enregistrement parent et enfin de mettre à jour les enfants pour qu'ils fassent référence au parent.
Cette méthode possède un gros point noir : si une erreur survient sur les enfants, l'enregistrement parent sera créé tout de même (tout du moins, si l'on ne se trouve pas dans une transaction).

Il existe une méthode plus propre à mon sens car ce dernier problème est résolu, tous les enregistrements sont créés dans une transaction commune.
Un exemple vaut plus que de longues phrases donc voici un bout de code qui permet de faire une création simultanée :
public void CreateRecord()
{
    Entity parentEntity = new Entity("new_parententity");
    parentEntity["new_name"] = "Entité parente";
    
    // Crée une collection d'entité contenant les enregistrements associés
    EntityCollection childEntityCollection = new EntityCollection { EntityName = "new_childentity" };
    
    // Ajoute 3 enregistrements enfants à la collection
    for (int i = 0; i < 3; i++)
    {
        Entity childEntity = new Entity("new_childentity");
        childEntity["new_name"] = string.Format("Entité enfant {0}", i + 1);
        childEntityCollection.Entities.Add(childEntity);
    }
    // Associe les enregistrements enfants à l'enregistrement parent
    parentEntity.RelatedEntities.Add(new Relationship("new_parententity_childrenentities"), childEntityCollection);
    
    // Crée l'enregistrement parent et les enregistrements associés en une seule instruction
    // OrganizationService est une instance de l'interface IOrganizationService
    OrganizationService.Create(parentEntity);
}
Comme vous pouvez le constater, rien de plus facile que de créer les enregistrements en une seule fois !

Source : TechNet