Wednesday, September 24, 2008

Check Number of notes attached to a Crm Record.

Write below code on save of the entity.

if (crmForm.FormType == CRM_FORM_TYPE_CREATE)
    var obj=document.frames(”notescontrol”).document;
    var textarea=obj.getElementsByTagName(’TEXTAREA’);
    if (textarea.length < 1)
        alert (”please eneter somenotes”);
        // Cancel the save
        event.returnValue = false;

CRM Form Types

Is the user creating a new record?
crmForm.FormType == 1

Is the user updating an existing record
crmForm.FormType ==2

Is the user unable to update this record?
crmForm.FormType == 3

Is this record deactivated?
crmForm.FormType == 4

Is the user using the Quick Create form?
crmForm.FormType == 5

Is the user using the Bulk Edit form?
crmForm.FormType == 6

What is the unique ID for this record?
= crmForm.ObjectId

What type of record is this?
= crmForm.ObjectTypeCode

What type of record is this (Entity Name)?
= crmForm.ObjectTypeName

Is the user using the Outlook Client?

Is the user using the Outlook Light Client?
crmForm.IsForOutlookLightClient == true

Is the user working On line?

Have any fields in this form been changed?

Hide all Tabs on CRM Form

//Below is the javascript code, which will hide all tabs on CRM form.
document.getElementById("crmTabBar").style.display = "none";

//If you want to hide a specific tab, use below code:
document.getElementById("tab0Tab").style.display = "none";

//Here "tab0Tab" is first tab on the Crm Form.

Tuesday, September 23, 2008

How to attach onClose event to MS CRM Entity.

When you work with CRM Forms, if you want to capture / attach a onClose() Event, just use below javascript code.

window.onunload = function() {
//add code here

Delete / DisAssociate Many to Many Relationship Record.

When you say DisAssocaiating a Many to Many Relationship Record, then you usually deattach the record, you won't delete the record.

Below function will DisAssocaiate a record. Here, you need to pass three parameter values
Parent Entity Guid,
Child Entity Guid, and
Relationship Name.

public bool DisassociateManyToManyEntityRecords(Moniker Moniker1, Moniker Moniker2, string strEntityRelationshipName)
// Create a request.
DisassociateEntitiesRequest request = new DisassociateEntitiesRequest();

        // Assign the request a moniker for both entities that need to be disassociated.
request.Moniker1 = Moniker1;
request.Moniker2 = Moniker2;

        // Set the relationship name that associates the two entities.
request.RelationshipName = strEntityRelationshipName.Trim();
        // Execute the request.
DisassociateEntitiesResponse response = (DisassociateEntitiesResponse)Service.Execute(request);

        return true;

    catch (SoapException ex)
return false;

Retrieve Associated Many to Many Relationship Records.

In our last post we have seen "Creating Records for Many to Many Relationship in MS CRM".

Now how do you retrieve the (many to many) records ?

Its Very Easy .... :) I'm serious.... See below function........

Lets assume, we have "Hotel Reservation" and "Guest" Entity. We have many to many relationship between Guest and HotelReservation Entity.

Below function will return the list of Hotel Reservations (Guids) for the Guest.

public List GetAllAssocaitedRecords(Guid GuestGuid) 
    string strEntityRelationshipName = "Specify Relationship Name";
    List ObjHotelReservationGuids = new List();
    string fetchXml = @"<fetch mapping=""logical""> <entity name=""@HotelReservationContactRelation"">
                            <all-attributes />
                                <condition attribute=""contactid"" operator=""eq"" value =""@GuestGuid"" />
    fetchXml = fetchXml.Replace("@GuestGuid", GuestGuid.ToString());
    fetchXml = fetchXml.Replace("@HotelReservationContactRelation", strEntityRelationshipName );
    string strResult = Service.Fetch(fetchXml);
    XmlDocument xmlDoc = new XmlDocument(); xmlDoc.LoadXml(strResult);
    XmlNodeList nodeList = xmlDoc.SelectNodes("resultset/result");
    if (nodeList.Count > 0)
        foreach (XmlNode xmlNode in nodeList)
            ObjHotelReservationGuids.Add(new Guid(xmlNode.SelectSingleNode("neuguest_hotelreservationid").InnerText));
    return ObjHotelReservationGuids;

Happy Coding !!!!!

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 !!!!!!