serving the solutions day and night


Thursday, December 27, 2012

Microsoft Dynamics CRM 2011 Security Model

Microsoft Dynamics CRM 4.0 Security Model
  • Supports a licensing model for users.
  • Provides users with access only to the information that they require to do their jobs
  • Categorizes types of users by role and restrict access based on those roles.
  • Prevents users from accessing objects that they do not own or share.
  • Supports data sharing by providing the ability to grant users with access to objects that they do not own to participate in a specified collaborative effort.
Download Security Model

Create a rough model of your company’s current operational structure. For each section of your organizational layout, you should identify the approximate number of users and the types of business functions those users perform. This rough organizational map to start planning how you want to set up and configure security in your Dynamics CRM deployment.

Friday, December 14, 2012

E-Mail Templates in Microsoft Dynamcis CRM 2011

E-Mail Templates are per-formatted email messages, can use in the different ways:
  • Insert Single or multiple templates into the email body of the messages
  • Send direct email feature by using E-mail templates to send the same message to multiple records (like 1000 contacts).
  • Reference E-mail templates in workflow processes
  • Use E-mail templates in quick campaigns and campaign activities
Dynamics CRM contains more than 20 E-mail templates, like  order, thank you letter, etc.

Organization E-Mail Templates, Click 'Settings' -> Under Business, click 'Templates' -> Click 'E-mail Templates' -> a grid will display all of the E-mail templates ans their types -> Select to view/modify a E-mail template or Create new one.

Thursday, December 13, 2012

Email Tracking in Microsoft Dynamcis CRM 2011

Dynamics CRM help you track and manage email communications with customers. Dynamics CRM can send and receive email using either CRM web client or CRM for Outlook.

Dynamics CRM supports Microsoft Exchange Server, Post Office Protocol 3(POP3) and Simple Mail Transfer Protocol (SMTP) services.

Dynamics CRM E-mail Router acts as an interface between your email system and Microsoft Dynamics CRM. Otherwise Dynamics CRM for Outlook will perform similar routing and tracking functionality on each client computer.

Automatic email tracking for both the organization and the individual users.
Configure Organization's email settings, Click 'Settings' -> under System -> Click 'Administration' -> Click 'System Settings' -> Click 'E-mail' tab.

Saturday, December 8, 2012

CRM Dynamics 2011 OData Query Designer

OData Queries
Select All fields from all board entities

Select specific fields from a specific board entity - g_boardSet(guid'{11b8a0d5-5328-e211-913d-0050568c5ad}')?$select=g_lastname,g_state

Select all board entities ordered by first name - select=g_lastname,g_state&orderby=g_firstname

All board entities with 'k' in their last name - orderby=gab_firstname&$filter=substringof('k',g_lastname)

number - CreditLimit/Value gt 1000
beginning/ending with z - &$filter=startswith( gab_lastname,'z'), endswith( gab_lastname,'z'), substringof('store',Name)
string or pick list - $filter=gab_ZipCode eq '68105'
Date time - filter=gab_DOB gt datetime'2012-09-01'
Lookup or entity reference - filter=gab_State/Id eq guid'{6512AB94-77F3-E111-9564-0050568C5AD0}'

$expand - Retrieve related records.
For example, to retrieve opportunity records related to accounts,
the query /AccountSet?$expand=opportunity_customer_accounts returns the opportunity records and the account records.

$skip - Sets the number of records to skip before it retrieves records in a collection. - $skip=2

$top - Determines the maximum number of records to return. Products?$top=5

Use the REST Endpoint for Web Resources
The REST endpoint for web resources provides an alternative interface to work with CRM data. You can use the REST endpoint to execute HTTP requests by using a service that is based on a Uniform Resource Identifier (URI).

MS Dynamics CRM Implementation of REST
MS Dynamics CRM 2011 uses the Windows Communication Foundation (WCF) Data Services framework to provide an Open Data Protocol (OData) endpoint that is a REST-based data service. This endpoint is called the Organization Data Service. In Microsoft Dynamics CRM, the service root URI is: [Your Organization Root URL]/xrmservices/2011/organizationdata.svc

OData sends and receives data by using either ATOM or JavaScript Object Notation (JSON). ATOM is an XML-based format. JSON is a text format that allows for serialization of JavaScript objects.

OData Entity Data Model (EDM)
An EDM organizes the data in the form of records of "entity types" and the associations between them.

The MS Dynamics CRM EDM is described in an OData Service Metadata document available at the following path: [Your Organization Root URL]/xrmservices/2011/organizationdata.svc/$metadata

Web Service Data in Web Resources (REST and SOAP Endpoint)

Assign Records, Retrieve Metadata, Execute Messages - SOAP Endpoint Web Serive
<organization URL>/XRMServices/2011/Organization.svc?wsdl

OData System Query Options Using the REST Endpoint

Create, Retrieve, Update, Delete, Associate and Disassociate records  - REST Endpoint Web Service

The REST endpoint provides an alternative to the WCF SOAP endpoint, but there are currently some limitations.
  • Only Create, Retrieve, Update, and Delete actions can be performed on entity records.
  • The REST endpoint does not provide all the capabilities available in the SOAP endpoint.
  • Authentication is only possible within the application.
  • The OData protocol is not fully implemented. Some system query options are not available.
    You cannot use late binding with managed code with Silverlight.
CreateOrUpdateContact: function () {
var objVoter = {};
var emptyID = "00000000-0000-0000-0000-000000000000";

objContact.AddressID = { Id: "12345678-9011-1213-1415-161718192021", LogicalName: "address" };
objContact.ContactType = { Value: 750001 };
objContact.RegistrationDate = regDate;
objContact.FirstName = firstName;
objContact.LastName = lastName;
objVoter.StatusCode = { Value: 757580013 };

var jsonEntity = window.JSON.stringify(objVoter);
var odataPath = CommonOperations.GetCrmUrl() + "/XRMServices/2011/OrganizationData.svc/ContactSet";
if (queryParams.contactid != null) odataPath += "(guid'" + queryParams.contactid + "')";

type: "POST",
async: false,
contentType: "application/json; charset=utf-8",
datatype: "json",
url: odataPath,
data: jsonEntity,
beforeSend: function (XMLHttpRequest) {
    XMLHttpRequest.setRequestHeader("Accept", "application/json");
    //update existing record
    if (queryParams.contactid != null) XMLHttpRequest.setRequestHeader("X-HTTP-Method", "MERGE");
success: function (response, textStatus, xhr) {
error: function (XmlHttpRequest, textStatus, error) {

//"/XRMServices/2011/OrganizationData.svc/ContactSet(guid'" + queryParams.contactid + "')";
XMLHttpRequest.setRequestHeader("X-HTTP-Method", "DELETE");

 GenerateEnvelope: function (request) {
        var envelope = "";
        envelope += "<s:Envelope xmlns:s=\"\">";
        envelope += "  <s:Body>";
        envelope += "    <Execute xmlns=\"\" xmlns:i=\"\">";
        envelope += request;
        envelope += "    </Execute>";
        envelope += "  </s:Body>";
        envelope += "</s:Envelope>";
        return envelope;
GenerateRequest: function (requesttype, keyvalue, requestname) {
        var request = "";
        request += "      <request ";
        if (requesttype.length >0)
            request += "      i:type=\"b:" + requesttype + "\" ";
        request += "       xmlns:a=\"\" xmlns:b=\"\">";
        request += "        <a:Parameters xmlns:c=\"\">";
        request += keyvalue;
        request += "        </a:Parameters>";
        request += "        <a:RequestId i:nil=\"true\" />";
        request += "        <a:RequestName>" + requestname + "</a:RequestName>";
        request += "      </request>";
        return request;
    EntityReferenceKeyValue: function (key, entityname, id) {
        var kv = "<a:KeyValuePairOfstringanyType>";
        kv += "     <c:key>" + key + "</c:key>";
        kv += "     <c:value i:type=\"a:EntityReference\">";
        kv += "         <a:Id>" + id + "</a:Id>";
        kv += "         <a:LogicalName>" + entityname + "</a:LogicalName>";
        kv += "         <a:Name i:nil=\"true\" />";
        kv += "     </c:value>";
        kv += "</a:KeyValuePairOfstringanyType>";
        return kv;

StringAnyTypeKeyValue: function (key, datatype, value) {
        var kv = "<a:KeyValuePairOfstringanyType>";
        kv += "     <c:key>" + key + "</c:key>";
        kv += "     <c:value i:type=\"a:" + datatype + "\">";
        kv += "         <a:Value>" + value + "</a:Value>";
        kv += "     </c:value>";
        kv += "</a:KeyValuePairOfstringanyType>";
        return kv;

ExecuteSoap(envelope) {
        type: 'POST',
        async: false,
        url: Xrm.Page.context.getClientUrl()+"/XRMServices/2011/OrganizationData.svc/",
        contentType: 'text/xml; charset=utf-8',
        headers: {
            SOAPAction: ""
        data: envelope,
        success: function (data, textStatus, XmlHttpRequest) {
        error: function (XmlHttpRequest, textStatus, error) {

Change record Owner
var contactid = "get record id";
var teamid = "get current login user team id";
var keyvalue = EntityReferenceKeyValue("Target", "contact", contactid);
keyvalue += EntityReferenceKeyValue("Assignee", "team", teamid);
var request = GenerateRequest("AssignRequest", keyvalue, "Assign")
var envelope = GenerateEnvelope(request);

Retrieve Principal Access Request:
var userid = "get current login user id";
var contactid = "get contact record id";
var keyvalue = EntityReferenceKeyValue("Target", "contact", contactid);
keyvalue += EntityReferenceKeyValue("Principal", "systemuser", userid);
var request = GenerateRequest("RetrievePrincipalAccessRequest", keyvalue, "RetrievePrincipalAccess")

Change State and Status Reason
var keyvalue = EntityReferenceKeyValue("EntityMoniker", "contact", voterid);
keyvalue += StringAnyTypeKeyValue("State", "OptionSetValue", state);
keyvalue += StringAnyTypeKeyValue("Status", "OptionSetValue", status);
var request = GenerateRequest("SetStateRequest", keyvalue, "SetState")

Call Action
var StaffContactEntityName = "staffcontact",
    StaffContactEntityId = "{12341234-1234-1234-5668-7890568C3250}",
    ContactEntityName = "contact",
    ContactEntityId =,
    ActionUniqueName = "SendEmail_Action"
    var keyvalue = EntityReferenceKeyValue('Target', ContactEntityName, ContactEntityId);
    keyvalue += EntityReferenceKeyValue('ChiefOfficial', StaffContactEntityName, StaffContactEntityId);
var request = GenerateRequest('', keyvalue, ActionUniqueName);

Share Record
var keyvalue = EntityReferenceKeyValue("Target", "contact", contactid);
keyvalue += "          <a:KeyValuePairOfstringanyType>";
keyvalue += "            <c:key>PrincipalAccess</c:key>";
keyvalue += "            <c:value i:type=\"b:PrincipalAccess\">";
keyvalue += "              <b:AccessMask>ShareAccess WriteAccess</b:AccessMask>";
keyvalue += "              <b:Principal>";
keyvalue += "                <a:Id>" + userId + "</a:Id>";
keyvalue += "                <a:LogicalName>systemuser</a:LogicalName>";
keyvalue += "                <a:Name i:nil=\"true\" />";
keyvalue += "              </b:Principal>";
keyvalue += "            </c:value>";
keyvalue += "          </a:KeyValuePairOfstringanyType>";
var request = GenerateRequest("GrantAccessRequest", keyvalue, "GrantAccess")

Thursday, December 6, 2012

Creating Custom Action in External Content Type (ECT) - SharePoint 2010.

How to create  External Content Type (ECT), See the below blog up to points 12,

The new action will not be available in existing external lists of that external content type. Only new external lists of the appropriate external content type will display the action in the shortcut menu.

If you create External List (Point 13) before create new action, the new action won't display.

Wednesday, December 5, 2012

Integrating Dynamics CRM 2011 Data into SharePoint 2010

  1. Open the SharePoint site in SharePoint designer 2010.
  2. Select External Content Types and click External Content Type (ECT).
  3. Use the following settings on it
    Name: CRM Board Entity
    Display Name: CRM Board Entity
    Click on link next to External System.

Friday, November 30, 2012

Dynamics CRM 2011 Integration with SharePoint 2010

The Dynamics CRM 2011 List component for SharePoint makes your CRM documents that are stored on SharePoint 2010 available to you in a format that has the look and feel of Dynamics CRM.

This component also enables Dynamics CRM to automatically create folders that will be used to store documents related to Microsoft Dynamics CRM records on SharePoint. It also display the SharePoint List in your CRM.

SharePoint 2010
  1. Download the Microsoft Dynamics CRM 2011 List Component for SharePoint
  2. Double Click the downloaded CRM2011-SharePointList-ENU-amd64.exe.
  3. Select a folder to store the extracted files, and click OK.
    The following files are extracted:, crmlistcomponent.wsp, mscrmsharepointeula,txt.
  4.  Open SharePoint Central Administration or Site Collection website.
  5. Click Site Actions, then click Site Settings.
  6. Under Galleries, click solutions.
  7. On the Solutions tab, in the New group, click Upload Solution.
  8. Click Browse, locate the crmlistcomponent.wsp file, and then click OK.

Thursday, November 29, 2012

SharePoint 2010 - Create List, Update Document, Link to Other List using c#

This post contains mostly c# code. Code contains to create/update List, folder, link to other list and update word document.

using Microsoft.SharePoint.Client;

namespace CreateReportForPlacesV2
    public class SharePoint
        // Defines a private SharePoint site, like "http://<Server Name>/"
        private string spSite = System.Configuration.ConfigurationManager.AppSettings["SPSite"].ToString();

        // Defines a private SharePoint document, like "Reporting Documents".
        private string spDoc = System.Configuration.ConfigurationManager.AppSettings["SPReportingDocument"].ToString();

        // Defines a private SharePoint place list name, like "Place Details".
        private string spPList = System.Configuration.ConfigurationManager.AppSettings["SPPlaceDetailsList"].ToString();

        // Defines a private SharePoint C list is used to link to Place list details.
        private string spCList = System.Configuration.ConfigurationManager.AppSettings["SPCList"].ToString();

Wednesday, November 28, 2012

Display SharePoint List in CRM Dynamics 2011

SharePoint 2010

1)Create a new View and type a name CRMView , and select “standard View”, select the display columnnames and also ZipCode column name, press OK to save the new view.