Tuesday 29 October 2013

Dynamics CRM 2013 - Custom Activity Issue

UPDATE: As of right now (01/04/2014) we still have this issue with many of our clients. Microsoft has requested that we create a ticket to fix everyone individually which I think is a bit ridiculous! So currently this issue has NOT been fixed :-(

With the upgrade of CRM 2011 to CRM 2013 the navigation didn't really suit what we wanted so we looked at doing an immediate update to improve the user experience.

We found by creating custom areas we could split our entities into a more usable style and by replacing some of our JavaScript with business rules meant we could provide a better experience to users on mobile. Where we did have issues though was with custom activities.

The upgrade to CRM 2013 appears to have a few bugs where custom activities are concerned. When a custom activity is created a field called "leftvoicemail" which is a Two Option type.
In CRM 2011 it looks like this
Dynamics CRM 2011 - Custom Activity


In CRM 2013 it looks like this

Dynamics CRM 2013 - Custom Activity

As you can see the field changes from "Managed" to "Unmanaged". This causes an error when you do an import as the following error is created:
"A managed solution cannot overwrite the OptionSet component with Id=xxxx-xxx-xxx-xxx-xxxx which has an unmanaged base instance.  The most likely scenario for this error is that an unmanaged solution has installed a new unmanaged OptionSet component on the target system, and now a managed solution from the same publisher is trying to install that same OptionSet component as managed.  This will cause an invalid layering of solutions on the target system and is not allowed."

To make matters worse you cannot delete this field as you will receive the error "Only custom fields can be deleted."

The only work around I found for this was to manually remove this field from the customizations.xml file.
For each custom activity in your solution you will need to find the following:
<attribute PhysicalName="LeftVoiceMail">

Delete everything including the above line and down to the matching </attribute> tag.


Another issue we had was with a relationship called <<custom entity name>>_mailbox_sendermailboxid. This occurred for each of the custom entities as well and again we had to remove this from the customizations.xml file.

Everything from <EntityRelationship Name="ixa_feedback_mailbox_sendermailboxid"> to </EntityRelationship>.

We have lodged a ticket with Microsoft in the hope they find a resolution as we would prefer not to have to do this hack for every update!


Monday 14 October 2013

Dynamics CRM 2013 - Business Rules

In Dynamics CRM 2013 a new feature that has been added is the Business Rules engine. This has two clear strengths compared to using JavaScript.

  1. Allows for "Non Developers" to create them due to the simple to use interface.
  2. Business Rules unlike JavaScript work with mobile forms.
There are going to be cases where the business rules won't suit and JavaScript will be required however in most cases a rule that is similar to JavaScript should be possible for minor functions.

For example:
On Address forms we wanted to default the country. The code looked like this

// If its a create form

if (Xrm.Page.ui.getFormType() == 1)
{
    Xrm.Page.ui.controls.get("country").getAttribute().setValue("My Country");
}

Business Rules do not appear to allow you to state what the form mode is. Which does reduce some of the logic that can be used. Below is a screenshot of a Condition.

Business Rules - Condition
A few things to notice about the above form. Firstly you can define the scope for your business rules in case you only want it to work on certain forms. Secondly the structure of a Condition is quite similar to the Advanced Find criteria. This means that staff who have experience with Advanced Find's can now write business rules. 

For my example I want to set the country attribute. The JavaScript was essentially defaulting the value so to achieve this I will say. Where country does not contain data as shown below:

Business Rules - Country Condition

Then I can then select an action from the Action menu shown below:

Business Rules - Action Menu

In this case we want to set the country value to "My Country". Which uses the "Set field value" option.

Business Rules - Set field value
Once I have created my action I can enter my description of my rule and my rule name. Save and close the Business Rule and Activate it.

When you go to the form you will see that My Country will magically appear. If you blank the field then move to another field it will appear again.

Business Rules - Rule in action
Is the above solution perfect? No. If a client would like to leave the field blank then they won't be able to. Ideally we would be able to (as the JavaScript does) only do this on form load or only set it when a user has populated the address. NOTE: If Street 1 is mandatory as above I recommend adding a second condition to only populate when Street 1 contains data.

As of the current release its clear to see the benefits of the Business Rules and the limitations. However its a fantastic starting point long time users of CRM will agree!

A few things of note:
  • Conditions appear to currently be AND only. It is not possible to group or OR Conditions.
  • As stated above Business Rules are currently based only on a field. You cannot state "On Save", "On Create", "On Load" etc.
  • Something from my personal wish list is filtering an Option Set based on criteria. However this might be a fair way into the future!

Thursday 10 October 2013

Dynamics CRM 2013 - Mail Merge

While browsing through the features of Dynamics CRM 2013 one thing that we couldn't find was the Mail Merge functionality.

UPDATE:
The Mail Merge functionality is still there!! You can still Mail Merge from a Marketing List as mentioned below however if you want you can do it on the Advanced Find results pane as shown below.



If you read Scott Durow's blog here you will see how to retrieve the button.
http://www.develop1.net/public/post/How-to-restore-a-hidden-button-on-the-CRM-2013-Command-Bar.aspx

However I found it strange that this functionality would just disappear when it seems to be such a key component of a CRM system.

A colleague then showed me the button is still within CRM its just not on the account and contact entities like it used to be.

To create a mail merge you now need to make sure you have a marketing list. You then have the option of "Mail Merge on Marketing List". I would think that this is a good idea as it restricts the creation of Mail Merges however as we've just discovered this I haven't had a chance to think of the negatives that might exist.

Thursday 3 October 2013

Dynamics CRM 2013 - What you need to know

With the release of Dynamics CRM 2013 (Orion) brings a re-imagined experience for users. Whether or not this is a better experience remains to be seen however there is significant changes compared to CRM 2011. I'll try and briefly go through these changes.

New User Interface

As per the screen shots below there are significant differences between the two interfaces. Gone is the left hand side navigation and the ribbon has been replaced (more on that soon). Microsoft has also reduced the colour and replaced the icons with more basic designs.

Dynamics CRM 2011 - Dashboard

Dynamics CRM 2013 - Dashboard

Bye Bye Ribbon

The Microsoft ribbon and left hand navigation have been removed from Dynamics 2013 and replaced with a command bar. The command bar now handles all interaction with entities and settings. It's a conscious decision to reduce immediately available links in place of more real estate for the record/dashboard. Time will tell whether or not this is a good decision.
Dynamics CRM 2011 - Navigation


Dynamics CRM 2013 - Navigation

Form Changes

If your clients are used to CRM 2011 - Polaris then some of the changes they may be familiar with. The following are some of the changes for 2013.
  • Forms auto save
  • Bing Map integration
  • Social Window
  • Reduced Pop Ups

Dynamics CRM 2011 - Account Form

Dynamics CRM 2013 - Account Form

Form Auto Save

When using the new forms these forms will now auto save. There is no save button in the top left any more. Instead there is a little Save button in the bottom right. When a change is made a status will appear next to the save button stating there are "unsaved changes" then this will change to "saving" and then the status will disappear indicating the change has been made. Changes are also saved when a form is closed.

Bing Map Integration

No longer will developers need to build their own third party map integration.  Map integration is now provided out of the box.

Social Window

With Microsoft's purchase of Yammer (think Facebook for companies) it was only a matter of time before it was included in their products. It allows for the social integrations between team members to display within CRM. Activities such as Emails, and Phone calls also appear in this window.

As the window takes up ALOT of real estate it will be interesting going forward to see how much value this actually provides to clients.

Reduced Pop Ups

While there are some pop ups still within Dynamics CRM they have been greatly reduced. If required you can pop out a record into its own window however by default most open in the one window which for regular CRM users will be a big relief!


Tablet and Phone Integration

Dynamics CRM 2013 has been redesigned from the ground up to allow for it to render correctly on various desktop screen sizes as well as tablets such as iPad. The tablets all use the desktop version which is just re-rendered to suit the screen size.

The phone versions use a mobile client which is great for doing a quick look up of a client details. The editing functionality is a bit clunky so I still wouldn't use it too much for editing purposes.

It appears that Dynamics CRM 2013 has finally sorted out the issues of the past as it successfully works on iPads, iPhones, and Android!

iPad Screenshots








Android Screenshots



Process driven forms

Microsoft rolled out some process driven forms in Dynamics CRM 2011 Polaris however in CRM 2013 it is better designed and better implemented. In the past, forms with a lot of information would be difficult for clients to understand and it made it difficult for applications etc to be filled out in an orderly fashion.

With process driven forms you can change the information available to users and change the information that is required at each step of the way. This will hopefully reduce some of the javascript required in the past.

Dynamics CRM 2013 - Process Driven Lead



Business Rules

One of the best new parts of Dynamics CRM 2013 is the business rules engine, it replaces what in the past had to be accomplished by javascript. Business rules are presented in a simple to use english format which means that clients can do their own business rules if required. These rules also work in the mobile version where javascript does not.

Dynamics CRM 2013 - Business Rules Engine


There is alot more that is new or different in Dynamics CRM 2013. As I discover more I will update this post (or probably create a new one)

0x8004F016 - A managed solution cannot overwrite the LocalizedLabel component with Id=XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX which has an unmanaged base instance. The most likely scenario for this error is that an unmanaged solution has installed a new unmanaged LocalizedLabel component on the target system, and now a managed solution from the same publisher is trying to install that same LocalizedLabel component as managed. This will cause an invalid layering of solutions on the target system and is not allowed.

We had a client who had a very old version of our CRM customizations managed solution. When we attempted to update we received the following error.

ErrorCode:
0x8004F016

ErrorText:
A managed solution cannot overwrite the LocalizedLabel component with Id=XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX which has an unmanaged base instance.  The most likely scenario for this error is that an unmanaged solution has installed a new unmanaged LocalizedLabel component on the target system, and now a managed solution from the same publisher is trying to install that same LocalizedLabel component as managed.  This will cause an invalid layering of solutions on the target system and is not allowed.

Checking the internet the responses seemed to be based around deleting data from the SQL database. This is not recommended for two reasons. 1) Its not microsoft supported  2) It doesn't work for CRM Online.

The item that was failing was:
ItemType       
Name Localized Name
Form Incident Case
Investigating the forms related to Case I found that the name of forms had been changed i suspect by an unmanaged customization.  By changing the name back to the correct name I could then import my managed solution correctly.

Wednesday 2 October 2013

Dynamics CRM 2011 - Filter a lookup

Filtering a lookup in CRM 2011 is quite straight forward. Below is a sample that I used to filter one lookup based on the value of another.



function filterSecondLookup()
{
    try {
        var lookupObject = Xrm.Page.getAttribute("lookup_one").getValue();

        if (lookupObject != null)
        {

            lookup_one_name = $('').text(lookupObject[0].name).html();  // text of lookup
            lookup_one_id = lookupObject[0].id; // Guid of lookup

            var viewId = '{1ACB2B35-B07C-44D1-868D-258DEEAB88E2}'; //Random GUID
            var entityName = 'account';
            var viewDisplayName = 'Filtered Lookup Name';

            var fetchXml = "" +
                              "" +
                                "" +
                                "" +
                                "" +
                                "" +
                                "" +
                                "" +
                                "" +
                                  "" +
                                    "" +
                                  "" +
                                "" +
                              "" +
                            "";

            var layoutXml = "" +
                          "" +
                            "" +
                            "" +
                            "" +
                            "" +
                          "" +
                        "";

            Xrm.Page.getControl('lookup_two').addCustomView(viewId, entityName, viewDisplayName, fetchXml, layoutXml, true);
        }
        else
        {
            Xrm.Page.getControl("lookup_two").setDefaultView(window.defaultSiteViewId );
        }
    }
    catch (ex)
    {
        alert("Error in filterSecondLookup: " + ex);
    }
}