Saturday, 1 November 2014

Creating New Organization in CRM 2013 Step by step



Here I am going to share how to create new Organization in CRM 2013.
Goto "C:\Program Files\Microsoft Dynamics CRM\tools\ " and click on  “Microsoft.Crm.DeploymentManager.exe”

You will see below screen





Click on Organizations button in left panel




Click on New Organization… under right hand side panel under Actions >> Organizations




It will pop up the below screen.




Enter Display name, Unique Data Base Name, base currency and other details as shown below  and click on Next button




Click on Next again




It will pop up data base server name or you can select database from the dropdown list and click on Next button



Pop up you the reporting server URL or enter the reporting server URL and click on Next



Ignore warn message because I did not upgrade in Dev if you want upgrade you can find more information below.
Data encryption will be active after the install or upgrade. We strongly recommend that you copy the organization encryption key and store it in a safe place. For more information, see http://go.microsoft.com/fwlink/?LinkId=316366.

And click on Next




Finally click on Create












Friday, 31 October 2014

Hiding ‘Activities’ and ‘Closed Activities’ from Custom Entity forms in Dynamic CRM 2013



One of the most common and general requirement in dynamic CRM implementations is hiding Activities and Closed Activities in Custom Entities.

For System Entities, CRM allows you to remove Activities and Closed Activities from the forms customization window.





But when coming to Custom Entities the actual problem comes into picture, we cannot see the above options from forms customization window.






To hide Activities and Closed Activities Button from the ribbon we need to load below JavaScript to programmatically set the visibility is false for the Activities and Closed Activities.

function hideLeftNavItems() {
    Xrm.Page.ui.navigation.items.forEach(
function (item, index) {
        
var lblItem = item.getLabel();

         if (lblItem == "Activities" || lblItem == "Closed Activities") {
            item.setVisible(
false);
        }
    });
}

Thursday, 23 October 2014

Building queries with FetchXML – MS CRM

CRM offers different querying patterns to use build queries. In this module we are going to discuss about some theory about building queries with Fetch XML and followed by demo

With Fetch XML you can use all standard query operators and partial values. Fetch XML is really powerful you can do all these checks with query expressions or date related examples.  You can also combine multiple conditions.
1)      Standard Operators Examples
Ex: eq, neq, ne, gt, ge, le, lt, like, not-like, in, not-in, null, not-null

2)      Partial value Examples
Ex: Begins-with, ends-with, not-end-with, not-begin-with

3)      Date Related Examples
·         Today, tomorrow, last-seven-days, this-week, this-month, next-month
·         This-fiscal-year, next-fiscal year
·         On, on-or-before/after

Getting Related Data
  1.  Useful to reference and include data from N:1 related entities
  2.   We Can specify filter conditions based on the related data

Using Aggregation
Unique and powerful features with Fetch XML is Aggregation
  1.  Enable aggregates vis aggregate= true and distinct=false on <fetch   tag
  2. Can have one or more attributes with aggregate specified.
  3.  Avg, Count, Max, Min and Sum

Ex:
Null values are not considering in computing averages, zeros are
Null, 100, 100, 1000 would have average of 100
Null, 100, 0, 1000 would have average of 66.66
Null, 100, Null, 100 would have average of 100

<fetch  distinct='false' mapping ='logical' aggregate='true'>
<entity name='opportunity'>
<attribute name='estimatedvalue' aggregate='avg' alias='estimatedvalue_avg' />
<attribute name='estimatedvalue' aggregate='min' alias='estimatedvalue_min' />
<attribute name='estimatedvalue' aggregate='max' alias='estimatedvalue_max' />
</ entity>
</ fetch>

Using Grouping
Grouping is another powerful feature we can do.

  1. Can group on normal attributes – can’t group by virtuals
  2.  For dates you must specify a dategrouping                                                                                Ex: Year, quarter, month, weekly or day
  3. Group can be specifies for Linked Entity.

<fetch  distinct='false' mapping ='logical' aggregate='true'>
<entity name='opportunity'>
<attribute name='statecode' groupby='true' alias='state' />
<attribute name='createdon' groupby='true' alias='state' dategroupping='month' alias='created' />
<attribute name='estimatedvalue' aggregate='avg' alias='estimatedvalue_avg' />
<attribute name='estimatedvalue' aggregate='min' alias='estimatedvalue_min' />
<attribute name='estimatedvalue' aggregate='max' alias='estimatedvalue_max' />
</ entity>
</ fetch>
Limitations in Fetch XML

There are some limitations to Fetch XML query expression
  1. No Union Support – instead you have to use multiple queries
  2. No concept of sub queries
  3. Fetch aggregates are limited to 50,000 records by default (online is limit to 50,000)  AggregateQueryRecordLimit is the setting for on-premise
  4. Liked entities are limited to 10
  5. Conditions can’t be to other fields on the entity
  6. No way to do “or” conditions across linked entities
Demo:

Here we are going to build out an aggregate query against the entity called Account

    1) Goto File >> Click on New >> Click on Project >> Select console application






     2)  Check references. “CrmServiceHelpers.cs” and “DeviceIdManager.cs” files you can fine in CRM       SDK 2013 or find below







using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

using System.ServiceModel;
using Microsoft.Xrm.Sdk;
using Microsoft.Xrm.Sdk.Client;
using Microsoft.Xrm.Sdk.Query;

namespace FetchXML_Aggregate
{
    class Program
    {
      
        static void Main(string[] args)
        {

            // Obtain the target organization's web address and client logon
Microsoft.Crm.Sdk.Samples.ServerConnection serverConnect = new Microsoft.Crm.Sdk.Samples.ServerConnection();

Microsoft.Crm.Sdk.Samples.ServerConnection.Configuration config =        serverConnect.GetServerConfiguration();
         
           OrganizationServiceProxy _serviceProxy;

using (_serviceProxy = Microsoft.Crm.Sdk.Samples.ServerConnection.GetOrganizationProxy(config))
           {
               string strAggregate = @"<fetch mapping='logical' aggregate='true' distinct='false' >
                                        <entity name='account'>
                                            <attribute name='creditlimit' alias='creditLimitAvg' aggregate='avg' />
                                        </entity>
                                    </fetch>";

               var aggResults = _serviceProxy.RetrieveMultiple(new FetchExpression(strAggregate));

               foreach (var c in aggResults.Entities)
               {
decimal creditLimitAvg = ((Money)c.GetAttributeValue<AliasedValue>("creditLimitAvg").Value).Value;

                   Console.WriteLine("Total : " + decimal.Floor(creditLimitAvg));
                   Console.Read();

               }
           }

        }
    }
}


      3)  Press F5 .
      You can get average of creditlimit

Friday, 10 October 2014

Connecting to CRM from Visual Studio 2013


Here I am going to share how to connect to CRM Server from Visual studio.

Prerequisites: Need to install CRM developer tool kit

you can down load toolkit from here


Click on TOOLS from visual studio horizontal menu



Click on “Connect to Dynamics CRM Server…”

Provide CRM Discovery Server Name

Enter port number : for http it will be “80”, and for https it will be “443”

Select protocol

And click on Connect

Enter Authentication details and click on Log on

Select Organization and Solution Name and click on Ok button






You can able to see CRM Explorer window.




Monday, 9 December 2013

WebStorage in HTML5

In this module I am going to discuss Web Storage in HTML5

What Is Web Storage?
With HTML5 web storage, websites can store data on a users local computer

Now No More Cookies concept in HTML5
We had to use Javascript cookies in the past to achieve this functionality.

How It Differs From Cookies
·         More secure
·         Faster
·         Stores a larger amount of data
·         The stored data is not sent with every server request. It only is included when asked for. This gives a big advantage over cookies

Detecting HTML5 Storage Support
function supports_html5_storage() {
       try {
          return 'localStorage' in window && window['localStorage'] !== null;
        } catch (e) { 
               return false;
        }
}
With Modernizr (Recommended):
if (Modernizr.localstorage) {
        // Local storage available
} else {
       // No local storage available
}

localStorage( ) & sessionStorage()
There are 2 types of web storage objects, local and session
Difference:
localStorage – Stores data with no expiration date
How It Works
sessionStorage – Stores data for one session
The localStorage and sessionStorage objects create a key = value pair
Example: key=“Name”, value=“Bob”
They are stored as strings but can be converted after if needed by using JS functions like parseInt() and parseFloat()

Syntax for Web Storage
1)   Storing a Value:
localStorage.setItem("key1", "value1");             object
localStorage["key1"] = "value1";                          array
2)   Getting a Value:
alert(localStorage.getItem("key1"));  
alert(localStorage["key1"]);  
3)   Remove a Value:
removeItem("key1");  
Remove All Values:
localStorage.clear();