Dynamics CRM in the Field

Information from the Microsoft Dynamics CRM PFE team working in the field

How to Create a Simple Webpage Leveraging The CRM 2011 IOrganizationService Web Service

How to Create a Simple Webpage Leveraging The CRM 2011 IOrganizationService Web Service

Rate This
  • Comments 31

Recently I have received a lot of questions about how to get started in developing against CRM 2011. The SDK provides many different examples and helper classes which can be reused to save some time when developing applications. For someone new at developing for CRM, the robust SDK examples may be more than they want to start with.

Below I have provided steps to create a simple webpage that uses the IOrganizationService Web Service to create contacts in CRM. The late bound Entity class will be used for this walkthrough therefore the entity and attribute names must be known. This is a simplified solution that does not use any of the helper classes provided in the SDK and will only support AD authentication. The user that runs this webpage will need to be a CRM user in order for the example to work.

Scenario:

The CRM users need the ability to add contacts into the CRM system without using the main CRM application. They would like a simple data entry website with minimal fields. To accomplish this, we will develop an asp.net website that connects to the CRM 2011 platform using the IOrganizationService Web Service. The custom website will allow the user to specify the contact name, email address, and phone number. When the submit button is pressed on the page it will automatically create the contact record within CRM.

 

Requirements:

  • Visual Studio 2010
  • CRM 2011 SDK

 http://www.microsoft.com/downloads/en/details.aspx?FamilyID=420f0f05-c226-4194-b7e1-f23ceaa83b69 

Create a Custom Web Site

 Step by Step

1.        Create a new Web Site:

a.       Open Visual Studio 2010 to create a new web site.

b.       Click File | New | Web Site.

c.        Under Installed Templates, click Visual C# and choose ASP .NET Empty Web Site. Name the project "CRMContactDataEntry". Click OK.

d.       Click Website|Add New Item. This is the actual aspx page that we will develop on.

e.       Under Installed Templates, click Visual C# and choose Web Form. Click OK.

2.       Add a Title and Field Names to the Default.aspx page.

a.      Within Solution Explorer right click on the Default.aspx page and choose View Designer.

image

b.       Click in the box on the Default.aspx page and type the text “CONTACT ENTRY FORM” to give the page a title.

image

c.        Hit the Enter Key to create a new line below the title and type the text “First Name“.

d.       Add three more lines with the text “Last Name “, “Email Address ”, and “Phone Number ”.

image 

3.       Add four Textbox’s and a Button to the aspx page.

a.       Click View|Toolbox. When the toolbox window opens click the pin icon to keep the window open.  

image

b.       Find the TextBox control within the Toolbox window. Drag the TextBox control onto the Default.aspx page behind the text “First Name”. This creates a single Textbox on the page.

image

c.        Right click the TextBox control on the default.aspx page and choose Properties. The properties window will display on your right hand side.

image

d.       Find the ID property and change the value to txtFirstName.

image

e.       Repeat steps b-d to create three more TextBox’s with the following names.

·   txtLastName

·   txtEmailAddress

·   txtPhoneNumber                      

f.         Find the Button control within the Toolbox window. Drag the Button control onto the Default.aspx page Under the text “Phone Number”. This creates a single Button on the page.

image

g.       Right click the Button control on the default.aspx page and choose Properties. The properties window will display on your right hand side.


image

h.       Find the Text property and change the value to Submit.

image

4.       Add code to the Button’s Click Event.

a.       Double-Click the Button control on the Default.aspx page. This will take you to the Default.aspx.cs file where we can see the Button1_Click method.


image

b.        Add the following code within the Button1_Click code method.

NOTE: You will need to update the Organization URL to match your CRM Servername and OrgName. (i.e. “http://crmsrv:5555/org1/XRMServices/2011/Organization.svc”)

protected void Button1_Click(object sender, EventArgs e)

    {

        //Authenticate using credentials of the logged in user;       

        ClientCredentials Credentials = new ClientCredentials();

        Credentials.Windows.ClientCredential = CredentialCache.DefaultNetworkCredentials;

        //This URL needs to be updated to match the servername and Organization for the environment.

        Uri OrganizationUri = new Uri("http://<SERVERURL>/<ORGNAME>/XRMServices/2011/Organization.svc");

        Uri HomeRealmUri = null;

 

        //OrganizationServiceProxy serviceProxy;       

        using (OrganizationServiceProxy serviceProxy = new OrganizationServiceProxy(OrganizationUri, HomeRealmUri, Credentials, null))

        {

            IOrganizationService service = (IOrganizationService)serviceProxy;

 

            //Instantiate the contact object and populate the attributes.

            Entity contact = new Entity("contact");

            contact["firstname"] = txtFirstName.Text.ToString();

            contact["lastname"] = txtLastName.Text.ToString();

            contact["emailaddress1"] = txtEmailAddress.Text.ToString();

            contact["telephone1"] = txtPhoneNumber.Text.ToString();

            Guid newContactId = service.Create(contact);

           

            //This code will clear the textboxes after the contact is created.

            txtFirstName.Text = "";

            txtLastName.Text = "";

            txtEmailAddress.Text = "";

            txtPhoneNumber.Text = "";

        }

    } 

5.       Add the Microsoft.Xrm.Sdk and Microsoft.crm.sdk.proxy assemblies as references.

a.       Locate the Solution Explorer, right-click the ProjectName and choose Add Reference.

image

b.       In the Add Reference browser window, click the Browse tab and browse to the location of this assembly reference (this is located in the Bin directory of the downloaded SDK).

c.        Choose Microsoft.Xrm.Sdk and Microsoft.crm.sdk.proxy, click OK.

image

d.       Add the following using statements at the top of the Default.aspx.cs file.

using System.ServiceModel.Description;

using Microsoft.Xrm.Sdk.Client;

using System.Net;

using Microsoft.Xrm.Sdk;

e.       The completed code should look similar to the following.

using System;

using System.Collections.Generic;

using System.Linq;

using System.Web;

using System.Web.UI;

using System.Web.UI.WebControls;

using System.ServiceModel.Description;

using Microsoft.Xrm.Sdk.Client;

using System.Net;

using Microsoft.Xrm.Sdk;

 

public partial class _Default : System.Web.UI.Page

{

    protected void Page_Load(object sender, EventArgs e)

    {

 

    }

    protected void Button1_Click(object sender, EventArgs e)

    {

        ClientCredentials Credentials = new ClientCredentials();

        Credentials.Windows.ClientCredential = CredentialCache.DefaultNetworkCredentials;

        //This URL needs to be updated to match the servername and Organization for the environment.

        Uri OrganizationUri = new Uri("http://<ServerName>/<Orgname>/XRMServices/2011/Organization.svc");

        Uri HomeRealmUri = null;

 

        //OrganizationServiceProxy serviceProxy;       

        using (OrganizationServiceProxy serviceProxy = new OrganizationServiceProxy(OrganizationUri, HomeRealmUri, Credentials, null))

        {

            IOrganizationService service = (IOrganizationService)serviceProxy;

 

            //Instantiate the contact object and populate the attributes.

            Entity contact = new Entity("contact");

            contact["firstname"] = txtFirstName.Text.ToString();

            contact["lastname"] = txtLastName.Text.ToString();

            contact["emailaddress1"] = txtEmailAddress.Text.ToString();

            contact["telephone1"] = txtPhoneNumber.Text.ToString();

            Guid newContactId = service.Create(contact);

           

            //This code will clear the textboxes after the contact is created.

            txtFirstName.Text = "";

            txtLastName.Text = "";

            txtEmailAddress.Text = "";

            txtPhoneNumber.Text = "";

        }

    }

}

6.       Compile and Run the Custom Page.

a.       Click Build|Build Solution. If everything is correct you will see it say Build Succeeded at the bottom of the Visual Studio Window.

image

b.       Click Debug|Start Debugging. This will launch the website locally within Internet Explorer and allow for testing.

c.        Enter information into each of the text boxes and then click the Submit button. The textboxes will automatically clear out once the contact has been created.

Note: The user will need to be a CRM user for the contact to be created.

image

d.       Open the CRM Web Client to see the newly created Contact Record.

image

 

  • Looks great..

    It works for CRM 2011 online?

  • This sample uses AD authentication which will only work with CRM 2011 On-Premise. The authentication would be different to work correctly with CRM 2011 Online. The CRM 2011 Online authentication it is a little more complicated and would be best to use the Helper class provided with the CRM SDK. In the SDK documentation there is some sample code and pre-built applications. If you search the SDK for "Quick Start: A Simple Program" there is a console application using the helper class that will work with CRM Online. I plan on writing another blog entry with steps on using the Helper class.

  • Thanks  alot.. I'm looking forward for your blog on Helper class.

    Hopefully on CRM online authentication :)

  • I'm getting this error "The provided uri did not return any Service Endpoints!"

    at

    using (OrganizationServiceProxy serviceProxy = new OrganizationServiceProxy(OrganizationUri, HomeRealmUri, Credentials, null))

    Please help..

  • Hi,

    May need your advice -- how to deploy it to the web using iis? I'm developing the customer form and gathering customer registration details from the web.

    The steps I did was --

    1. Publish the web project at visual studio 2010 (.net 4.0)

    2. Copy the files to inetpub

    3. Convert the folder to Application

    As result, I still not able to view the page..

    Anything wrong here?

  • ABZ,

    In the code make sure the following line of code is updated to match the url you access CRM with and that you can access this URL within IE. It should pull up a page with information about the endpoint.

         Uri OrganizationUri = new Uri("http://<SERVERURL>/<ORGNAME>/XRMServices/2011/Organization.svc");

    If the URL is correct it could also happen if you have more than one binding on the CRM website. Similar issues would be noticed if you tried to configure the CRM 2011 Email Router.

    support.microsoft.com/.../2501732

  • Does this work for IFD ? I am getting the 'The user authentication failed' error, however if i hardcode the use name and password, it works fine.. Can you explain if any settings to be done in web.config

  • Bilu,

    This page was developed to use Windows authentication so it would be expected that you are logged in on a domain machine with a CRM user. You would need to change the authentication in the code to work with claims.

  • What would you have to do to change this app to update records instead of creating new ones?

    Thanks!

  • Does creating aspx web pages and integrating with dynamics crm 2011 is supported by MS? In the SDK they are recommending to use web resources such as silverlight.

  • Great tutorial.

    developer like me who is new to CRM build in one go. THANKS.

  • Justin- To update values you would just need to run the service.Update instead of service.Create. It would also require you to pass the contactid attribute in the object. Otherwise basically the same.

    Mukesh- If the page will be displayed in CRM then you'd want to develop in a way that can be used in a web resource. However if you are developing a page that will be outside of CRM this is one route that you can take. For example it could be a page on an intranet site to enter some sort of records into CRM.

  • How to get attribute names from crm (customer has a possibility to add fields) in order to use them for late-binding?

  • I am trying to write a similar solution using a console app, where I will read in a data file and add one CRM Contact for each record in the file. Although I have added Microsoft.Xrm.sdk as a Reference, the Imports statements for Microsoft.Xrm.Sdk.Client and Microsoft.Xrm.Sdk are not resolving. There is no error message and no suggested correction.

    Can you point me in the right direction?  Thanks.

  • thanks,this was very useful to me,Now i want to update this fields in existing crm records...can anyone help me...

Page 1 of 3 (31 items) 123
Leave a Comment
  • Please add 1 and 4 and type the answer here:
  • Post