CRM 2013 – Save & Close is back!

Posted by on March 20, 2014 in   |  Microsoft Dynamics CRM,   |  Microsoft Dynamics CRM 2013,   |  Microsoft Dynamics CRM Online  |  commentsComments (0)

Microsoft is currently rolling out UR 2 for CRM 2013 Online.  This update provides several fixes that are listed in the KB article here.  To check if your Online org is on UR 2 yet, click the ‘gear’ icon in the top right corner and then click ‘About’.  The version should start with 6.0.2 for UR 2.

 

image

 

One of the UR 2 enhancements that isn’t documented (that we know of) is the return of the Save & Close button.  When auto-save is enabled, the Save & Close button will exist only on the Create form for a record.  When auto-save is disabled, the Save & Close button will exist on both the Create and Update forms.

 

image

 

The Save & Close button was definitely missed but we’re glad to see it back!  Be on the lookout for your UR 2 update (and the Save & Close button) over the next few days.

Microsoft Announces new Enterprise License

Posted by on March 13, 2014 in   |  Microsoft Convergence,   |  Microsoft Dynamics CRM,   |  Microsoft Dynamics CRM 2013,   |  Microsoft Dynamics CRM Online  |  commentsComments (0)

A lot of great news came out of Microsoft’s Convergence last week in Atlanta.  If you weren’t able to attend, you can watch the sessions online using Microsoft’s Virtual Convergence.  Attendees can log onto the Convergence Website and navigate to Attendee Tools to to get access to PowerPoint decks and additional recordings.

The investments Microsoft is making in Social, Service and Marketing is exciting to see with Microsoft Social Listening, Unified Service Desk / Parature / service web enhancements, and Microsoft Dynamics Marketing.  We’ll be writing about these in the upcoming weeks.

However, Microsoft also recently announced their pricing and licensing for Dynamics CRM.  One of the big bits of news from this announcement is that Microsoft is announcing a new Enterprise License that is available for $200 per user per month.

With this new license, customers will receive:

  • Dynamics Marketing (previously Marketing Pilot)
  • Unified Service Desk and additional Case Management Enhancements
  • Limited Time Offer:  US and Canada customers purchasing 10+ Enterprise seats of Dynamics CRM will receive an equal number of Parature seats.

This information is subject to change and Microsoft stated that as general availability of this functionality approached, they’ll have more details on these offers.

Font Files as CRM Web Resources

Posted by on July 19, 2013 in   |  Microsoft Dynamics CRM,   |  Microsoft Dynamics CRM 2011,   |  Microsoft Dynamics CRM Online  |  commentsComments (1)

Font Awesome is a great set of free icons that utilize font files.  It is a nice addition to any page, including custom pages hosted in Microsoft CRM.  Unfortunately, CRM only supports a handful of web resource types and font files (such as .eot or .woff) are not on the list.  Luckily though, we have an easy workaround to spoof CRM into allowing us to upload font files as well as being able to successfully reference them from our custom page.

First, simply rename the font files to add ‘.css’ to the extension.

image

Next, upload the font file (with the .css extension) to CRM as a CSS file type but remove the ‘.css’ from the web resource name.

image

Once the web resource is saved and published, we can now reference the font file that is hosted in CRM.

<style type="text/css">
        @font-face {
              font-family:'FontAwesome';font-style:normal;font-weight:normal;
              src: url('../new_/fontawesome_webfont.eot');
        }
</style>


 
And there you have it.  We can now utilize any font files or the sleek Font Awesome icon library from within CRM!

Orion is Coming – Be Prepared

Posted by on June 18, 2013 in   |  Microsoft Dynamics CRM,   |  Microsoft Dynamics CRM 2011,   |  Microsoft Dynamics CRM Online  |  commentsComments (0)

Microsoft published a blog post last night about some new changes that the next major release of CRM is bringing.  An SDK article lists out several features that are being removed which can be found here.  In this post, I wanted to highlight three major changes as far as CRM development is concerned.

The first change is the removal of CRM 4.0 JavaScript Form Scripting support.  This change has been known about for awhile as the support no longer exists with UR 12 due to cross-browser capabilities.  Microsoft has provided a helpful tool to assist in identifying potential issues with JavaScript and HTML web resources.  The tool can be found here and for more information, check out this post we published in December

The second change I wanted to address is that Microsoft will be making major changes to the DOM due to the new enhanced UI.  Any JavaScript that modified the DOM will most likely break due to the new changes that are coming.  A popular scripting customization that could have issues would be modifying the color of fields or labels on the CRM form.  Another DOM manipulation I’ve seen a lot is turning a normal CRM text field into an option set for the sake of being able to make a custom multi-select option set.  These unsupported scripts would need to be upgraded or removed and tested thoroughly before upgrading to Orion.

The third major change is the removal of the 2007 endpoints as well as legacy features such as the ISV folder, 4.0 plug-ins and 4.0 workflow activities.  Luckily, Microsoft has provided a very useful tool to help identify any legacy features being used by your CRM environments.  The tool can be found here and it contains a “readme” file for instructions and more information. 

Note: Run the tool with the /? command-line argument to see the usage instructions.

image

I have used this tool personally and it is a huge time saver when trying to identify these legacy features.  In addition to the legacy tool, there are a great set of articles to help with upgrading your code - http://msdn.microsoft.com/en-us/library/gg334220.aspx.

The rest of the changes coming in Orion are as follows:

If you have any questions or are seeking help in upgrading your code, head to our Contact Us page and also let us know your thoughts about these changes in the comments section below!

We Heard You Like Apps: So Here's A Hot One For Windows 8

Posted by on October 24, 2012 in   |  Microsoft Dynamics CRM 2011,   |  Microsoft Dynamics CRM Online  |  commentsComments (6)

 

Every so often Microsoft releases a new installment of their venerable Windows operating system. Their newest is called Windows 8, and it is a radical departure from previous iterations. 

This is the first version of Windows that has been optimized for a touch experience and includes an app store. We know most business users are (and likely will remain) on Windows devices, so why not make them an app that improves productivity?

We did, and we call it EZ Opp.

It is without question the fastest and easiest way to view and update your sales opportunities in Microsoft Dynamics CRM. Simply touch the data and move it to change values. 

Best of all? It's FREE, and available now in the Windows 8 Store. Grab a copy and let us know how you like it!

 

EDIT: This app is US-only for now, but if there's sufficient international demand we may open it up a bit. 

Silverlight 5 Async Tasks with Microsoft Dynamics CRM 2011

Posted by on September 10, 2012 in   |  Microsoft Dynamics CRM 2011,   |  Microsoft Dynamics CRM Online  |  commentsComments (3)

Have you ever needed to execute several queries in CRM 2011 from Silverlight and perform some task when all the data is retrieved?  If so, you’ll know that this can be a major pain as well as create some ugly code due to asynchronous requests.

With Silverlight 5 you can use the System.Threading.Tasks namespace to simplify your code.  In the following code sample I will use two simple queries, one to retrieve all contacts and one to retrieve all accounts.  I will then utilize Tasks to execute the queries asynchronously and wait until they are both finished in order to perform more logic.  The following code sample uses the SilverlightUtility from the SDK to use the SOAP endpoint which can be found here.

        public void RetrieveData()
        {
            IOrganizationService orgService = SilverlightUtility.GetSoapService();

            QueryExpression accountQuery = new QueryExpression();
            accountQuery.EntityName = "account";
            accountQuery.ColumnSet = new ColumnSet() { AllColumns = true };            

            QueryExpression contactQuery = new QueryExpression();
            contactQuery.EntityName = "contact";
            contactQuery.ColumnSet = new ColumnSet() { AllColumns = true };

            var accountTask = CreateRetrieveMultipleTask(orgService, accountQuery);
            var contactTask = CreateRetrieveMultipleTask(orgService, contactQuery);

            Task.Factory.ContinueWhenAll(new Task[] { accountTask, contactTask },
                completedTasks =>
                {
                    EntityCollection accounts = accountTask.Result;
                    EntityCollection contacts = contactTask.Result;

                    // Perform task
                });
        }

        public Task<EntityCollection> CreateRetrieveMultipleTask(IOrganizationService orgService,                         
            QueryBase query)
        {
            return 
                Task.Factory.FromAsync<QueryBase, EntityCollection>(
                    orgService.BeginRetrieveMultiple,
                    orgService.EndRetrieveMultiple,
                    query,
                    null);
        }
 

If you are using Visual Studio 2012 then you can make asynchronous processing even cleaner with the Async Targeting Pack and the 'await' keyword.  More information can be found here.

JavaScript Bookmark Series – Part 1

Posted by on August 13, 2012 in   |  Microsoft Dynamics CRM 2011,   |  Microsoft Dynamics CRM Online  |  commentsComments (2)

Today we’ll be kicking off a series of posts about JavaScript bookmarks that can be useful to CRM developers and customizers.  These bookmarks are easy to setup and could help save some time.  To create these bookmarks, just browse to any CRM page and add it to your favorites (This will get you the lovely CRM logo).  Then, you can edit the bookmark and set the URL to the JavaScript mentioned in the post.

image

The first bookmark in the series will alert any fields that are dirty on a CRM form.  As a developer, you’ll know that sometimes forms become perpetually dirty due to some custom JavaScript that is manipulating a field value automatically.  This makes the pesky “Are you sure you want to leave this page?” alert show up when the user closes the form even if they didn’t change a value.

To easily debug this issue, make a bookmark setting the URL to the following:

javascript:var message="The following fields are dirty: \n";window.frames[0].Xrm.Page.data.entity.attributes.forEach(function(attribute,index){if(attribute.getIsDirty()==true){message+="\u2219 "+attribute.getName()+"\n";}});alert(message);

Now browse to the ‘dirty’ CRM form and click your new bookmark.  This should alert the names of all the fields that are dirty.

That concludes our first bookmark of the series!  Let us know in the comments if you have any suggestions for a useful bookmark.

For Every Deactivation There is an Equal and Opposite Reactivation

Posted by on June 2, 2011 in   |  Microsoft Dynamics CRM 2011,   |  Microsoft Dynamics CRM Online  |  commentsComments (4)

Adding Activate Buttons to Microsoft CRM Activity Ribbons

One common customization request we receive for Microsoft CRM is to allow users to reactivate completed activities.  Typically this is because a user wants to make a simple update to the record, like correcting a typo.

There are two common ways we can achieve this in Microsoft CRM:

  • Executing a manual workflow
  • Adding a custom button to the ribbon

A manual workflow is easy to set up, but because the workflow runs asynchronously, it isn’t the best user experience.  In this post, I’ll demonstrate the second method - adding a custom ribbon button to reactivate activities.

Part 1: Prepare a Solution

The first step is packaging the activities you are targeting into a custom solution.  To do this, open up Microsoft CRM and navigate to the Settings > Customizations > Solutions page.  Now, create a new solution.  You will be adding a JavaScript library to this solution, so you will want to set up a new publisher to represent your company if you do not already have one.  Specify an appropriate Display Name and Version
 New Solution Form

Click Save in the solution toolbar and then select the Entities node from the solution components tree on the left. Now click the Add Existing button in the toolbar above the grid, and select each custom activity that you want to add an Activate button to.
Solution Referencing Entities

Next we’ll add a JavaScript library. Select Web Resources in the solution component tree and then click New from the toolbar above the grid.  Enter Scripts/RibbonSample/activateRecord.js for the Name and activateRecord.js for the Display Name.  Select Script (JScript) from the Type picklist and then click the Text Editor button.

Paste in the following script:

 

if (typeof (Sonoma) == "undefined") { Sonoma = {}; }

 

 

Sonoma.activateRecord = function (id, logicalName) {

    var orgServiceUrl = Xrm.Page.context.getServerUrl() + "/XRMServices/2011/Organization.svc/web";

    var request =

        '<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">' +

            '<s:Body>' +

                '<Execute ' +

                '  xmlns="http://schemas.microsoft.com/xrm/2011/Contracts/Services" ' +

                '  xmlns:i="http://www.w3.org/2001/XMLSchema-instance">' +

                    '<request i:type="b:SetStateRequest" ' +

                    '  xmlns:a="http://schemas.microsoft.com/xrm/2011/Contracts" ' +

                    '  xmlns:b="http://schemas.microsoft.com/crm/2011/Contracts">' +

                        '<a:Parameters ' +

                        '  xmlns:c="http://schemas.datacontract.org/2004/' +

                            '07/System.Collections.Generic">' +

                            '<a:KeyValuePairOfstringanyType>' +

                                '<c:key>EntityMoniker</c:key>' +

                                '<c:value i:type="a:EntityReference">' +

                                    '<a:Id>' + id + '</a:Id>' +

                                    '<a:LogicalName>' +

                                        logicalName +

                                    '</a:LogicalName>' +

                                    '<a:Name i:nil="true" />' +

                                '</c:value>' +

                            '</a:KeyValuePairOfstringanyType>' +

                            '<a:KeyValuePairOfstringanyType>' +

                                '<c:key>State</c:key>' +

                                '<c:value i:type="a:OptionSetValue">' +

                                    '<a:Value>0</a:Value>' +

                                '</c:value>' +

                            '</a:KeyValuePairOfstringanyType>' +

                            '<a:KeyValuePairOfstringanyType>' +

                                '<c:key>Status</c:key>' +

                                '<c:value i:type="a:OptionSetValue">' +

                                    '<a:Value>-1</a:Value>' +

                                '</c:value>' +

                            '</a:KeyValuePairOfstringanyType>' +

                        '</a:Parameters>' +

                        '<a:RequestId i:nil="true" />' +

                        '<a:RequestName>SetState</a:RequestName>' +

                    '</request>' +

                '</Execute>' +

            '</s:Body>' +

        '</s:Envelope>';

 

    var req = new XMLHttpRequest();

    req.open("POST", orgServiceUrl, true);

    req.setRequestHeader("Accept", "application/xml, text/xml, */*");

    req.setRequestHeader("Content-Type", "text/xml; charset=utf-8");

    req.setRequestHeader("SOAPAction",

        "http://schemas.microsoft.com/xrm/2011/Contracts/Services/IOrganizationService/Execute");

    req.onreadystatechange = function () {

        if (req.readyState === 4) {

            location.reload(true);

        }

    };

    req.send(request);

};

 

This script defines a single method that takes in an entity id and type name.  It then makes a call to CRM’s Organization service to activate the record passed in via the parameters.  When the service call completes, it reloads the entity form.

Warning: The script is technically unsupported because it accesses the location.reload method on the HTML DOM.  However, since there is currenlty not a supported way to refresh the current form, this will be your best bet to provide a good user experience.

Click OK to close the text editor, then Save and Close to create the new web resource.

Export the solution by clicking the Export Solution button at the top of the solution window.  This will be an unmanaged solution and we don’t need to include any of the system settings, so leave all of the default options selected as you navigate through the wizard.  When prompted, save the solution zip file to a place you will be able to find it on your local computer.

 

Part 2: Modifying the Solution

Now comes the fun part, we need to open up the exported solution and modify the ribbon definition for each activity we included.  Start by extracting all files from the solution zip file into a new subfolder.  You should see three files and a WebResources folder extracted.

Open customizations.xml in your favorite XML or text editor.  You should see a section similar to the following in each of the entities you included in the solution:

<RibbonDiffXml> 

  <CustomActions /> 

  <Templates> 

    <RibbonTemplates Id="Mscrm.Templates"></RibbonTemplates>

  </Templates>

  <CommandDefinitions />

  <RuleDefinitions>

    <TabDisplayRules />

    <DisplayRules />

    <EnableRules />

  </RuleDefinitions>

  <LocLabels />

</RibbonDiffXml>

 

 

Replace the <CommandDefinitions /> element with the highlighted text below:

<RibbonDiffXml>

  <CustomActions />

  <Templates>

    <RibbonTemplates Id="Mscrm.Templates"></RibbonTemplates>

  </Templates>

  <CommandDefinitions>

    <CommandDefinition Id="Mscrm.Form.Activate">

      <EnableRules>

        <EnableRule Id="Mscrm.CanWritePrimary" />

      </EnableRules>

      <DisplayRules>

        <DisplayRule Id="Mscrm.CanWritePrimary" />

        <DisplayRule Id="Mscrm.PrimaryIsInactive" />

        <DisplayRule Id="Mscrm.PrimaryEntityHasStatecode" />

      </DisplayRules>

      <Actions>

        <JavaScriptFunction FunctionName="Sonoma.activateRecord"

          Library="$webresource:sonoma_Scripts/RibbonSample/activateRecord.js">

          <CrmParameter Value="FirstPrimaryItemId" />

          <CrmParameter Value="PrimaryEntityTypeName" />

        </JavaScriptFunction>

      </Actions>

    </CommandDefinition>

  </CommandDefinitions>

  <RuleDefinitions>

    <TabDisplayRules />

    <DisplayRules />

    <EnableRules />

  </RuleDefinitions>

  <LocLabels />

</RibbonDiffXml>

 

Note:  You will need to change the sonoma_ prefix (as highlighted above in green).  This prefix is defined in the publisher you associated with the solution.

Now you might be wondering why we didn’t need to define a button, icons, labels, tooltips, tab location, etc.  As it turns out, the activity forms all have this button defined on them natively.  They just have a DisplayRule in place to hide them.  With this Ribbon change, we’re simply redefining the CommandDefinition to call our custom script and leveraging the existing button definition.

Tip: If you ever need to see an entity’s native ribbon definition, you can check out the Export Ribbon Definitions topic in the CRM SDK.

Part 3: Putting Humpty Dumpty Back Together Again (or Reimporting the Solution)

Now to see these new buttons you’ll need just need to zip up the your exported files (or you can drag the only modified file – customizations.xml – back into your existing solution zip file) and import them back into CRM.  To perform the import, navigate back to Settings > Customizations > Solutions within CRM and click the Import button from the toolbar above the grid.  Browse to pick your new zip file, and then continue through the rest of the wizard.  After the import completes, you can click Publish All Customizations to apply your new change, or if you have other pending changes, you can manually navigate to the activity entities and publish them individually.

Success!

Now if you open a Closed activity you modified, you should see the Activate button in the ribbon:

Updated Ribbon

Microsoft Dynamics CRM 2011 Online Released to Web!

Posted by on January 17, 2011 in   |  Microsoft Dynamics CRM 2011,   |  Microsoft Dynamics CRM Online  |  commentsComments (1)

Microsoft announced the release of Microsoft Dynamics CRM 2011 Online today! I haven’t seen an official press release from Microsoft (yet), but I just signed up for a Microsoft Dynamics CRM Online trial and I received the 2011 edition of the software! So if you’ve been patiently waiting to use CRM 2011 in a production environment, wait no longer my friend. Roll up your sleeves, sign up for trial and get in there!

CRM2011

If you like track build numbers, you can see that this build is 5.0.9688.56.

CRM2011-Build

What’s New in Microsoft Dynamics CRM 2011 and Release Candidate Available (RC)

Posted by on January 5, 2011 in   |  Microsoft Dynamics CRM 2011,   |  Microsoft Dynamics CRM Online  |  commentsComments (1)

Ok so the holidays are finally over and you’re just now catching up on all those emails you received. If you were not paying careful attention right before Christmas, you might have missed a huge piece of news regarding Microsoft Dynamics CRM. Microsoft announced and posted the Microsoft Dynamics CRM 2011 Release Candidate!

The RC is the last time Microsoft will release the software for customers to test before the official CRM Online Release to Web (RTW) launch in January 2011, and the on-premises Release to Manufacturing (RTM). There are just WAY too many features to list everything that’s new in Microsoft Dynamics CRM 2011, but here are some of the key highlights from our perspective (with links to some of the YouTube videos we created back in September 2010 highlighting these features):

  • Improved Microsoft Office Interface Microsoft Office 2007 introduced a new ribbon interface in products like Excel and Word. Office 2010 expanded the ribbon into other office products like Outlook and OneNote. Microsoft Dynamics CRM 2011 also includes the contextual ribbon interface for improved ease-of-use and consistency with the other Microsoft Office applications.

  • Role-based Forms and Views Microsoft Dynamics CRM 2011 allows administrators to create multiple forms for each record type. By doing so, organizations can really streamline the user interface so that users only see the data that they need to access. For example, sales reps might see a form filled with sales data about a customer, while a customer service rep could view the same customer record but instead they would see a different form that displays only customer service data.

  • Inline Data Visualization You can now quickly and easily create charts that display inline next to records in a grid. For example you can view a list of opportunities and have a chart to the right that visualizes the data you’re viewing. Microsoft Dynamics CRM 2011 also includes web-based tools for users to create and edit their own charts.

  • Dashboards This feature allows users and administrators to setup dashboards with different types of data such as charts, grids, and possibly data from external systems. Dashboards can be customized and tailored to each group’s or individual’s needs, so that they can quickly and easily access the information they need.

  • Better Office Outlook Experience Microsoft Dynamics CRM for Outlook offers even deeper levels of integration with Outlook. Users can now use Outlook features like filtering and conditional formatting on CRM data, in addition to other new benefits like inserting CRM templates into Outlook emails.

  • Contextual Document Management With Microsoft Dynamics CRM 2011 and Microsoft Office Sharepoint Server 2010, you can setup and associate integrated document libraries with specific records. For example, you could open an account record in CRM and access a Sharepoint document library with that accounts contracts.

  • Field Level Security You can toggle security on custom fields and then configure security so that only certain users can view or edit data in that field. This field level security will apply to both forms and data views.

  • Goal Management Microsoft Dynamics CRM 2011 lets you setup goals that you want individuals or teams to achieve, and then track your performance against those goals.

  • Interactive Process Dialogs You can setup and configure interactive dialogs that work like screen wizards that guide users from page to page collecting information along the way.

  • Solution Management Microsoft Dynamics CRM 2011 offers a new way for system customizers to manage their customizations. In particular, solutions allow you to group and bundle customizations together in smaller packages so that they can be transported to different systems more easily. In addition you have the option to configure solutions so that other users can’t edit or modify your customizations.

  • Extensibility and Developer Features Microsoft Dynamics CRM includes a number of new programmer enhancements including a new programming model using Windows Communication Foundation (WCF), extended use of Windows Workflow Foundation 4.0, and support for .NET Language-Integrated Query (LINQ) for writing queries.

  • User Interface Enhancements Microsoft Dynamics CRM 2011 includes multiple user interface enhancements designed to reduce the number of clicks it takes users to accomplish tasks. Some of these enhancements include recently viewed items list, the ability to pin specific records, and inline filtering on data grids.

  • Global Customizations You can now create option sets of values that can be attached to multiple records. For example, you can create a single option set for a list of countries and leverage that option set on accounts, contacts and leads (versus managing three different country picklists in Microsoft Dynamics CRM 4.0). In addition, you can also create globally available JScripts which any entity can access.

  • Cloud Development Microsoft Dynamics CRM 2011 includes Azure extensions that help speed development of cloud based solutions.

  • Connections This new feature replaces the relationship functionality from Microsoft Dynamics CRM 4.0. Connections offer more flexibility because users can make their own connections between records, and connections can apply to many different types of entities.

  • Queues Microsoft Dynamics CRM 2011 offers better queue functionality because now you can use queues on different types of records beyond cases. In additions, queues are also improved because they offer better security options and can participate in workflow.

  • Microsoft Dynamics Marketplace The Marketplace is an online catalog of 3rd party solutions available for download and use with your Microsoft Dynamics CRM system. You can access the Marketplace directly within the Microsoft Dynamics CRM web interface.

  • Teams You can have teams own records in Microsoft Dynamics CRM 2011, whereas only users could own records in Microsoft Dynamics CRM 4.0. This opens new options for teamwork and collaboration within the Microsoft Dynamics CRM security model.

  • Auditing You can now enable auditing on a field by field basis where Microsoft Dynamics CRM will capture each time a user modifies a record. The audit feature also captures the date and time of the modification along with its old and new value.

  • Web Resources Microsoft Dynamics CRM 2011 allows you to store html files, JScript and Silverlight applications as web resources. System customizers can then use the web resources in form customizations, the Sitemap, or the application ribbon.

Stay tuned as we release more updates on what’s new in Microsoft Dynamics CRM 2011 in the coming months.


Contact Us for a Quote, or Personalized Demonstrationof Salesforce.com or Microsoft Dynamics CRM for Your Business.

Contact Us