Thursday, September 11, 2008

Creating Records for Many to Many Relationship in MS CRM

Have you ever created Many to Many Relationship in MS CRM 4.0 ?

Use AssociateEntitiesRequest Class (CrmService)
Contains the data needed to add a link between two entity instances in a many-to-many relationship.
When you create Many to Many Relationship between two entities (system / Custom), MS CRM 4.0 creates New Table in MS CRM database. The name would be the "Relationship name" which you specified while creating Many to Many relationship.

Now, how do u associate a record to Entities?

Let's say, You have One "Entity: Contact" and other "Entity: New_CustomEntity".

Step 1: Create the record for first "Entity: Contact" (you will get a GUID for this record)

Step 2: Create the record for Second "Entity: New_CustomEntity" (you will get a GUID for this record)

Step 3: When you create Many to Many Relationship between two entities, you will specify "Relationship name" Eg: Contact_New_CustomEntity_ManyToMany

Step 4: Call below method and pass both the Entity Information with Relationship name. For more info see below example.

// Code Create Moniker for first Entity: Contact
Moniker Moniker1 = new Moniker();
Moniker1.Id = new Guid("SPECIFY GUID For the record");
Moniker1.Name =;
// Code Create Moniker for second Entity: New_CustomEntity
Moniker Moniker2 = new Moniker();
Moniker2.Id = new Guid("SPECIFY GUID For the record");
Moniker2.Name = EntityName.New_CustomEntity.ToString();
string strManyToManyRelationshipName = "Contact_New_CustomEntity_ManyToMany"; 
if (ObjCrmHelper.AssociateManyToManyEntityRecords(Moniker1, Moniker2, strManyToManyRelationshipName))
MessageBox.Show("Associated Entities Record.");
MessageBox.Show("Error Occoured.");

//Method which will associate the records.
public bool AssociateManyToManyEntityRecords(Moniker Moniker1, Moniker Moniker2, string strEntityRelationshipName)
// Create an AssociateEntities request.
AssociateEntitiesRequest request = new AssociateEntitiesRequest();

        // Set the ID of Moniker1 to the ID of the lead.
request.Moniker1 = Moniker1;

        // Set the ID of Moniker2 to the ID of the contact.
request.Moniker2 = Moniker2;

        // Set the relationship name to associate on.
request.RelationshipName = strEntityRelationshipName;

        // Execute the request.

        return true;

    catch (SoapException ex)
return false;

Happy Coding !!!!!!


Anonymous said...

Do you know how to delete the many-to-many data?

Anonymous said...

Ok, I see that now, thanks!

Anonymous said...

/ Create a request.
DisassociateEntitiesRequest request1 = new DisassociateEntitiesRequest();

// Assign the request a moniker for both entities that need to be disassociated.
request1.Moniker1 = new Moniker();
request1.Moniker1.Id = new Guid(inprocid);
request1.Moniker1.Name = "product";

request1.Moniker2 = new Moniker();
request1.Moniker2.Id = new Guid(insuppid);
request1.Moniker2.Name = "supplier";

// Set the relationship name that associates the two entities.
request1.RelationshipName = "new_new_supplier_product";

// Execute the request.