Microsoft Dynamics

Video: Add users to Microsoft Dynamics CRM Online

by C.R. Matín on July 6, 2011

After you subscribe to Microsoft Dynamics CRM Online, one of your first tasks as an administrator is to add users, and invite them to join and begin using your new organization. View this video to learn how to add users to your Microsoft Dynamics CRM Online subscription, and send them invitations to join.

Let me know if the video was useful!

Cheers,

Carola Klass

{ 0 comments }

imageWe are pleased to announce the release of the white paper, Microsoft Dynamics CRM for Microsoft Office Outlook Compatibility with Citrix XenApp 6, which is available for download from the Microsoft Download Center at : http://www.microsoft.com/download/en/details.aspx?id=26667.

Microsoft, working with Citrix® Corporation, completed functional verification of Microsoft Dynamics CRM for Microsoft Office Outlook and Citrix XenApp 6 and its components. This white paper details the compatibility verification of Microsoft Dynamics CRM for Microsoft Office Outlook when deployed with Microsoft Office 2007 on Citrix XenApp 6, as well as the results of scalability testing of Microsoft Dynamics CRM for Outlook on Citrix XenApp 6 running on an Intel Xeon processor-based server.

Specifically, the paper includes:

  • Instructions for setting up and deploying the test environment.
  • A description of the Microsoft Dynamics CRM implementation and the methods used to obtain the results.
  • Details of the hardware configuration and software settings.
  • A summary of the key test parameters and results.

I’d especially like to recognize the efforts of Krishnan Rangarajan, Alex Kalinin, Corey Hanson, and the broader CRM Product Group for contributing to and reviewing this paper to help ensure its completeness and accuracy.

Note: The paper will subsequently be available via MSDN and the TechNet library in the CRM section under Technical Articles for Managed IT.

Thanks,

Jim Toland



{ 0 comments }

Update Rollup 18 for Microsoft Dynamics CRM 4.0

June 30, 2011

The Microsoft Dynamics CRM Sustained Engineering (SE) team released Microsoft Dynamics CRM 4.0 Update Rollup 18 on Thursday, June 30, 2011. The links below will take you to the necessary information about Update Rollup 18. Microsoft Download Cent…

Read the full article →

CRMUG ~ the power of Networking

June 29, 2011

The Dynamics CRM User Group (CRMUG®) provides users a wealth of opportunities to learn, network, and share expertise about Microsoft Dynamics CRM. Powered by Dynamic Communities, Inc., CRMUG is an independent community and the only one recognized by M…

Read the full article →

FAQ for Customer and Partner Portals

June 27, 2011

This post addresses the most common issues that occur with the Customer and Partner Relationship Management Portals. If the problem you’re running into is not in the list below, please post a message to the CRM Labs Solutions Forum here: http://social.microsoft.com/Forums/en-US/crmlabs/threads?filter=alltypes.

1. Solution Import

1.1 Getting started with the portals

Portal installation instructions are as follows:

  1. Download the cab file from the marketplace and save it to disk
  2. Unpack the cab using instructions above
  3. Navigate to the “Documentation” folder
  4. Follow instructions for On Premise or Azure Deployment

1.2 Unpack the cab file downloaded from the marketplace

The cab file can be unpacked in two ways:

  1. If you have a third party unzipping program, you can right click on the cab file and use the unpacking tool.
  2. If you don’t have a third party tool, follow these steps:
    1. Open a command prompt. Start->run-> “cmd”
    2. Navigate to the location you stored the cab file
    3. “md CustomerPortal”
    4. “expand CustomerPortal.exe.cab –f:* CustomerPortal”

1.3 Solution Import: Error about cab files not being signed

“The cab file is not signed or digital signature cannot be verified”.

This error occurs for one of two reasons:

  • The incorrect cab file is being imported
    MicrosoftXrmCustomerPortal.cab
    and MicrosoftXrmPartnerPortal.cab are the solution cab files. Please make sure you’re importing one of these. They are in the root directory once you’ve unpacked CustomerPortal.exe.cab or PartnerPortal.exe.cab.
  • The root cab file was not unpacked correctly
    Please follow instructions above for unpacking the cab file

1.4 Solution Import: Schema validation error when importing the correct cab file

"The selected file is corrupted or it does not use the correct schema. Either select another file or modify the file to use the Microsoft Dynamics CRM migration template schema"

This error occurs when you are running on pre-RTM version of Microsoft Dynamics CRM 2011. The portals were developed against version 5.0.9688.583, so please make sure you’re running on a build greater than that.

Note: You can check the build you are running by going to your CRM client and navigating to File -> Help -> About Microsoft Dynamics CRM.

1.5 Installing both Customer and Partner portals in the same CRM instance

The steps are as follows:

  1. Install Partner Relationship Management Portal following the Partner Portal Deployment Guide. The PRM solution contains all the necessary components that are required for both portals to work.
  2. Install the Customer Portal website. Note – don’t install the CRM solution, just host the website on Azure. Skip to step #3 in the Deployment Steps section of the Customer Portal Deployment Guide.

You can install both solutions in step 1 as well if you’d like.

2. Live ID/Azure Setup

2.1 Getting the device id and password

Device ID and password are strings 12-22 characters long and are related to the live id so you can come up with any strings that meet the criteria. Please make sure note them down as you will need these values every time you connect to CRM Online with that particular Live ID.

2.2 Live-ID changes

Live ID no longer requires domain verification, so we don’t need to download the txt file and add it to the azure project. Additionally, the UI is different. Please refer to the updated Step 8 of the documentation here:

Customer Portal

Partner Relationship Management Portal

3. Partner Portal Access Issues

"You do not have sufficient permissions to view this page." in the Partner Portal

  1. Set the Parent Customer of the Contact (customer accessing the portal) to a Partner
  2. Set Account Relationship Type to "Partner"
  3. Invalidate the Cache
  4. Set access permissions for that contact following instructions in the documentation

4. Changing Membership Provider

If you’d like to use AD or IFD instead of Live ID for authentication, you can follow the steps in this blog:

http://www.shanmcarthur.net/crm/developers-corner/customer-portal-modifications-for-demo-vpc-without-internet-connectivity

While it is written for CRM 4, the process is identical for the CRM 2011 Portals as well.

The portals are designed to follow ASP.NET conventions. They should work with any legacy SSO solution that uses the IPrincipal mechanism of ASP.NET, or any membership provider that you plug into your site including the Active Directory or SQL membership providers distributed with ASP.NET.

5. WebsiteCopy.exe Utility fails when using Claims/IFD authentication
          OR
cannot connect to datacenters outside the US

WebsiteCopy.exe UI that was released with the portals on the Microsoft Dynamics Marketplace does not support Claims or IFD authentication. The UI will not allow providing only a username and password in the scenario where you have CRM installations with Claims/IFD auth. It also doesn’t connect to non-US organizations.

You can use one of two solutions for this:

  • Use the command line interface
  • Download CRM SDK version 5.0.3 or greater. The issue has been fixed in WebsiteCopy.exe released in the SDK

6. Language problems

The portals are English-only. We have not tested them in other languages.

If you are successfully able to import the Portal solution into your system and cannot activate workflows, you can try installing the English Language pack to your system. Alternatively, you can write your own workflows since the logic is pretty trivial.

6.1 System.NullReferenceException when trying to create/view a case

This issue occurs only in CRM orgs that do not have English as the base language. The *WEB* keyword needs to be in the service description and the case default subject and priority needs to be translated to the target language.

Palak Kadakia

Read the full article →

Writing a Multi-Currency Aware Roll-up Plug-in

June 24, 2011

Microsoft Dynamics CRM 2011 localizes in 42 languages. On any base language org, one can install language specific MUI packs and have the UI reflect in the language of the user’s choice. When considering global organizations that use MUI packs, the currency issue also becomes central. CRM has multi-currency handling built into the system. By navigating to Settings>Business Management > Currencies, one can create different currencies and specify the exchange rate as the base currency of the org. In this blog we will look into the challenges of writing roll-up plug-ins that is multi-currency aware.

Let’s consider a simple scenario where a business is running a campaign to raise money with a set goal. It’s a global business and the money is being collected through its subsidiaries in different countries.

  • To model and track the collections in CRM, it uses the out of box Campaign entity and a custom “Collection” entity.
  • To get the current collected amount of a campaign. The individual collections need to be rolled up to the parent campaign and displayed in USD.
  • To model the data the Campaign entity has two new custom fields:
    • Goal: A money field that tracks the target collection amount.
    • Collected: A money field that tracks the current collection amount.
  • The custom entity “Collection” also has two new fields:
    • Source: A string field to track where the money came from.
    • Amount: A money field to track the amount that was collected.

Interestingly, CRM has some built in features to help. Since the “Amount” field of the Collection entity is a money field, CRM will internally add the following fields.

  • Amount_base: Tracks the amount collected in organization’s base currency.
  • Transaction currency: Tracks the currency in which the amount was collected.
  • Exchange rate: Tracks the exchange rate that will be used to calculate the base currency value.

Notes:

* The transaction currency and the exchange rate are created once per entity. All money fields on a single record would use the same transaction currency and exchange rate.

* The base currency field is created once for each money field.

Instead of rolling up the Amount fields on the Collection entities, whose values may be in different currencies, the plug-in can roll-up the Amount field’s amount_base values and set the parent Campaign entity’s Collected field’s collected_base.

Here we run into another challenge due to the collected_base field being read only. So we can read the amount_base field on the Collection entity, but cannot set the collected_base of the Collected field on the Campaign entity. Interestingly, the Campaign entity also has the exchange_rate and transaction_currency fields which can be retrieved to calculate the currency specific value from base field.

For cautious developers, there are two more challenges to overcome. First is to check if the currency exchange rate has changed. If the currency exchange rate has changed the CRM platform will fetch the latest exchange rate to calculate the base value for given money field. So, rather than using the exchange rate of the Campaign record we need to use the transaction currency lookup and fetch the current exchange rate when calculating the currency specific value.

The second and last challenge is regarding simultaneous updates. Since CRM is a server, it’s possible that two Collection records are being created simultaneously and their registered plug-ins are running in parallel. CRM does not provide a way to serialize the plug-in execution or lock individual records. Thus it’s recommended that we run the plug-ins asynchronously and do roll-ups using aggregate queries rather than adding and subtracting the individual Collection amount to the Campaign’s collected value. In other words, every time a Collection entity is created, updated or deleted, the asynchronous plug-ins will aggregate all the amount_base fields for all Collection records and update the Collected field on the parent Campaign with the value = (total * exchange rate); the exchange rate is being fetched based upon the transaction currency associated with the parent Campaign.

With all this we now have a good working multi-currency aware roll-up plug-in.

Cheers,

Shashi Ranjan

Read the full article →

White Papers: Managed IT for CRM

June 23, 2011

I am pleased to let you know that the following Managed IT articles are now available via TechNet and MSDN.  As a result, these and future documents will now be available to our audience via MS Downloads, TechNet, and MSDN.  In addition, all white papers and technical articles developed by CRM UA are now consolidated in TechNet and MSDN under Technical Articles.

  • Developers – Content covering topics of specific interest to the Developer audience
  • IT and Administration – Content covering topics of specific interest to implementers and system administrators
  • Managed IT – Content covering topics of specific interest to system engineers and architects

clip_image001

These articles are designed to provide technical information of specific interest to Engineers and Architects planning and supporting Microsoft Dynamics CRM-based business solutions in Managed IT environments.

Special thanks go out to Inna Agranov and Amy Langlois for their assistance in helping me make this happen.

Cheers,

Jim Toland

Read the full article →

Options: Plugin, Workflow or Dialog

June 22, 2011

Our guest blogger today is Gonzalo Ruiz who is a CRM consultant for Avanade Canada.
This post is inspired by a popular article by my ex coworker Humberto Lezama G. regarding when to use plugins or workflows for implementing custom logic in Microsoft Dy…

Read the full article →

Issues When Updating Records Using the REST Endpoint for Web Resources and Silverlight

June 20, 2011

When you update records using Silverlight and the REST Endpoint for Web resources, unless you have worked around this issue you are updating every field even if the data hasn’t changed. This can lead to the following problems:

  • Potential for data loss
  • Auditing data does not correctly reflect actual changes
  • Event driven features such as Workflows (Processes) and Plug-ins execute when they are not needed

This post will describe the issue and provide a technique to avoid the problems.

Issue Description

The Microsoft Dynamics CRM SDK documents the following in the topic: Perform Basic Data Operations in Microsoft Dynamics CRM Using the REST Endpoint.

clip_image002

This behavior is a result of the way that a Silverlight application project generates proxies to work with an OData service. By default all properties defined for an entity are sent in an update request when you use the DataServiceContext.BeginSaveChanges Method. If you are working with an entity instance that was retrieved from a query it will contain all the current values and saving changes will update all the properties of the entity instance with those values even if they have not changed. If you instantiate a new entity instance and only update a few properties the update will overwrite other properties using the default null value for properties you haven’t set.

Technique to Avoid this Problem

To address this problem you need to provide some capability in your Silverlight application to track which properties have changed and only submit those properties when you save changes. Michael created the following solution that extends the Data Service Context to include change tracking for entity properties. I’ve found that it is relatively easy to apply this to an existing Silverlight application. Use the following steps to add and edit a new class file to your project:

Apply Data Service Context Extensions to A Silverlight Application Project:

1. Add a reference to System.Xml.Linq to your Silverlight application project if it doesn’t already exist

2. Create a new class file for your Silverlight application project. You might call it DataServiceContextExtensions.cs.

3. Paste the following code into the new file:

using System;
using System.Linq;
using System.Data.Services.Client;
using System.Reflection;
using System.Collections.Generic;
using System.ComponentModel;
using System.Collections.ObjectModel;
using System.Xml.Linq;

namespace [[The Namespace of your Data Service Context]]
{
 partial class [[The name of your DataServiceContext Class]]
 {
  #region Methods
  partial void OnContextCreated()
  {
   this.ReadingEntity += this.OnReadingEntity;
   this.WritingEntity += this.OnWritingEntity;
  }
  #endregion

  #region Event Handlers
  private void OnReadingEntity(object sender, ReadingWritingEntityEventArgs e)
  {
   ODataEntity entity = e.Entity as ODataEntity;
   if (null == entity)
   {
    return;
   }

   entity.ClearChangedProperties();
  }

  private void OnWritingEntity(object sender, ReadingWritingEntityEventArgs e)
  {
   ODataEntity entity = e.Entity as ODataEntity;
   if (null == entity)
   {
    return;
   }

   entity.RemoveUnchangedProperties(e.Data);
  }
  #endregion
 }

 public abstract class ODataEntity
 {
  private readonly Collection<string> ChangedProperties = new Collection<string>();

  public ODataEntity()
  {
   EventInfo info = this.GetType().GetEvent("PropertyChanged");
   if (null != info)
   {

    PropertyChangedEventHandler method = new PropertyChangedEventHandler

              (this.OnEntityPropertyChanged);

    //Ensure that the method is not attached and reattach it
    info.RemoveEventHandler(this, method);
    info.AddEventHandler(this, method);
   }
  }

  #region Methods
  public void ClearChangedProperties()
  {
   this.ChangedProperties.Clear();
  }

  internal void RemoveUnchangedProperties(XElement element)
  {
   const string AtomNamespace = "http://www.w3.org/2005/Atom";
   const string DataServicesNamespace = "http://schemas.microsoft.com/ado/2007/08/dataservices";
   const string DataServicesMetadataNamespace = DataServicesNamespace + "/metadata";

   if (null == element)
   {
    throw new ArgumentNullException("element");
   }

   List<XElement> properties = (from c in element.Elements(XName.Get("content", AtomNamespace)
               ).Elements(XName.Get("properties", DataServicesMetadataNamespace)).Elements()
                                select c).ToList();

   foreach (XElement property in properties)
   {
    if (!this.ChangedProperties.Contains(property.Name.LocalName))
    {
     property.Remove();
    }
   }
  }


  private void OnEntityPropertyChanged(object sender, 

               System.ComponentModel.PropertyChangedEventArgs e)
  {
   if (!this.ChangedProperties.Contains(e.PropertyName))
   {
    this.ChangedProperties.Add(e.PropertyName);
   }
  }
  #endregion
 }
}

4. In the file you created replace the following placeholders with the correct references for your project:

image

5. Update the Reference.cs file

a. In Visual Studio 2010, click the icon with the tooltip Show All Files at the top of the Solution Explorer window.

b. In Solution Explorer, expand the service reference you created and the Reference.datasvcmap file to view the Reference.cs file.

c. Use Find/Replace to change:

: global::System.ComponentModel.INotifyPropertyChanged

to

: ODataEntity, global::System.ComponentModel.INotifyPropertyChanged

Note: There should be one instance for each entity.

6. Recompile your project, update your Silverlight Web resource with the new .xap file and test it.

SDK Update

In next release of the SDK (version 5.05) the SDK topic Use the REST Endpoint with Silverlight Web Resources will contain steps include this method. Each of the Silverlight samples that update records will also be updated to include these extensions.

Cheers,

Jim Daly, Michael Scott

Read the full article →

Power User Tip: End Series for Recurring Appointments

June 15, 2011

Microsoft Dynamics CRM 2011 introduces the capability to create recurring appointment in CRM and its bi-directional synchronization support with Outlook. In this blog I am going to discuss about one of the enhanced capabilities introduced by CRM which …

Read the full article →