<?xml version="1.0" encoding="utf-8"?>
<rss xmlns:atom="https://www.w3.org/2005/Atom" xmlns:sy="https://purl.org/rss/1.0/modules/syndication/" xmlns:dc="https://purl.org/dc/elements/1.1/" xmlns:content="https://purl.org/rss/1.0/modules/content/" xmlns:wfw="https://wellformedweb.org/CommentAPI/" xmlns:slash="https://purl.org/rss/1.0/modules/slash/"
  version="2.0">
  <channel>
    <title>swetagu</title>
    <atom:link
      href="https://docs.microsoft.com/archive/blogs/swetagu/feed.xml"
      rel="self"
      type="application/rss+xml" />
    <link>https://docs.microsoft.com/archive/blogs/swetagu/feed.xml</link>
    <description />
    <lastBuildDate>Wed, 17 Apr 2019 03:28:45 GMT</lastBuildDate>
    <language>en-US</language>
    <sy:updatePeriod>hourly</sy:updatePeriod>
    <sy:updateFrequency>1</sy:updateFrequency>
    <item>
      <title>CRM - Azure Service Endpoint and Listener Deep Dive : Common Mistakes and Questions</title>
      <link>https://docs.microsoft.com/archive/blogs/swetagu/crm-azure-service-endpoint-and-listener-deep-dive</link>
      <pubDate>Tue, 12 Apr 2016 22:26:31 GMT</pubDate>
      <dc:creator><![CDATA[SwetaGupta]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/swetagu/?p=153</guid>
      <description><![CDATA[This blog took me quite some time and is not one of my typical blogs. This is completely based on my...]]></description>
      <content:encoded><![CDATA[This blog took me quite some time and is not one of my typical blogs. This is completely based on my experience setting up CRM-Azure integrations for my customers and the pain they have gone through and so did I ;)

As you know, CRM has an out of the box integration with Azure - via a Service Endpoint that you can set up using the Plugin Registration tool. This blog focuses on the tricky areas of this integration and what issues people face, and most of which are less documented, so you are basically stuck figuring out on trial and error. Hope this blog helps you out on those confusing and complex areas!

Note that I won't go in detail with basic stuff here so go back to MSDN for that ! Nor does this cover how to set up the certificates for CRM on premise servers for an Azure integration. These are steps post those basic things are done.

So first, if you open the Plugin Registration Tool, you'll find an option to Register a Service Endpoint -

<a href="https://msdnshared.blob.core.windows.net/media/2016/04/PluginEndpoint.png"><img class="alignnone size-full wp-image-161" src="https://msdnshared.blob.core.windows.net/media/2016/04/PluginEndpoint.png" alt="PluginEndpoint" width="240" height="109" /></a>

Once you've got this clicked, you'll get a window that is pretty different from what a Plugin Assembly registration window is.

The steps are completely explained here on what each parameter means inside this window - https://msdn.microsoft.com/en-us/library/gg328524.aspx

<img class="alignnone  wp-image-163" src="https://msdnshared.blob.core.windows.net/media/2016/04/PluginEndpoint1-300x231.png" alt="PluginEndpoint" width="432" height="333" />

&nbsp;

These seem straightforward, till you run into issues ! Here are some common mistakes and questions about each of these parameters -

<strong>Name</strong> - This can be any name that you want to give to your Service endpoint. Remember that this endpoint is what connects CRM to an Azure Service bus queue. So the name can be something like "MyServiceEndpoint" if you like.

<strong>Description</strong>: Anything you want to write!

<strong>Solution Namespace</strong> - No, this is not a CRM solution name. You need to have an Azure Service bus namespace created beforehand ie. before you go about registering this endpoint to speak to this Service bus queue, you need to have that namespace set up and ready.

For that, you need to make sure you DON'T go to the Azure portal and create the namespace using the GUI steps. It creates a version of Service bus namespace that is not compatible with CRM's integration. ACS is what is used as a validating authority to make sure clients like CRM can authenticate and send data to the Service bus. If you create the Service bus namespace using the portal, it runs under a SAS namespace which CRM is not compatible with through the Service endpoint that you are trying to set up. So what's the way to get this namespace created? Azure Powershell is the answer! It creates a Service bus namespace protected by ACS.

First - install Azure powershell on your machine/laptop. Then follow these steps on how to run the cmdlets https://msdn.microsoft.com/en-us/library/jj863635.aspx#Create_namespace for "Creating the namespace"

<strong>DO NOT Follow the steps in the next section of that link</strong>, which are Create a service identity, Create a rule, Create a scope and so on that are listed there. Those are required steps, but are handled by our Service endpoint registration step itself. Once you have the Service endpoint setup, it does all the scope and rules for you! So you just need to do the "Creating the namespace" step and stop there once it's created. Go to the Azure portal and check if it's created, if you want a UI confirmation also.

This is basically what the Cmdlets in Azure powershell look like -

&gt; Add-AzureAccount

&gt; New-AzureSBNamespace –Name YOUR_NAMESPACE -Location "YOUR_LOCATION" -CreateACSNamespace $true

Which will give you something like this in the output. Copy the <strong>Default key</strong> and the Service bus endpoint and keep it handy. The Default key is the unique key or the management key that is used to authenticate a client against this service bus endpoint that you just created.

<a href="https://msdnshared.blob.core.windows.net/media/2016/04/SaveConfigureACS1.png"><img class="alignnone  wp-image-174" src="https://msdnshared.blob.core.windows.net/media/2016/04/SaveConfigureACS1-300x63.png" alt="Save&amp;ConfigureACS" width="424" height="89" /></a>

Whatever you've put as the "YOUR_NAMESPACE" above, is what you need to add into your Service endpoint's "Solution Namespace" value.

<strong>Path: </strong>This can be any path value you want - something like folder/path. The path means the path inside the Service bus endpoint where you will be posting your context data from CRM. So if your path is "MyPath/TestPath", the eventual SB endpoint would be something like - https://mysbnamespace.servicebus.windows.net/MyPath/TestPath". If you have multiple service endpoints, it would be ideal to have different paths so that they integrate with different endpoint paths. <strong>Keep this path handy, you will eventually know why!</strong>

At this moment the path is not important, cause you haven't done the integration yet so you'll read about it not being important. Once the integration ie. the service endpoint is setup and ready, this path is the <strong>most important </strong>for you to "listen" to data on the path endpoint.

<strong>Contract: </strong>This is pretty self explanatory. The endpoint type that you want to setup with CRM - whether you want a one-way endpoint , two way, REST or a queued endpoint. This is explained in detail in the CRM SDK documentation and MSDN as to what each endpoint means. You just need to make sure you're using the corresponding listening code to listen to the endpoint contract type. Your listener is an application that listens to the service bus to capture messages in the queue - if it's a queued contract, the listener can listen once in 10 minutes or so, no need to listen real time. One way and two way contracts are not queued and are real time, so the listener needs to be real time. You'll also find code in the SDK sample code for listeners that correspond to each of these contract types and you can just use those directly!

<strong>Claim</strong>: "None" is the first option and is default - this is to send the basic claim for authenticating against Azure ACS from CRM. If you choose other options you have User information that you can send additionally along with the basic claim. "None" would work in this scenario and is the default option, unless you have done something additional that you want to do at the Service bus level for authentication, and have user information also sent.

<strong>ID</strong>: This is auto-generated for your Service endpoint. It is read-only, and is unique per endpoint that you create and doesn't change once you have set up the endpoint.

So those are the parameters that you need to pass into the Service endpoint in the plugin reg tool. Hopefully you've gotten through all the issues we typically get on this window.

&nbsp;

After that you have the buttons. What are those for? Really want to explain those in detail, if you aren't bored already ;)

<strong>Save &amp; Configure ACS:  </strong>You remember the step where you created the Service bus Namespace protected by ACS? This button is where you would go and make CRM be able to authenticate against that ACS. <strong>In short, CRM becomes a valid service identity that can communicate with ACS.</strong>

Once you click this button, you get a new window that makes you enter more data. Bad. And i stole this screenshot from Matt B's blog !

<a href="https://msdnshared.blob.core.windows.net/media/2016/04/SaveConfigureACS.png"><img class="alignnone size-medium wp-image-173" src="https://msdnshared.blob.core.windows.net/media/2016/04/SaveConfigureACS-300x249.png" alt="Save&amp;ConfigureACS" width="300" height="249" /></a>

Here, what do you have? -

<strong>Management Key</strong> - When you created the service bus namespace in the initial steps, you copied the Default key. That key needs to be finally used somewhere, which is right here. Paste it inside the management key. What you are essentially telling here is that, CRM will connect to this service bus endpoint (which you specified with the unique management key).

<strong>Certificate file</strong> - CRM authenticates to the Service bus endpoint using the management key and it's certificate. What the product team has done for you is create a certificate for your CRM, and that is located in the Developer Resources page of your CRM web site. Go there and download the cert file - it should have the issuer name as "crm.dynamics.com". You are essentially telling Azure ACS that - hey ACS, crm.dynamics.com is a valid issuer and can communicate to the service endpoint with management key "blah blah"

<strong>Issuer name</strong> - No need to even guess, this will be crm.dynamics.com, which is the same as in the certificate your put in the second parameter. Again with this step, you are telling Azure ACS that - hey ACS, crm.dynamics.com is a valid issuer and can communicate to the service endpoint with management key "blah blah"

<strong>Configure ACS - This button is super important. </strong>What it does is, goes to ACS and registers your CRM issuer as a valid identity to connect to that service bus endpoint (based on the management key). I must have told this like what, 3 times now? ;)

What else does it do? You already have your namespace details of Service bus, so this step would take that from the management key, issuer name of CRM and create scopes and rules for CRM to communicate with that service bus endpoint. This is as simply as i can put it :) So you recall in the step for Solution namespace creation much above, where i said DO NOT follow the steps to create the scope, issuer, rules? Those things are done right here when you configure ACS! If all is good, it will show you that it has completed creating all these scopes, and rules. So with this, your CRM instance is going to be able to communicate with your Service bus endpoint. Hurray!

Issues i have seen here:

1. You already have set up another CRM as an issuer for this Service bus namespace before - This is easy. Go to the Azure ACS portal and look at the Service Identities. You will find crm.dynamics.com already there from your previous Service endpoint setup. Delete all or the single crm.dynamics.com identity that exists there, and do your Configure ACS step again. Issue resolved! This basically means, you can only have one issuer with crm.dynamics.com setup for that Service bus namespace.

<a href="https://msdnshared.blob.core.windows.net/media/2016/04/ACSPortal.png"><img class="alignnone size-medium wp-image-182" src="https://msdnshared.blob.core.windows.net/media/2016/04/ACSPortal-300x148.png" alt="ACSPortal" width="300" height="148" /></a>

2. Error saying certificate already exists for issuer crm.dynamics.com : This is only when you have Configured it once and try configuring it again. It will tell you that it already has a certificate there. This shouldn't be an issue , it just means that you have already set up the Service identity.

Once all this is done, you click on Close. You have completed the most important step of making CRM a valid Service identity for your ACS!

Next button on the Register Service endpoint screen:

<strong>Save &amp; Verify Authentication: </strong>This button primarily uses CRM as a service identity, based on the success of the previous step, and tries to connect to your Service bus endpoint. If all in the previous Save and Configure ACS is setup perfect, this step goes on like a breeze and shows "Success". You should not face any issues here - the issues you would face can only be because your Configure ACS didn't go correct. I've always had issues related to ACS configuration being incorrect and hence the Service bus connection fails.

If you look closely back on the Service endpoint registration screen, which you have almost completed (yay!), you would notice the <strong>ID that has got populated with a GUID</strong>. This will remain the same even if you go and click Save and Verify authentication again. It's your Service endpoint's ID. You can go to CRM portal and check the Service endpoint created there in the Customizations-&gt;Service endpoint. This means, you have your Service endpoint ready to use!

Few points about a Service endpoint

1. It is used to connect to a Service bus endpoint on Azure

2. It acts like a plugin and is handled by the CRM Asynchronous Service

3. It has an Execute method that you can invoke through code, inside another plugin or Code activity

Example:

//Initialize the Service endpoint object, through the plugin or the code activity context object

IServiceEndpointNotificationService cloudService = (IServiceEndpointNotificationService)context.GetExtension&lt;IServiceEndpointNotificationService&gt;();

//Pass the service endpoint ID that got generated in the endpoint registration step, and pass the context from your  plugin or code activity

var result = cloudService.Execute(new EntityReference("serviceendpoint", new Guid(serviceEndpointId)), pluginContextData);

Make sure you always add Retry logic to the Execute call you are doing above. This is cause i have seen situations where the connection just fails when you do it through code, and you have no way to know why it failed. If your plugin doesn't talk to the Service endpoint, your plugin itself will fail. So make sure a Retry attempt is done to handle those exceptions and reconnect to the Execute method.

4. It can have steps under it, just like any other plugin, and this step can be setup for any message like Create/Update etc. and the context passed to your Service bus endpoint path, will be the IPluginExecutionContext from this event. For eg: Create of account, will send account data to the endpoint path. Like shown below you can add a plugin step to the Service endpoint!

<a href="https://msdnshared.blob.core.windows.net/media/2016/04/ACSPortal1.png"><img class="alignnone size-medium wp-image-183" src="https://msdnshared.blob.core.windows.net/media/2016/04/ACSPortal1-300x148.png" alt="ACSPortal" width="300" height="148" /></a>

&nbsp;

What next?

You have your communication with CRM setup to send context data to the Service bus endpoint at the path you specified. <strong>Remember, the path is important now so keep it handy.</strong>

Next step, is to have an application that needs to get this data. You would have done this integration for sending data from CRM to some third party application, correct? That application needs to have code that "listens" to your Service bus endpoint path.

Like i already mentioned earlier, listener code exists in the SDK for one way, two way, REST based or Queued listeners based on the kind of endpoint contract you set up. Go to CRM 2016 SDK\SDK\SampleCode\CS\Azure.

Common questions and mistakes again? :

1. What is the listener code doing?

It's basically a WCF service that listens to your Service bus endpoint. If you read through the code you'll see that it uses the Microsoft.servicebus namespace. It uses the WS2007HttpRelayBinding binding in WCF to communicate with the service bus. It needs you to enter the Service bus namespace name (you already have that handy), your management key (you have that too), issuer name (owner is what we use here as the issuer name for this application), and it generates the Uri based on that data. The Uri is the endpoint that it will listen to. If you run this code after it builds successfully, you will get these prompts as part of the Console:

<a href="https://msdnshared.blob.core.windows.net/media/2016/04/ACSPortal2.png"><img class="alignnone size-medium wp-image-191" src="https://msdnshared.blob.core.windows.net/media/2016/04/ACSPortal2-300x39.png" alt="ACSPortal" width="300" height="39" /></a>

Enter the values as i told you, and you will get the Url generated and get a "Press Enter to Exit".

[<strong>DO NOT</strong> press Enter to Exit this screen. The listener needs to be running to constantly listen to the service bus endpoint. Unless it's a queued listener, for which you can run this listener later also. I believe it stores it in the queue for up-to 10 minutes and then sends it across to the listener. So in those cases, you can press Enter and exit for a while!]

Wait a minute, why is it saying <strong>RemoteService</strong> as the path? Odd, cause that's not the path you want. That's cause this code assumes that your path is "SB-endpoint/Remote Service". Tricky, right? Unless you really observe? You are never going to get anything on this path, cause you have configured your path in the Service endpoint as "MyPath/TestPath" in the first Service endpoint registration step. So, go into the code of the listener and change this part of the code:

// Create the service URI based on the service namespace.
Uri address = ServiceBusEnvironment.CreateServiceUri(Uri.UriSchemeHttps, serviceNamespace, "<strong>RemoteService</strong>");
Console.WriteLine("Service address: " + address);

Replace the "Remote Service" with your own path or else prompt the Console to accept the path from you! You're done.

Once you fix that, run the listener again and you'll get your correct URL without the RemoteService path, and your correct path!

What next? Listener is ready to pick up any data sent to this path. Now all you have to do, is to actually send data to the path! Trigger the step that you created that sends data to the Service endpoint, or call the Execute method. All explained above in the Service endpoint configuration steps.

Once you trigger the event, the data goes straight to your service bus endpoint path - now if you have a Queued listener, you won't get real time data into your listener. But if it's real time like the one way, two way ones, you will get CRM's plugin context right into the listener code:

<a href="https://msdnshared.blob.core.windows.net/media/2016/04/ACSPortal3.png"><img class="alignnone size-medium wp-image-193" src="https://msdnshared.blob.core.windows.net/media/2016/04/ACSPortal3-282x300.png" alt="ACSPortal" width="282" height="300" /></a>

So with that you have gone through all the struggle to get this working ! Now you can do what you want with the data in the listener, use it, eat it, store it !

Enjoy and post any questions you have!]]></content:encoded>
    </item>
    <item>
      <title>CRM 2013/2015 - New Security role from Ground Zero</title>
      <link>https://docs.microsoft.com/archive/blogs/swetagu/crm-20132015-new-security-role-from-ground-zero</link>
      <pubDate>Fri, 17 Jul 2015 14:13:00 GMT</pubDate>
      <dc:creator><![CDATA[SwetaGupta]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/swetagu/2015/07/17/crm-20132015-new-security-role-from-ground-zero/</guid>
      <description><![CDATA[Never really wanted to create a new security role from ground up right? Me neither. Always got the...]]></description>
      <content:encoded><![CDATA[<p><span style="font-family: arial,helvetica,sans-serif; font-size: small;">Never really wanted to create a new security role from ground up right? Me neither. Always got the "Insufficient Permissions error<em>"</em></span></p>
<p><span style="font-family: arial,helvetica,sans-serif; font-size: small;">But I came across these situations where some of my customers were creating New security roles, from scratch, and setting up permissions on entities. But that never worked. It's only because there are a host of entities in CRM that you need permissions to, in order to even let the user log in, using that new security role. We generally recommend using a basic security role and copying it into your new role. </span></p>
<p><span style="font-family: arial,helvetica,sans-serif; font-size: small;">I thought I'll write about my experiments with CRM 2013/&nbsp;2015 and how I got a blank&nbsp;new security role from Ground Zero working.</span></p>
<p><span style="font-family: arial,helvetica,sans-serif; font-size: small;">1. Of course, you start with creating a new security role, without copying an existing one. Name it and Save it.</span></p>
<p><span style="font-family: arial,helvetica,sans-serif; font-size: small;">2. Open it up again and you will see some default permissions that CRM has already set for your security role. You will see permissions to the SDK message processing steps &amp; plugin&nbsp;entities in Customizations, already given permissions. Do not remove those.</span></p>
<p><span style="font-family: arial,helvetica,sans-serif; font-size: small;"><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/57/60/7455.Blankrole.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-57-60/7455.Blankrole.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/57/60/7455.Blankrole.png" original-url="https://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-57-60/7455.Blankrole.png" alt="" border="0" /></a></span></p>
<p>&nbsp;</p>
<p><span style="font-family: arial,helvetica,sans-serif; font-size: small;">3. If you assign a new user with this security role, he won't be able to even log in to CRM. You'll still need to add permissions to some other entities.</span></p>
<p><span style="font-family: arial,helvetica,sans-serif; font-size: small;">4. Go back to the security role. Go to Customizations-&gt; System&nbsp;Form and give permissions like below</span></p>
<p><span style="font-family: arial,helvetica,sans-serif; font-size: small;"><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/57/60/0508.Systemform.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-57-60/0508.Systemform.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/57/60/0508.Systemform.png" original-url="https://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-57-60/0508.Systemform.png" alt="" border="0" /></a></span></p>
<p><span style="font-family: arial,helvetica,sans-serif; font-size: small;">5. Post that go to Business management -&nbsp; Just those 3 below need basic user level&nbsp;permissions</span></p>
<p><span style="font-family: arial,helvetica,sans-serif; font-size: small;"><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/57/60/5466.Basic%20permissions.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-57-60/5466.Basic-permissions.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/57/60/5466.Basic%20permissions.png" original-url="https://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-57-60/5466.Basic-permissions.png" alt="" border="0" /></a></span></p>
<p>&nbsp;</p>
<p><span style="font-family: arial,helvetica,sans-serif; font-size: small;">6. Post that give your specific&nbsp;business&nbsp;permissions, like you wanted to give to this role. Give Dashboard user level access if you want them to see their dashboard.</span></p>
<p><span style="font-family: arial,helvetica,sans-serif; font-size: small;">7. After this try to log in to CRM with the user having this security role, and he should be able to log in :)&nbsp;</span></p>
<p><span style="font-family: arial,helvetica,sans-serif; font-size: small;">There are a few more things I noted additionally.&nbsp;If you have given read or write permissions to certain entities, they still may not be accessible. This is because of <em>other</em> entities that need permissions again.&nbsp;</span></p>
<p><span style="font-family: arial,helvetica,sans-serif; font-size: small;">Check these points&nbsp;I figured out for certain entities, which may help you get rid of those problems with your entity permissions&nbsp;too.</span></p>
<p><strong><span style="font-family: arial,helvetica,sans-serif; font-size: small;">- View the Contacts, Account, Cases, etc.&nbsp;records:</span></strong></p>
<p style="margin: 0in; font-family: Calibri; font-size: 11pt;"><span style="font-family: arial,helvetica,sans-serif; font-size: small;">Go to Customizations -&gt; Views and give read permissions to user level</span></p>
<p style="margin: 0in; font-family: Calibri; font-size: 11pt;"><span style="font-family: arial,helvetica,sans-serif; font-size: small;">Go to Business management -&gt; User settings and give&nbsp;read permissions to user level</span></p>
<p style="margin: 0in; font-family: Calibri; font-size: 11pt;"><span style="font-family: arial,helvetica,sans-serif; font-size: small;">These are required to View the list of those entity records, otherwise you get the Insufficient permissions error when you go to these entities.</span></p>
<p style="margin: 0in; font-family: Calibri; font-size: 11pt;">&nbsp;</p>
<p style="margin: 0in; font-family: Calibri; font-size: 11pt;"><strong><span style="font-family: arial,helvetica,sans-serif; font-size: small;">- Open a&nbsp;Case (Incident), Opportunity&nbsp;form </span></strong></p>
<p style="margin: 0in; font-family: Calibri; font-size: 11pt;"><span style="font-family: arial,helvetica,sans-serif; font-size: small;">Full permissions&nbsp;at&nbsp;Org level&nbsp;on Core Records - &gt; Subject entity (only required for Case entity)</span></p>
<p style="margin: 0in; font-family: Calibri; font-size: 11pt;"><span style="font-family: arial,helvetica,sans-serif; font-size: small;"><span style="font-family: arial,helvetica,sans-serif; font-size: small;">Full permissions&nbsp;at&nbsp;Org level&nbsp;</span>on&nbsp;Customizations -&gt; Process entity</span></p>
<p style="margin: 0in; font-family: Calibri; font-size: 11pt;">The process entity permissions are required for a number of forms like Case, Opportunity, where you have the process flow shown on the form page. This permission never gets added by default.</p>
<p style="margin: 0in; font-family: Calibri; font-size: 11pt;">&nbsp;</p>
<p style="margin: 0in; font-family: Calibri; font-size: 11pt;"><strong><span style="font-family: arial,helvetica,sans-serif; font-size: small;">&nbsp;- Opening the Account form, Contact form </span></strong></p>
<p style="margin: 0in; font-family: Calibri; font-size: 11pt;"><span style="font-family: arial,helvetica,sans-serif; font-size: small;">Read permissions on - </span><span style="font-family: arial,helvetica,sans-serif; font-size: small;">Lead, Campaign ,Opportunity ,Opportunity relationships and Marketing entities (These are shown on the forms and hence you need at least Read permissions for them to load up)</span></p>
<p style="margin: 0in; font-family: Calibri; font-size: 11pt;"><span style="font-family: arial,helvetica,sans-serif; font-size: small;"><span style="font-family: arial,helvetica,sans-serif; font-size: small;">Full permissions&nbsp;at&nbsp;Org level&nbsp;</span>on&nbsp;Customizations -&gt; Process entity</span></p>
<p style="margin: 0in; font-family: Calibri; font-size: 11pt;">&nbsp;</p>
<p style="margin: 0in; font-family: Calibri; font-size: 11pt;">Hope this helps you get you through the basic set of permissions you need with a blank security role. I had to get this with a lot of trial and error :S</p>
<p style="margin: 0in; font-family: Calibri; font-size: 11pt;">&nbsp;</p>
<p style="margin: 0in; font-family: Calibri; font-size: 11pt;">It also helps, if you have got in security roles from CRM 2011 and using them in CRM 2013/2015 and aren't able to access the views, or forms. This is primarily because new entities got added from CRM 2013 onwards and unless you use one of the existing security roles in 2013/2015, you won't be able to get the security role working.</p>
<p style="margin: 0in; font-family: Calibri; font-size: 11pt;">&nbsp;</p>
<p style="margin: 0in; font-family: Calibri; font-size: 11pt;">Happy to help if you're stuck on something!</p>]]></content:encoded>
    </item>
    <item>
      <title>CRM Online Email Server Profile - AutoDiscover issues</title>
      <link>https://docs.microsoft.com/archive/blogs/swetagu/crm-online-email-server-profile-autodiscover-issues</link>
      <pubDate>Sun, 12 Jul 2015 12:32:21 GMT</pubDate>
      <dc:creator><![CDATA[SwetaGupta]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/swetagu/?p=195</guid>
      <description><![CDATA[CRM Online supports Server side synchronization with Exchange Online. As long as Exchange online and...]]></description>
      <content:encoded><![CDATA[CRM Online supports Server side synchronization with Exchange Online. As long as Exchange online and CRM online are on the same O365 tenant, the connection will work. Make sure you have that setup first, before you try to connect Exchange Online for email sync.

If you go to setting up an Email Server profile for Exchange Online, you'll notice that Auto discover is set to True by default for the Incoming and Outgoing server URLs. This is something that we have forced on you for Exchange Online, so that CRM looks up the tenant and identifies what the EWS URLs are for Incoming and Outgoing email from your Exchange online. For Exchange onpremise, for sure you will need to enable this setting for Autodiscover as No, so that you can add the URLs yourself. But, for Exchange Online, we don't support Autodiscover as No, and CRM has to do it for you. And to add on, I've noticed that this Autodiscover setting doesn't work, and even though you have an Exchange Online account with mailboxes on the same tenant, you get errors when you try to test your mailboxes. You may have seen that too since you are on this blog :)

So, the email server profile looks like this , by default, for Exchange online:

<a href="https://msdnshared.blob.core.windows.net/media/2016/02/ExOnline.png"><img class="alignnone size-medium wp-image-205" src="https://msdnshared.blob.core.windows.net/media/2016/02/ExOnline-300x252.png" alt="ExOnline" width="300" height="252" /></a>

You wouldn't find the Auto discover settings - (but if you look carefully, when the page loads, you will see the settings load up as Autodiscover as true and then those disappear. It's product JavaScript that is making those fields visible false)

As of now, we don't have a fix on this issue for Exchange online to get auto-discovered. So if you're trying to do what I was doing, connect to Exchange online for Server side synchronization, you have to "hack" your way around this and put in the EWS URLs yourselves. You cannot do anything else since there is not fix yet for CRM Online 2015.

Steps to work on the hack:

- Enable option buttons on the form

- Enable text boxes on the form

1. On the Exchange Online Email Server profile window, click on F12 to open IE developer tools (You can do this on Chrome as well, if you are more comfortable there, like I'm showing below)

Find the option button label and values &lt;td&gt; and change them to visible true.

Search for useautodiscover_c and useautodiscover_d which are the 2 &lt;td&gt;s and change them to visibility: visible

<a href="https://msdnshared.blob.core.windows.net/media/2016/02/autodiscC.png"><img class="alignnone size-medium wp-image-206" src="https://msdnshared.blob.core.windows.net/media/2016/02/autodiscC-300x93.png" alt="autodiscC" width="300" height="93" /></a>

&nbsp;

2. You should be able to see the Labels and Radio buttons now since they are visible.

<a href="https://msdnshared.blob.core.windows.net/media/2016/02/TDVisible.png"><img class="alignnone size-medium wp-image-215" src="https://msdnshared.blob.core.windows.net/media/2016/02/TDVisible-300x252.png" alt="TDVisible" width="300" height="252" /></a>

Once you see that go to the Element Inspector in the F12 tools and select the option button element for "Yes". It should have a name like "rad_autodiscover1". Check the properties of this option button and you will see "checked disabled" there. Remove the "disabled" from the checked part in order to enable it. See the screenshot below.

<a href="https://msdnshared.blob.core.windows.net/media/2016/02/Radautodisc1.png"><img class="alignnone size-medium wp-image-225" src="https://msdnshared.blob.core.windows.net/media/2016/02/Radautodisc1-300x171.png" alt="Radautodisc1" width="300" height="171" /></a>

Do the same for the No option button. You will find that the No button is also "disabled" due to the auto discover being always Yes. Remove the disabled property and you will now be able to click on the No option button! See the screenshot below.

<a href="https://msdnshared.blob.core.windows.net/media/2016/02/Radautodisc2.png"><img class="alignnone size-medium wp-image-235" src="https://msdnshared.blob.core.windows.net/media/2016/02/Radautodisc2-300x171.png" alt="Radautodisc2" width="300" height="171" /></a>

3. Next, go to the Incoming Server Location text box that is now visible, but not yet enabled for editing. Select that using the Element inspector again, and you will get the corresponding input box in html.

Change 2 properties: Remove completely the disabled="disabled" property to enable and change contenteditable ="true". See the screen shot below

<a href="https://msdnshared.blob.core.windows.net/media/2016/02/Incomingserver.png"><img class="alignnone size-medium wp-image-245" src="https://msdnshared.blob.core.windows.net/media/2016/02/Incomingserver-300x105.png" alt="Incomingserver" width="300" height="105" /></a>

&nbsp;

Do the same for the Outgoing server location text box.

Once you've completed both, change the values in the Incoming and Outgoing Server URLs to https://outlook.office365.com/EWS/Exchange.asmx which is the EWS service for Exchange online. This will be the same for any Exchange online.

Save the record, and it will refresh the screen. Don't worry if your option buttons are no longer seen or text boxes now are disabled again, since it was a temporary hack. Once you've saved it, CRM is going to use the values from your text box.

Remember that the html hack you've done is primarily to put these values in yourself, to get rid of the issue of CRM not getting the URLs. Hopefully this helps you resolve your issues with Exchange online server side synchronization, till a fix gets released for this issue!

&nbsp;

&nbsp;]]></content:encoded>
    </item>
    <item>
      <title>Snooping into Lync Server and Logging</title>
      <link>https://docs.microsoft.com/archive/blogs/swetagu/snooping-into-lync-server-and-logging</link>
      <pubDate>Tue, 12 May 2015 00:25:00 GMT</pubDate>
      <dc:creator><![CDATA[SwetaGupta]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/swetagu/2015/05/12/snooping-into-lync-server-and-logging/</guid>
      <description><![CDATA[So I am a developer person and never really had to get into logging on server side stuff when errors...]]></description>
      <content:encoded><![CDATA[<p>So I am a developer person and never really had to get into logging on server side stuff when errors come up. But I was working on this Lync custom development project and got stuck with issues coming up from the Conferencing server while using UCMA 3.0. So here it goes.</p>
<p>If you've been stuck with errors using UCMA conferencing code, and really want to analyse what's exactly happening on the "Lync server side", there are some good options we have already at Microsoft.</p>
<p>1- Install the Lync resource kit and use logging on the Lync server instead of relying on the UCMA errors that your application throws.</p>
<p>&nbsp;</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/57/60/1106.reskit%20folder.GIF" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-57-60/1106.reskit-folder.GIF"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/57/60/1106.reskit%20folder.GIF" original-url="https://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-57-60/1106.reskit-folder.GIF" alt="" border="0" /></a></p>
<p>The Resource kit that comes with Lync server 2010 and even 2013, gives you logging tools that you can use. Use the UCSLogger and set up properties in it to point to the location where the log files should be kept.</p>
<p>Keep in mind the properties related to filtering what kind of conversations between UCMA endpoints you want to log. Otherwise it will log every conversation between SIPs. So you need to set the properties of:</p>
<p>1. Filters</p>
<p>2. Order of messages - mostly you need to keep it sequential</p>
<p>3. Location of the file</p>
<p>Once you've started logging the SIP conversations based on the filters on the Lync server, you would also need to know that the log files could be of really large sizes.&nbsp;</p>
<p>Reading through these log files are not easy. You could use notepad, or just use a tool like Snooper which you get with the Resource kit as well.</p>
<p>You will also find Snooper inside the Reskit :)</p>
<p>&nbsp;</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/57/60/0640.snooper%20folder.GIF" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-57-60/0640.snooper-folder.GIF"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/57/60/0640.snooper%20folder.GIF" original-url="https://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-57-60/0640.snooper-folder.GIF" alt="" border="0" /></a></p>
<p>&nbsp;</p>
<p>You open Snooper and point it to the log file that you want to read through. It practically shows you everything that you need to see. Right from SIP invites, subscribes, BYE, ACKs everything :) IT's what you need to do a thorough investigation on why your conferences are failing, be it audio or video.</p>
<p>Take a look at this screenshot of a snooper view of one of the traces i have: You need to open the etl file in snooper and go to the "messages" tab to see all the order of messages. I have removed some of my SIP addresses for confidentiality purposes.</p>
<p>&nbsp;</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/57/60/2352.Capture.GIF" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-57-60/2352.Capture.GIF"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/57/60/2352.Capture.GIF" original-url="https://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-57-60/2352.Capture.GIF" alt="" border="0" /></a></p>
<p>&nbsp;</p>
<p>so it basically shows you the messages in the order of its occurance and you can also filter for some messages.</p>
<p>In my case here i can clearly see that i have the 488 error message from Lync server indicating that a conference was not created with the client.</p>
<p>If you remove the filter, it would show you every messages from the beginning to the end indicating all the steps that take places. Details to the conference getting established within Focus and the AV servers are explained in the logs and can be viewed easily via Snooper. Its a great tool to use and really helped me learn some of the way the conferencing features work as well. Just keep in mind the size of the log files!</p>]]></content:encoded>
    </item>
    <item>
      <title>Lync 2010 Custom status messages not appearing</title>
      <link>https://docs.microsoft.com/archive/blogs/swetagu/lync-2010-custom-status-messages-not-appearing</link>
      <pubDate>Fri, 29 Mar 2013 02:10:35 GMT</pubDate>
      <dc:creator><![CDATA[SwetaGupta]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/swetagu/2013/03/29/lync-2010-custom-status-messages-not-appearing/</guid>
      <description><![CDATA[Sometimes when you add new status messages to your Lync server, you may not just see it correctly on...]]></description>
      <content:encoded><![CDATA[<p>Sometimes when you add new status messages to your Lync server, you may not just see it correctly on your Lync client easily.</p>
<p>The procedure for adding new status messages is the XML which has the statuses and then setting that XML file as global policy for all the clients&nbsp;connecting to that Lync server</p>
<p>1. Create the XML file with new status. Host this on a web server or lync front end server if you want, with a secure URL https. For eg: <span style="font-family: Courier New;"><a href="https://mywebsite/presencefile.xml">https://mywebsite/presencefile.xml</a></span></p>
<p><span style="font-family: Courier New;">&lt;?xml version="1.0"?&gt; &lt;customStates xmlns="https://schemas.microsoft.com/09/2009/communicator/customStates"&gt;&nbsp; </span></p>
<p><span style="font-family: Courier New;">&lt;customState ID="1" availability="<span style="color: #ff0000;">Busy</span>"&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp; &lt;activity LCID="1033"&gt;<span style="color: #0000ff;">Ready for Appointments</span>&lt;/activity&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp; &lt;/customState&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp; &lt;customState ID="2" availability="<span style="color: #ff0000;">Away</span>"&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp; &lt;activity LCID="1033"&gt;<span style="color: #0000ff;">Out for lunch</span>&lt;/activity&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp; &lt;/customState&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp; &lt;customState ID="3" availability="<span style="color: #ff0000;">Away</span>"&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp; &lt;activity LCID="1033"&gt;<span style="color: #0000ff;">On Vacation</span>&lt;/activity&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp; &lt;/customState&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&lt;/customStates&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br /></span></p>
<p><span style="font-family: Courier New;"><span style="font-family: Courier New;"></span>2. Set the Lync client policy by running this command on the Lync Powershell window</span></p>
<p><span style="font-family: Courier New;">Set-CsClientPolicy -Identity Global -CustomStateUrl "<span style="font-family: Courier New;"><a href="https://mywebsite/presencefile.xml">https://mywebsite/presencefile.xml</a>"</span></span></p>
<p><span style="font-family: Courier New;"><span style="font-family: Courier New;">3. Cross check the policy to see&nbsp;if it has been applied correctly</span></span></p>
<p><span style="font-family: Courier New;"><span style="font-family: Courier New;"><span style="font-family: Courier New;">Get-CsClientPolicy -Identity Global | Select-Object Custom* | fl</span></span></span></p>
<p>&nbsp;</p>
<p>You may not see the Lync clients having status changes very immediately. It may require you to sign out and sign again to the Lync client, or sign out and end the Lync client process itself.</p>
<p>I recently faced this issue, and I tried everything possible and the new statuses were not appearing in any of my Lync clients in the network.</p>
<p>One of the things you could do in such a scenario is, go to the&nbsp;client box and&nbsp;open the&nbsp;Internet explorer settings and if you have a proxy server specified, try&nbsp;unchecking the Automatically detect checkbox. This was the reason i was not able to connect to the Lync server and get the new statuses. Unchecking the automatically detect prevented it from going outside the proxy realm and i could then see my new statuses on the Lync client.</p>
<p>This had resolved the problem for me, and hope it would help others! In short these are a few things you could do to when you cannot see new statuses on your clients</p>
<p>1. Check the proxy settings on your browser. Remove automatically detect if you have a proxy</p>
<p>2. Check the firewall settings by turning it off to see if the statuses are appearing</p>
<p>3. Sign out of the Lync client and sign in again</p>
<p>4. Restart the Lync client by explicitly ending the process</p>
<p>&nbsp;</p>
<p>&nbsp;</p>]]></content:encoded>
    </item>
    <item>
      <title>Dynamics CRM 2011 Online vs On-Premise</title>
      <link>https://docs.microsoft.com/archive/blogs/swetagu/dynamics-crm-2011-online-vs-on-premise</link>
      <pubDate>Tue, 11 Oct 2011 04:10:00 GMT</pubDate>
      <dc:creator><![CDATA[SwetaGupta]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/swetagu/2011/10/11/dynamics-crm-2011-online-vs-on-premise/</guid>
      <description><![CDATA[Now that we have a full fledged version of CRM 2011 out with CRM online and on-premise , I have been...]]></description>
      <content:encoded><![CDATA[<p><span style="font-family: Calibri;"><strong>Now that we have a full fledged version of CRM 2011 out with CRM online and on-premise , I have been reading and learning the differences between the two. These are some of the points based on some research i've done and it could help in understanding when to go for Online or On Premise.</strong></span></p>
<p><span style="font-family: Calibri;"><strong>Dynamics CRM 2011 Online and On-Premise Functionality</strong><strong>:</strong></span></p>
<p><span style="font-family: Calibri; font-size: small;"><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/57/60/4857.crmonline.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-57-60/4857.crmonline.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/57/60/4857.crmonline.png" original-url="https://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-57-60/4857.crmonline.png" alt="" border="0" /></a>&nbsp;</span></p>
<p>&nbsp;</p>
<p><span style="font-family: Calibri; font-size: small;">&nbsp;</span></p>
<p><span style="font-size: small;"><span style="font-family: Calibri;">The table above shows the primary differences that CRM 2011 On Premise and CRM 2011 Online hold. </span></span></p>
<p><span style="font-size: small;"><span style="font-family: Calibri;">Most of the features in Online and On Premise hold the same since the code base used for both, the XRM platform are the same.</span></span></p>
<p><span style="font-size: small;"><span style="font-family: Calibri;">These differences exist primarily on the customizations front and security modes:</span></span></p>
<p><span style="font-size: small;"><span style="font-family: Calibri;"><span style="text-decoration: underline;">Customizations restrictions</span>: This is generally restricted to a certain extent in CRM Online since the CRM online application resides on the Microsoft Datacenter and is hosted there. On the contrary, on premise CRM applications do not have those restrictions since the customer is in control of it completely. Online customizations hold the risk of something messing up at a datacenter so some restrictions are inevitable.</span></span></p>
<p><span style="font-size: small;"><span style="font-family: Calibri;"><span style="text-decoration: underline;">Security modes:</span> Sandbox security mode or full trust mode. This exists for plugins being registered in CRM. CRM online cannot take the risk of having plugins in full trust mode since they are .NET assemblies which can perform any kind of operation if required (registry, file access etc.). Sandboxed mode of plugins restricts this from happening on the datacenter since the plugin runs on partial trust mode (sandboxing gives partial trust) and cannot access the registry or the file system on the datacenter where it is hosted.</span></span></p>
<p><strong><span style="font-family: Calibri;">&nbsp;</span></strong></p>
<p><strong><span style="font-family: Calibri;">Technical Details</span></strong></p>
<p><span style="font-size: small;"><span style="font-family: Calibri;">The table lists the differences. Details of the table columns and some more additional points are explained below:</span></span></p>
<ol>
<li><strong><span style="font-family: Calibri; font-size: small;">1.</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </strong><strong><span style="font-size: small;"><span style="font-family: Calibri;">Dashboard </span></span></strong></li>
</ol>
<p><span style="font-size: small;"><span style="font-family: Calibri;">Supported in both on line and on premise.</span></span></p>
<p><span style="font-family: Calibri; font-size: small;">&nbsp;</span></p>
<ol>
<li><strong><span style="font-family: Calibri; font-size: small;">2.</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </strong><strong><span style="font-size: small;"><span style="font-family: Calibri;">Filter View</span></span></strong></li>
</ol>
<p><span style="font-size: small;"><span style="font-family: Calibri;">Supported in both on line and on premise.</span></span></p>
<p><span style="font-family: Calibri; font-size: small;">&nbsp;</span></p>
<ol>
<li><strong><span style="font-family: Calibri; font-size: small;">3.</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </strong><strong><span style="font-size: small;"><span style="font-family: Calibri;">Plug-ins</span></span></strong></li>
</ol>
<p><span style="font-size: small;"><span style="font-family: Calibri;">Supported in both on line and on premise.</span></span></p>
<p><span style="font-family: Calibri; font-size: small;">&nbsp;</span></p>
<p><span style="font-size: small;"><span style="font-family: Calibri;">Other Differences:</span></span></p>
<p><span style="font-size: small;"><span style="font-family: Calibri;"><span style="text-decoration: underline;">CRM on premise:</span> Plugins can be registered in the sandboxed, or full trust mode and can be deployed on the GAC, disk, or database</span></span></p>
<p><span style="font-size: small;"><span style="font-family: Calibri;"><span style="text-decoration: underline;">CRM on line: </span>Plugins can be registered only in the sandboxed mode and can be deployed only on the database so that it has lesser rights and is easily maintainable since it&rsquo;s deployed on the database.</span></span></p>
<p><span style="font-family: Calibri; font-size: small;">&nbsp;</span></p>
<p><span style="font-size: small;"><span style="font-family: Calibri;">The workaround for this difference is to have all plugins registered on the sandboxed mode and deployed on the database for on premise or on-line. This would ensure that plugins working on on premise can be moved to on line without any issues. The sandboxed plugins are still fully capable - can call back into the CRM Webservices, can call to external services (both azure app fabric and vanilla web services hosted anywhere) as well.</span></span></p>
<p><span style="font-family: Calibri; font-size: small;">&nbsp;</span></p>
<ol>
<li><strong><span style="font-family: Calibri; font-size: small;">4.</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </strong><strong><span style="font-size: small;"><span style="font-family: Calibri;">Custom Reports/ Accessing the CRM database</span></span></strong></li>
</ol>
<p><span style="font-size: small;"><span style="font-family: Calibri;">Supported in both on line and on premise.</span></span></p>
<p><span style="font-size: small;"><span style="font-family: Calibri;">Reports can be created on SSRS or using the Report builder tool inside CRM and can be used for CRM online and CRM on premise.</span></span></p>
<p><span style="font-family: Calibri; font-size: small;">&nbsp;</span></p>
<p><span style="font-size: small;"><span style="font-family: Calibri;">Other Differences:</span></span></p>
<p><span style="font-size: small;"><span style="font-family: Calibri;"><span style="text-decoration: underline;">CRM on premise: </span>&nbsp;Reports on CRM on premise talk to the on premise hosted database. This database can be modified. SSRS reports can be made, SSAS cubes can be made from this database as well so that reports can get the data from these cubes instead.</span></span></p>
<p><span style="font-size: small;"><span style="font-family: Calibri;"><span style="text-decoration: underline;">CRM Online:</span>&nbsp; A major drawback is creating custom SSRS reports for CRM online. Reports on CRM on line talk to the database which is hosted on the Microsoft datacenter can this database cannot be accessed or modified. The server name for the database will not be known to the users and so cubes or SSRS reports cannot be made over these for faster reporting.</span></span></p>
<p><span style="font-family: Calibri; font-size: small;">&nbsp;</span></p>
<p><span style="font-family: Calibri; font-size: small;">A workaround for this called BIDS extension for CRM 2011 allows you to create custom reports using the fetchXML as a report data source. </span><a href="https://download.microsoft.com/download/1/9/1/19136B1A-5C0A-4B17-89E0-AB0ADBC913C7/CRM2011-BIDSExtensions-ENU-i386.exe"><span style="color: #0000ff; font-family: Calibri; font-size: small;">https://download.microsoft.com/download/1/9/1/19136B1A-5C0A-4B17-89E0-AB0ADBC913C7/CRM2011-BIDSExtensions-ENU-i386.exe</span></a></p>
<p><span style="font-family: Calibri; font-size: small;">&nbsp;</span></p>
<p><span style="font-size: small;"><span style="font-family: Calibri;">Through a custom application if the CRM database entities need to be accessed, the only way to do it is create a class using the CRMSvcUtil.exe tool. This tool generates a CSharp/VB class representation of the CRM organization database structure and this can be used in the custom application code. This tool can be used for CRM on line and on premise.</span></span></p>
<p><span style="font-family: Calibri; font-size: small;">&nbsp;</span></p>
<ol>
<li><strong><span style="font-family: Calibri; font-size: small;">5.</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </strong><strong><span style="font-size: small;"><span style="font-family: Calibri;">Workflows</span></span></strong></li>
</ol>
<p><span style="font-size: small;"><span style="font-family: Calibri;">Supported in both on line and on premise.</span></span></p>
<p><span style="font-family: Calibri; font-size: small;">&nbsp;</span></p>
<p><span style="font-size: small;"><span style="font-family: Calibri;">Other Differences:</span></span></p>
<p><span style="font-size: small;"><span style="font-family: Calibri;"><span style="text-decoration: underline;">CRM on premise:</span> Unlimited workflows. You can create workflows using Windows Workflow Foundation and upload it on to CRM on premise as a custom workflow. </span></span></p>
<p><span style="font-size: small;"><span style="font-family: Calibri;"><span style="text-decoration: underline;">CRM online:</span> 300 Workflows. You cannot use custom workflows in CRM online after creating them using WWF.</span></span></p>
<p><span style="font-family: Calibri; font-size: small;">&nbsp;</span></p>
<p><span style="font-size: small;"><span style="font-family: Calibri;">Since custom plugins are supported on CRM online, the workaround for this is creating custom plugin and executing it on the particular step where the custom workflow has to be executed.</span></span></p>
<p><span style="font-family: Calibri; font-size: small;">&nbsp;</span></p>
<ol>
<li><strong><span style="font-family: Calibri; font-size: small;">6.</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </strong><strong><span style="font-size: small;"><span style="font-family: Calibri;">System Customizations</span></span></strong></li>
</ol>
<p><span style="font-size: small;"><span style="font-family: Calibri;">Supported in both on line and on premise.</span></span></p>
<p><span style="font-family: Calibri; font-size: small;">&nbsp;</span></p>
<p><span style="font-size: small;"><span style="font-family: Calibri;">Other Differences:</span></span></p>
<p><span style="font-size: small;"><span style="font-family: Calibri;"><span style="text-decoration: underline;">CRM on premise:</span> Unlimited system customizations </span></span></p>
<p><span style="font-size: small;"><span style="font-family: Calibri;"><span style="text-decoration: underline;">CRM online:</span> 200 System customizations. </span></span></p>
<p><span style="font-family: Calibri; font-size: small;">&nbsp;</span></p>
<ol>
<li><strong><span style="font-family: Calibri; font-size: small;">7.</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </strong><strong><span style="font-size: small;"><span style="font-family: Calibri;">Clients</span></span></strong></li>
</ol>
<p><span style="font-size: small;"><span style="font-family: Calibri;">Outlook, Web and Offline Clients are suppored in both on line and on premise.</span></span></p>
<p><span style="font-family: Calibri; font-size: small;">&nbsp;</span></p>
<ol>
<li><strong><span style="font-family: Calibri; font-size: small;">8.</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </strong><strong><span style="font-size: small;"><span style="font-family: Calibri;">SLA/Support from Microsoft</span></span></strong></li>
</ol>
<p><span style="font-size: small;"><span style="font-family: Calibri;">The SLA for CRM online is 99.9% uptime throughout which Microsoft promises. There are maintainence plans that take place for the sites on CRM online sites, but those do not affect the users accessing the sites. There is a support team that can be contacted for any problems related to down time or any issues accessing data on CRM online.</span></span></p>
<p><span style="font-size: small;"><span style="font-family: Calibri;">For CRM on premise there is no SLA given my Microsoft (apart from the support team to assist in troubleshooting), since it depends on the customer&rsquo;s hosting network and infrastructure.</span></span></p>
<p><span style="font-family: Calibri; font-size: small;">&nbsp;</span></p>
<ol>
<li><strong><span style="font-family: Calibri; font-size: small;">9.</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </strong><strong><span style="font-size: small;"><span style="font-family: Calibri;">CfMD Solutions</span></span></strong></li>
</ol>
<p>&nbsp;</p>
<p><span style="font-family: Calibri; font-size: small;">Supported in both CRM online and on premise.</span> <span style="font-size: small;"><span style="font-family: Calibri;">CfMD = Certified for Microsoft Dynamics</span></span></p>
<p><span style="font-family: Calibri; font-size: small;">Read more: </span><a href="https://www.microsoft.com/en-us/dynamics/partners-certified.aspx"><span style="color: #0000ff; font-family: Calibri; font-size: small;">https://www.microsoft.com/en-us/dynamics/partners-certified.aspx</span></a></p>
<p><span style="font-family: Calibri; font-size: small;">&nbsp;</span></p>
<p><span style="font-size: small;"><span style="font-family: Calibri;">Solutions created on CRM on premise and on line can be certified for being sold at The Dynamics Marketplace (TDM) for other customers and partners to buy.</span></span></p>
<p><span style="font-family: Calibri; font-size: small;">&nbsp;</span></p>
<ol>
<li><strong><span style="font-family: Calibri; font-size: small;">10.</span>&nbsp;&nbsp; </strong><strong><span style="font-size: small;"><span style="font-family: Calibri;">Mobile Express</span></span></strong></li>
</ol>
<p><span style="font-family: Calibri; font-size: small;">Supported in both CRM online and on premise.</span></p>
<p><span style="font-family: Calibri; font-size: small;">&nbsp;</span></p>
<ol>
<li><strong><span style="font-family: Calibri; font-size: small;">11.</span>&nbsp;&nbsp; </strong><strong><span style="font-size: small;"><span style="font-family: Calibri;">Custom Applications using .NET</span></span></strong></li>
</ol>
<p><span style="font-size: small;"><span style="font-family: Calibri;">This is for customers who plan on building their own applications that interact with the CRM 2011 Application using the CRM WCF Services.</span></span></p>
<p><span style="font-size: small;"><span style="font-family: Calibri;">The difference lies in accessing the Discovery.svc service which works on Claims authentication for CRM online. You need to install WIF on the machine that is trying to acccess the Discovery service. For CRM on premise, this is not required.</span></span></p>
<p><strong><span style="font-family: Calibri; font-size: small;">&nbsp;</span></strong></p>
<ol>
<li><strong><span style="font-family: Calibri; font-size: small;">12.</span>&nbsp;&nbsp; </strong><strong><span style="font-size: small;"><span style="font-family: Calibri;">Custom folders, ISV folders access</span></span></strong></li>
</ol>
<p><span style="font-size: small;"><span style="font-family: Calibri;">In CRM online, users cannot access the ISV folders or any folders used in CRM since the datacenter folders are not accessible. In CRM on premise, this is possible since the folders are on a self hosted environment.</span></span></p>
<p><span style="font-size: small;"><span style="font-family: Calibri;">This is not a drawback per say, since the customizations that users do using the ISV folder can be done using the Web resources in on line as well as in on premise. Web resources and solutions created in CRM online and CRM on premise can be migrated from one to another.</span></span></p>
<p><span style="font-family: Calibri; font-size: small;">&nbsp;</span></p>
<p><span style="font-size: small;"><span style="font-family: Calibri;">Sitemap, application ribbon, all web resource items can be added and modified in CRM online as well as in on premise. Changing any internally used standard CRM aspx/js/css/htc files are not supported in CRM online.</span></span></p>
<p><span style="font-family: Calibri; font-size: small;">&nbsp;</span></p>
<ol>
<li><strong><span style="font-family: Calibri; font-size: small;">13.</span>&nbsp;&nbsp; </strong><strong><span style="font-size: small;"><span style="font-family: Calibri;">Integration points with other applications:</span></span></strong></li>
</ol>
<p><span style="font-size: small;"><span style="font-family: Calibri;">This section depends on the kind of integration required. CRM online and on premise support a variety of integration points that have been listed here. There would be several others as well depending on the need. Some are provided by Microsoft whereas some integration adapters are provided by Microsoft Partners such as Scribesoft&nbsp; </span></span><a href="https://www.scribesoft.com/"><span style="color: #0000ff; font-family: Calibri; font-size: small;">https://www.scribesoft.com/</span></a></p>
<p><span style="font-size: small;">&uuml;</span>&nbsp; <span style="font-size: small;"><span style="font-family: Calibri;">Integration with social media like LinkedIn, Facebook, Twitter from CRM on premise and on line (this needs to be done through custom code and available widgets from the social networking sites.)</span></span></p>
<p>&uuml;&nbsp; <span style="font-family: Calibri; font-size: small;">Integrating Dynamics GP with CRM online and CRM on premise </span><a title="https://mbs.microsoft.com/partnersource/deployment/resources/productreleases/MDGP10_CRMAdapter.htm" href="https://mbs.microsoft.com/partnersource/deployment/resources/productreleases/MDGP10_CRMAdapter.htm"><span style="color: #0000ff;">https://mbs.microsoft.com/partnersource/deployment/resources/productreleases/MDGP10_CRMAdapter.htm</span></a></p>
<p><span style="font-size: small;">&uuml;</span>&nbsp; <span style="font-size: small;"><span style="font-family: Calibri;">Integrating Dynamics NAV with CRM online and CRM on premise</span></span></p>
<p><a href="https://msdn.microsoft.com/en-us/library/gg502460.aspx"><span style="color: #0000ff; font-family: Calibri; font-size: small;">https://msdn.microsoft.com/en-us/library/gg502460.aspx</span></a></p>
<p><span style="font-size: small;">&uuml;</span>&nbsp; <span style="font-size: small;"><span style="font-family: Calibri;">Integration Microsoft&nbsp; Biztalk Server with CRM online and CRM on premise</span></span></p>
<p><a href="https://blogs.msdn.com/b/pkelcey/archive/2011/03/10/crm-2011-integration-how-to-video-1-biztalk-on-premise-to-crm-2011.aspx"><span style="color: #0000ff; font-family: Calibri; font-size: small;">https://blogs.msdn.com/b/pkelcey/archive/2011/03/10/crm-2011-integration-how-to-video-1-biztalk-on-premise-to-crm-2011.aspx</span></a></p>
<p><span style="font-family: Calibri; font-size: small;">&nbsp;</span></p>
<p>&nbsp;</p>]]></content:encoded>
    </item>
    <item>
      <title>What's so great about moving to the CRM Cloud!</title>
      <link>https://docs.microsoft.com/archive/blogs/swetagu/whats-so-great-about-moving-to-the-crm-cloud</link>
      <pubDate>Tue, 02 Aug 2011 01:42:00 GMT</pubDate>
      <dc:creator><![CDATA[SwetaGupta]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/swetagu/2011/08/02/whats-so-great-about-moving-to-the-crm-cloud/</guid>
      <description><![CDATA[Gartner or Forrester and other research organizations would tell you that probably about between 20-...]]></description>
      <content:encoded><![CDATA[<p><span style="font-size: small;"><span style="font-family: Calibri;">Gartner or Forrester and other research organizations would tell you that probably about between 20- 30 per cent of business in the CRM category is in cloud delivered applications today. </span></span></p>
<p><span style="font-size: small;"><span style="font-family: Calibri;">Over time there will be increasing Software plus Services (S+S) or Cloud penetration in all segments of the business. For small businesses especially they&rsquo;re less apt to build and run IT assets internally and so will lean toward consuming CRM as a utility, as a cloud-based service. At the other end with enterprise or large organization you are more likely to see people deploying on-premise because they have competence in running IT at scale.</span></span></p>
<p><span style="font-size: small;"><span style="font-family: Calibri;">Microsoft&rsquo;s strategy is to make sure that everyone can engage first through a cloud delivered product. It&rsquo;s simply the fastest and easiest way to try the product. Microsoft Dynamics CRM online or on-premise are essentially the same product, the same code-base so any investments a customer makes in customizing and tailoring the product can accrue to any deployment model they want. Some small differences exist which have some workaround. Except for a few trivial things that are not possible with CRM online. </span></span></p>]]></content:encoded>
    </item>
    <item>
      <title>CRM Timer for the Case entity</title>
      <link>https://docs.microsoft.com/archive/blogs/swetagu/crm-timer-for-the-case-entity</link>
      <pubDate>Wed, 20 Jul 2011 22:16:00 GMT</pubDate>
      <dc:creator><![CDATA[SwetaGupta]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/swetagu/2011/07/20/crm-timer-for-the-case-entity/</guid>
      <description><![CDATA[One of the features that we don't have in the case entity is a timer field to log the amount of time...]]></description>
      <content:encoded><![CDATA[<p><span style="font-size: small;">One of the features that we don't have in the case entity is a timer field to log the amount of time spent on a particular case. Everytime you open the case entity you would have some amount of time spent on the case and would need to track it for billing or just tracking purposes. </span></p>
<p><span style="font-size: small;">There could be various ways of implementing it. One of the ways i have implemented this feature has been described below</span></p>
<p><span style="font-family: Calibri; font-size: small;">&nbsp;</span></p>
<ol>
<li><span style="font-family: Calibri; font-size: small;">1.</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="font-size: small;"><span style="font-family: Calibri;">Create 2 new attributes for the Case Entity from the Customize Entities screen. </span></span><ol>
<li><span style="font-family: Calibri; font-size: small;">a.</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="font-size: small;"><span style="font-family: Calibri;">new_timer_change </span></span></li>
<li><span style="font-family: Calibri; font-size: small;">b.</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="font-size: small;"><span style="font-family: Calibri;">new_timer_readonly</span></span></li>
</ol></li>
</ol>
<p><span style="font-family: Calibri; font-size: small;"><span style="line-height: 115%; font-family: 'Calibri','sans-serif'; font-size: 11pt; mso-fareast-font-family: 'Malgun Gothic'; mso-bidi-font-family: 'Times New Roman'; mso-no-proof: yes; mso-ansi-language: EN-US; mso-fareast-language: KO; mso-bidi-language: AR-SA;">&nbsp;&nbsp;<a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/57/60/5344.First.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-57-60/5344.First.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/57/60/5344.First.png" original-url="https://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-57-60/5344.First.png" alt="" border="0" /></a></span></span></p>
<p><span style="font-family: Calibri; font-size: small;">&nbsp;<a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/57/60/6403.second.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-57-60/6403.second.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/57/60/6403.second.png" original-url="https://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-57-60/6403.second.png" alt="" border="0" /></a></span></p>
<ol>
<li><span style="font-family: Calibri; font-size: small;">2.</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="font-size: small;"><span style="font-family: Calibri;">Go to the Customizations screen and in Customize Entities select the Case Entity. Open the case entity and click on the &ldquo;Forms and Attributes&rdquo; option there in the left menu of the screen.</span></span></li>
</ol>
<p><span style="font-size: small;"><span style="font-family: Calibri;">Double click on &ldquo;Form&rdquo;.</span></span></p>
<p><span style="font-family: Calibri; font-size: small;">&nbsp;<a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/57/60/3225.third.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-57-60/3225.third.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/57/60/3225.third.png" original-url="https://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-57-60/3225.third.png" alt="" border="0" /></a></span></p>
<p>&nbsp;</p>
<p><span style="font-family: Calibri; font-size: small;">&nbsp;</span></p>
<ol>
<li><span style="font-family: Calibri; font-size: small;">3.</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="font-size: small;"><span style="font-family: Calibri;">In the Form&rsquo;s entity screen go to Attributes and add the two new attributes for timers as fields on the screen. </span></span></li>
</ol>
<p><span style="font-size: small;"><span style="font-family: Calibri;">Go the Notes tab and then add the fields to this tab. This can be done by clicking on Add Fields and selecting the new timer attributes and putting them inside a section called &ldquo;Time Tracker&rdquo; (refer to the diagram below for details on the arrangement I did for the timer fields)</span></span></p>
<p>&nbsp;</p>
<p><span style="font-family: Calibri; font-size: small;">&nbsp;<a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/57/60/1538.fourth.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-57-60/1538.fourth.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/57/60/1538.fourth.png" original-url="https://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-57-60/1538.fourth.png" alt="" border="0" /></a></span></p>
<p>&nbsp;</p>
<p><span style="font-size: small;"><span style="font-family: Calibri;">Timer Tracker &ndash; New section added to the Case Entity for the Notes tab. You can change the tab name by double clicking on it.</span></span></p>
<p><span style="font-size: small;"><span style="font-family: Calibri;">Timer and Override Timer fields &ndash; New attributes added as Step 1 of this implementation</span></span></p>
<p><span style="font-family: Calibri; font-size: small;">&nbsp;</span></p>
<p>&nbsp;</p>
<ol>
<li><span style="font-family: Calibri; font-size: small;">4.</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="font-size: small;"><span style="font-family: Calibri;">Once that is done, Save and Close the case entity form. The customized fields have been added. The next step is to add JavaScript to implement the timer.</span></span></li>
</ol>
<p><span style="font-size: small;"><span style="font-family: Calibri;">Go the IIS of the application server where Dynamics CRM is hosted. Here, select the Microsoft Dynamics CRM website and open the ISV folder. Create another folder there called &ldquo;Scripts&rdquo;</span></span></p>
<p><span style="font-size: small;"><span style="font-family: Calibri;">Place&nbsp;a&nbsp;<strong>script</strong> file containing the script&nbsp;that I have given below in this folder. </span></span></p>
<p>&nbsp;<a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/57/60/2671.fifth.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-57-60/2671.fifth.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/57/60/2671.fifth.png" original-url="https://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-57-60/2671.fifth.png" alt="" border="0" /></a></p>
<p><span style="font-size: small;"><span style="font-family: Calibri;">&nbsp;</span></span></p>
<table border="0">
<tbody>
<tr>
<td>
<p>var min = 0;<br />var sec = 0;<br />var hour = 0;<br />var SD;</p>
<p>crmForm.all.new_timer_readonly.disabled=true;</p>
<p>if(crmForm.all.new_timer_change.value == "")<br />{<br />&nbsp;crmForm.all.new_timer_readonly.value = "00:00";<br />}<br />else<br />{<br />&nbsp;crmForm.all.new_timer_readonly.value = crmForm.all.new_timer_change.value;<br />&nbsp;var str = crmForm.all.new_timer_change.value;<br />&nbsp;var new_str = str.split(":");<br />&nbsp;sec = 0;<br />&nbsp;sec = parseInt(sec);<br />&nbsp;hour = parseInt(new_str[0]);<br />&nbsp;min = parseInt(new_str[1]);<br />}</p>
<p>&nbsp;</p>
<p>window.onload = function() <br />{<br />&nbsp;&nbsp; Test();<br />&nbsp;&nbsp; SD=window.setInterval(Test, 1000);<br />}</p>
<p>function Test()<br />{</p>
<p>sec++;<br />&nbsp; if (sec == 60) <br />{<br />&nbsp;&nbsp; sec = 0;<br />&nbsp;&nbsp; min = min + 1; }<br />&nbsp; else <br />{<br />&nbsp;&nbsp; min = min; }<br />&nbsp; if (min == 60) <br />{<br />&nbsp;&nbsp; min = 0; <br />&nbsp;&nbsp; hour += 1;</p>
<p>}</p>
<p>if (sec&lt;=9) <br />{ sec = "0" + sec; }<br />&nbsp;&nbsp; crmForm.all.new_timer_readonly.value = ((hour&lt;=9) ? "0"+hour : hour) + ":" + ((min&lt;=9) ? "0" + min : min);</p>
<p>}</p>
<p>&nbsp;</p>
</td>
</tr>
</tbody>
</table>
<p>&nbsp;</p>
<p><span style="font-size: small;"><span style="font-family: Calibri;">&nbsp;</span></span></p>
<ol>
<li><span style="font-family: Calibri; font-size: small;">5.</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="font-size: small;"><span style="font-family: Calibri;">Go back to the Customizations page for the Case Entity which we saw in Step 3. </span></span></li>
</ol>
<p><span style="font-size: small;"><span style="font-family: Calibri;">Select the Case entity and go the Forms page again where we added new fields. Click on Form properties and you will find the following screen:</span></span></p>
<p><span style="font-family: Calibri; font-size: small;">&nbsp;</span></p>
<p><span style="font-family: Calibri; font-size: small;">&nbsp;<a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/57/60/2350.sixth.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-57-60/2350.sixth.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/57/60/2350.sixth.png" original-url="https://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-57-60/2350.sixth.png" alt="" border="0" /></a></span></p>
<p><span style="font-family: Calibri; font-size: small;">&nbsp;</span></p>
<p>&nbsp;</p>
<p><span style="font-family: Calibri; font-size: small;">&nbsp;</span></p>
<ol>
<li><span style="font-family: Calibri; font-size: small;">6.</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="font-size: small;"><span style="font-family: Calibri;">You will find the OnLoad and OnSave events here. </span></span></li>
</ol>
<p><span style="font-size: small;"><span style="font-family: Calibri;">Select &ldquo;OnLoad&rdquo; and click on Edit to add functionality in the onload of the Case entity. This is for adding script to access the ScriptFile.js.</span></span></p>
<p><span style="font-size: small;"><span style="font-family: Calibri;">Add the following code to access the script file and select &ldquo;Event is enabled&rdquo;</span></span></p>
<p><span style="font-family: Calibri; font-size: small;">&nbsp;</span></p>
<p><span style="font-family: Calibri; font-size: small;">&nbsp;<a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/57/60/6445.seventh.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-57-60/6445.seventh.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/57/60/6445.seventh.png" original-url="https://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-57-60/6445.seventh.png" alt="" border="0" /></a></span></p>
<p>&nbsp;</p>
<p><span style="font-family: Calibri; font-size: small;">&nbsp;</span></p>
<p><span style="font-size: small;"><span style="font-family: Calibri;">Script to be added on the onload event:</span></span></p>
<p><em><span style="font-size: small;"><span style="font-family: Calibri;">(this script uses ActiveX and you would get a prompt to execute this script if your browser doesn&rsquo;t have ActiveX enabled)</span></span></em></p>
<p><span style="font-family: Calibri; font-size: small;">&nbsp;</span></p>
<p><span style="font-size: small;"><span style="font-family: Calibri;">function IncludeExternalScript(scriptFile)</span></span></p>
<p><span style="font-size: small;"><span style="font-family: Calibri;">{&nbsp; </span></span></p>
<p><span style="font-size: small;"><span style="font-family: Calibri;">var netRequest = getXMLHttpRequest();</span></span></p>
<p><span style="font-size: small;"><span style="font-family: Calibri;">netRequest.open("GET", scriptFile, true);&nbsp; </span></span></p>
<p><span style="font-size: small;"><span style="font-family: Calibri;">netRequest.send();&nbsp;&nbsp; </span></span></p>
<p><span style="font-size: small;"><span style="font-family: Calibri;">var resText = netRequest.responseText;</span></span></p>
<p><span style="font-size: small;"><span style="font-family: Calibri;">eval(resText);</span></span></p>
<p><span style="font-size: small;"><span style="font-family: Calibri;">}</span></span></p>
<p><span style="font-family: Calibri; font-size: small;">&nbsp;</span></p>
<p><span style="font-size: small;"><span style="font-family: Calibri;">function getXMLHttpRequest() </span></span></p>
<p><span style="font-size: small;"><span style="font-family: Calibri;">{</span></span></p>
<p><span style="font-size: small;"><span style="font-family: Calibri;">&nbsp;return new window.XMLHttpRequest;</span></span></p>
<p><span style="font-size: small;"><span style="font-family: Calibri;">}</span></span></p>
<p><span style="font-size: small;"><span style="font-family: Calibri;">IncludeExternalScript('/ISV/Scripts/ScriptFile1.js');</span></span></p>
<p><span style="font-size: small;"><span style="font-family: Calibri;">onload();</span></span></p>
<p><span style="font-family: Calibri; font-size: small;">&nbsp;</span></p>
<ol>
<li><span style="font-family: Calibri; font-size: small;">7.</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="font-size: small;"><span style="font-family: Calibri;">Place this script on the OnSave event on the form. Refer to the previous step to know how to go back to the OnSave event.</span></span></li>
</ol>
<p><span style="font-size: small;"><span style="font-family: Calibri;">Select the &ldquo;Event is enabled&rdquo; checkbox.</span></span></p>
<p><span style="font-family: Calibri; font-size: small;">&nbsp;</span></p>
<p>&nbsp;<a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/57/60/2816.eight.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-57-60/2816.eight.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/57/60/2816.eight.png" original-url="https://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-57-60/2816.eight.png" alt="" border="0" /></a></p>
<p><span style="font-family: Calibri; font-size: small;">&nbsp;</span></p>
<p><span style="font-size: small;"><span style="font-family: Calibri;">Script to be put here:</span></span></p>
<p><span style="font-family: Calibri; font-size: small;">&nbsp;</span></p>
<p><span style="font-size: small;"><span style="font-family: Calibri;">if(crmForm.all.new_timer_change.value == "")</span></span></p>
<p><span style="font-size: small;"><span style="font-family: Calibri;">{</span></span></p>
<p><span style="font-size: small;"><span style="font-family: Calibri;">&nbsp;&nbsp;&nbsp; crmForm.all.new_timer_change.value = crmForm.all.new_timer_readonly.value;</span></span></p>
<p><span style="font-size: small;"><span style="font-family: Calibri;">}</span></span></p>
<p><span style="font-family: Calibri; font-size: small;">&nbsp;</span></p>
<p><span style="font-family: Calibri; font-size: small;">&nbsp;</span></p>
<ol>
<li><span style="font-family: Calibri; font-size: small;">8.</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="font-size: small;"><span style="font-family: Calibri;">Once this is done Save and Close the form and go to the main Case entity screen and click on Publish to publish the changes into the Case form. Refer to the screen shot for the publish button (indicated with an arrow). </span></span></li>
</ol>
<p>&nbsp;<a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/57/60/3884.ninth.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-57-60/3884.ninth.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/57/60/3884.ninth.png" original-url="https://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-57-60/3884.ninth.png" alt="" border="0" /></a></p>
<p><span style="font-family: Calibri; font-size: small;">&nbsp;</span></p>
<ol>
<li><span style="font-family: Calibri; font-size: small;">9.</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="font-size: small;"><span style="font-family: Calibri;">Once this is done, you can go back to your Services module in CRM, select Cases in the left navigation menu and add new cases. Go to the Notes tab and check the <strong>Timer</strong> field incrementing after each minute. You can override the timer by adding time in the <strong>&ldquo;same format&rdquo; as displayed in the Override Timer field.</strong></span></span></li>
</ol>
<p>&nbsp;</p>
<p><span style="font-family: Calibri; font-size: small;">&nbsp;<a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/57/60/5025.tenth.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-57-60/5025.tenth.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/57/60/5025.tenth.png" original-url="https://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-57-60/5025.tenth.png" alt="" border="0" /></a></span></p>
<p><span style="font-size: small;">And voila, it is done.</span></p>
<p><span style="font-size: small;">The implementation I have done here is on CRM 4, and it can be implemented similarly on CRM 2011. </span></p>
<p>&nbsp;</p>]]></content:encoded>
    </item>
    <item>
      <title>Real time data streaming from WCF to Excel using a Macro</title>
      <link>https://docs.microsoft.com/archive/blogs/swetagu/real-time-data-streaming-from-wcf-to-excel-using-a-macro</link>
      <pubDate>Wed, 20 Apr 2011 09:36:00 GMT</pubDate>
      <dc:creator><![CDATA[SwetaGupta]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/swetagu/2011/04/20/real-time-data-streaming-from-wcf-to-excel-using-a-macro/</guid>
      <description><![CDATA[I had come across this scenario with one of my customers. It was pretty challenging at first to...]]></description>
      <content:encoded><![CDATA[<p><span style="font-size: small;">I had come across this scenario with one of my customers. It was pretty challenging at first to figure out the best way to get this done, but eventually it seemed simple enough.</span></p>
<p><span style="font-size: small;"><strong>Scenario</strong>:</span></p>
<p><span style="font-size: small;">The customer has a web application talking to a SQL server database and they have a WCF service hosted which is exposed to their users. </span></p>
<p><span style="font-size: small;">The customer&nbsp;needs data to be given to their users in a standard format. The tricky part is the&nbsp;users&nbsp;could use Excel to view the data and sync it.&nbsp;Now this is straight forward since we can easily stream the data to an xml format. How can we ensure that everytime the user opens an excel sheet it syncs with the service and gets the data? </span></p>
<p>&nbsp;Solution:</p>
<p>An Excel file(containing the macro) which calls the WCF Service to generate this XML file. The Excel file would have the data in the active sheet. This sheet needs to be saved by the client separately.&nbsp;</p>
<p>The tricky part here was to get the Excel macro to talk to the WCF service</p>
<p><strong><span style="font-family: Calibri;">Steps I did from the start:</span></strong></p>
<ol>
<li><span style="font-family: Calibri; font-size: small;">1.</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="font-size: small;"><span style="font-family: Calibri;">Creating the EF model with the Views in the database.</span></span></li>
</ol>
<p>&nbsp;<a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/57/60/5383.FIRST.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-57-60/5383.FIRST.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/57/60/5383.FIRST.png" original-url="https://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-57-60/5383.FIRST.png" alt="" border="0" /></a></p>
<p><span style="font-family: Calibri; font-size: small;">&nbsp;</span></p>
<ol>
<li><span style="font-family: Calibri; font-size: small;">2.</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="font-size: small;"><span style="font-family: Calibri;">Creating the WCF Service to expose these views. Create this in a separate tier or keep it in the same EF tier. Wouldn&rsquo;t matter if you keep it in the same tier, it would reduce the communication between the 2 tiers.</span></span></li>
</ol>
<p><span style="font-size: small;"><span style="font-family: Calibri;"><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/57/60/2860.SECOND.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-57-60/2860.SECOND.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/57/60/2860.SECOND.png" original-url="https://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-57-60/2860.SECOND.png" alt="" width="714" height="411" border="0" /></a></span></span></p>
<p>&nbsp;</p>
<p><span style="font-size: small;"><span style="font-family: Calibri;">This shows a single method called GetViewData() that returns the data from the single view available inside the EF model.</span></span></p>
<p><span style="font-family: Calibri; font-size: small;">&nbsp;</span></p>
<ol>
<li><span style="font-family: Calibri; font-size: small;">3.</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="font-size: small;"><span style="font-family: Calibri;">Host the service in the IIS. Here it has been hosted by a console application using the ServiceHost class.</span></span></li>
</ol>
<p><span style="font-family: Calibri; font-size: small;">&nbsp;</span></p>
<p><span style="font-family: Calibri; font-size: small;">&nbsp;<a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/57/60/4454.THIRD.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-57-60/4454.THIRD.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/57/60/4454.THIRD.png" original-url="https://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-57-60/4454.THIRD.png" alt="" border="0" /></a></span></p>
<p>&nbsp;</p>
<p><span style="font-family: Calibri; font-size: small;">&nbsp;</span></p>
<ol>
<li><span style="font-family: Calibri; font-size: small;">4.</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="font-size: small;"><span style="font-family: Calibri;">Use the Excel sheet which needs to get the data in it and write a macro. The macro opens the data in the active Excel sheet and also creates an xml file on the client side. The file at the client side can be used to display data in access and other tools like Crystal reports.</span></span></li>
</ol>
<p><span style="font-family: Calibri; font-size: small;">&nbsp;</span></p>
<p>&nbsp;<a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/57/60/8831.FOURTH.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-57-60/8831.FOURTH.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/57/60/8831.FOURTH.png" original-url="https://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-57-60/8831.FOURTH.png" alt="" width="684" height="419" border="0" /></a></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p><span style="font-family: Calibri; font-size: small;">&nbsp;<a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/57/60/3005.FIFTH.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-57-60/3005.FIFTH.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/57/60/3005.FIFTH.png" original-url="https://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-57-60/3005.FIFTH.png" alt="" border="0" /></a></span></p>
<p><span style="font-size: small;"><span style="font-family: Calibri;">The code written in the workbook open method in the macro would write the data that has been streamed from the server into the active sheet in the excel workbook.</span></span></p>
<p><strong><span style="font-size: small;"><span style="font-family: Calibri;">Files created on the Client:</span></span></strong></p>
<ol>
<li><span style="font-family: Calibri; font-size: small;">1.</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="font-size: small;"><span style="font-family: Calibri;">An XML file with all the data which can be used by the client tools</span></span></li>
<li><span style="font-family: Calibri; font-size: small;">2.</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="font-size: small;"><span style="font-family: Calibri;">An Excel file(containing the macro) which calls the WCF Service to generate this XML file. The Excel file would have the data in the active sheet. This sheet needs to be saved by the client.</span></span></li>
</ol>
<p><span style="font-size: small;"><span style="font-family: Calibri;">And it's done! Hope this helps some of you wanting to do something on similar lines.</span></span></p>
<p>&nbsp;</p>]]></content:encoded>
    </item>
    <item>
      <title>Windows Server AppFabric Hosting Dashboard for monitoring</title>
      <link>https://docs.microsoft.com/archive/blogs/swetagu/windows-server-appfabric-hosting-dashboard-for-monitoring</link>
      <pubDate>Wed, 09 Mar 2011 01:16:00 GMT</pubDate>
      <dc:creator><![CDATA[SwetaGupta]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/swetagu/2011/03/09/windows-server-appfabric-hosting-dashboard-for-monitoring/</guid>
      <description><![CDATA[One amazing thing you get to use with Windows Server AppFabric is the Dashboard feature.
It allows...]]></description>
      <content:encoded><![CDATA[<p>One amazing thing you get to use with Windows Server AppFabric is the Dashboard feature.</p>
<p>It allows you to monitor your services hosted on the cluster. Though it doesn't show you anything about your cache items, it still helps in monitoring your hosted services.&nbsp;You can view all your service instances, the requests and calls made to the services, errors or failures and almost everything you'd like to see about your cluster.</p>
<p>Open the AppFabric Dashboard page by clicking the AppFabric Dashboard icon within IIS Manager extensions in Windows Server AppFabric, which appears in IIS Manager as AppFabric.</p>
<p>Read more about this here: <a href="https://msdn.microsoft.com/en-us/library/ee677236(v=azure.10).aspx">https://msdn.microsoft.com/en-us/library/ee677236(v=azure.10).aspx</a></p>
<p>&nbsp;</p>]]></content:encoded>
    </item>
  </channel>
</rss>