Quantcast
Channel: Dynamics 365 Customer Engagement in the Field
Viewing all 458 articles
Browse latest View live

Dynamics CRM Developers: Build Your Own Mobile Apps for Windows, iOS, and Android

$
0
0

Mobile first, cloud first

We all understand the importance of mobile and cloud strategy and that is why the Microsoft Dynamics CRM development team have released native mobile applications to accommodate all the major mobile platforms today – Windows Store, Windows Phone, Android, iOS, Office Outlook on Windows, and we have CRM Mobile Express for other platforms. However, it is also true that how each customer CRM usage varies depending on industry, work style, and other factors. Being a user of mobile apps ourselves, we know that many successful mobile apps enable specific tasks centered around the user and what they are looking to accomplish. 

For some organizations a successful app may be a simple approval app allowing a user to easily view, annotate, approve, or reject records and for others it could be a more integrated solution using location and other sensors to create and augment data in the field – or a company may want both experiences based on the role of the user.  While the existing Dynamics CRM mobile apps usually work very well for many general CRM purposes your company may need more – for that 3rd parties have CRM mobile applications meeting specific demands but what if you want need to build your own applications to meet specific requirements like the ones mentioned above?  If you’ve asked yourself this question or are curious as to how you can enable new ways to engage your Dynamics CRM users then please read on!  Below we’ll outline some challenges and decision points and we will also show you a new way to help developers build mobile apps for Dynamics CRM.

Development Methods

This is the most exciting time for developers as there are so many choices out there how to develop an application. C# or any .NET Framework languages with Visual Studio? Sure! (and that’s my favorite). HTML5/CSS for Windows Universal App? Of course. Xcode and Objective-C for iOS? or Java and Android Studio for Android OS? Why not! When you see cross platform development, you still have many choices like Xamarin, Cordova, etc – and new ones are coming out all the times it seems. 

Dynamics CRM: SOAP vs. REST endpoint

In addition to selecting programming languages, IDEs and platforms, there are several technology choices to build an application targeting Microsoft Dynamics CRM. A fully featured SOAP (or also referred to as web) endpoint or the lightweight and easy to develop REST endpoint. Most who have developed in Dynamics CRM understand the REST endpoint has some limitations in which only supports CRUD operations though we do have ways to enable Execute actions with some clever configuration and programming (we can cover that in a future blog post). While the REST endpoing covers most of the common operations, you still need Execute method for several operations like “Send” emails, “Book” appointments or “SetState records. Even “Assign” records to other users.

Direct service connection vs. host middleware service

When you build a mobile application, you can write a code to directly consume Microsoft Dynamics CRM Web services, or you can let middleware services to consume CRM web services and your mobile application consumes the middleware services. Microsoft Azure Mobile Service is one of the popular choice, as you can use C# to write business logic, then use Authentication or offline capability which Azure Mobile Service offers without writing your own code.

 

A Solution: Introducing Mobile Development Helper Code for Dynamics CRM

I hear developers won’t consume SOAP endpoint directly, because there was no library for such purpose and constructing and parsing SOAP request/response is not the most enjoyable task for developers. We have good news for developers, the Dynamics CRM SDK content publishing team released a library called “Mobile Development Helper Code for Dynamics CRM”, which you can directly use in your mobile solution to consume SOAP endpoint just like normal Dynamics CRM SDK. You can also use “CRM Service Utility for Mobile Development” for early bound development. Please refer to the library page for overview. 

 

How to use the library

What we will cover in this post:

The easiest way to try the library is to use it in existing SDK sample app, the sample already has a basic setup for obtaining an AccessToken. However, I will explain step by step here how to use the library for you. Following are prerequisites.

- Visual Studio 2013 installed on Windows 8.1+
- Microsoft Dynamics CRM Online instance. (You are able to use trial version)
- Windows Azure Subscription (You are able to use trial version)
- Download the library from here, and extract it.

Create a Visual Studio solution

1. Open Visual Studio 2013.
2. Click FILE | New | Project
image
3. Select Visual C# | Windows Apps | Blank App
*In this example, I use Windows Store app template, but you can use Windows Phone or Universal template if you need to.
4. Give any name. I name it “Sample CRM Mobile App”

Add ADAL NuGet Packages

The easiest way to obtain AccessToken for OAuth2 from Azure AD is to use ADAL (Azure AD Authentication Library). If you have preferred way to obtain AccessToken, you can use your own way – in fact we’d love to hear how you’re doing this today.

1. In Visual Studio, Right click the project folder in Solution Explorer pane, and click  the Manage NuGet Package menu item. 
2. In the manage package window, Select Online from left pane, and type ADAL in the search box and press Search.
3. Selected Active Directory Authentication Library from the results and click Install.
image
4. Complete the installation, then click Close.

Add the Mobile Helper Library

1. Right click the solution folder in the Solution Explorer pane, and click Add | Existing Project.
2. Browser to the mobile helper folder which can be downloaded and extracted from here: https://code.msdn.microsoft.com/Mobile-Development-Helper-3213e2e6.
3. Select Microsoft.Crm.Sdk.Mobile.csproj file, and click Open.
4. In the Solution Explorer pane, under your new project (not the mobile helper), right click References | Add Reference.
5. In the add reference dialog, select Solution | Project | and select Microsoft.Crm.Sdk.Mobile and click OK.
image

Add Json.NET NuGet Packages

Both your project and mobile helper project requires Json.NET.

1. Right click solution folder in the Solution Explorer pane, and click Manage NuGet Packages for Solution menu. 
2. Select Online from left pane, and type Json.net for search box and search.
3. Selected Json.NET from the result and click Install.
image
4. Complete the installation by check all projects.
5. Click Close when install completes.

Add code to acquire AccessToken from Azure AD

1. Open MainPage.xam.cs file.
2. Replace inside MainPage class with following code.

const string aadInstance = "https://login.windows.net/{0}";
const string tenant = "[Enter tenant name, e.g. contoso.onmicrosoft.com]";
const string clientId = "[Enter client ID as obtained from Azure Portal, e.g. 82692da5-a86f-44c9-9d53-2f88d52b478b]";

static string authority = String.Format(CultureInfo.InvariantCulture, aadInstance, tenant);
private AuthenticationContext authContext = null;
private Uri redirectURI = WebAuthenticationBroker.GetCurrentApplicationCallbackUri();
private string ResourceId = "[Your CRM Online Org Address. e.g. https://contoso.crm.dynamics.com]";

public MainPage()
{
    this.InitializeComponent();
    GetAccessToken();
}

private async void GetAccessToken()
{
    authContext = new AuthenticationContext(authority);
    // Use ADAL to get an access token.
    AuthenticationResult result = await authContext.AcquireTokenAsync(ResourceId, clientId, redirectURI);

    if (result.Status == AuthenticationStatus.Success)
    {
        var AccessToken = result.AccessToken;
    }
}

3. Update tenant and ResouceId to match to your environment.

Register your app to Azure AD

You need to register your application to Azure AD.

1. First of all, obtain RedirectUri value which you use to register your application, Run the existing application by setting breakpoint after getting redirectURI.
image
2. Note the redirectURI value and stop debugging.
3. Go to Microsoft Azure portal page. (http://manage.windowsazure.com)
4. Select Active Directory on the left pane.
image
5. Click APPLICATIONS menu on the top, then click ADD button in the bottom.
6. Select “Add an application my organization is developing.
7. Enter any name and select NATIVE CLIENT APPLICATION.
8. Enter RedirectUri you just obtained.
9. Once registration completed, click CONFIGURE menu.
10. Note a CLIENT ID, which you will update the code by it.
11. Navigate to bottom to setup impersonation.
12. Select “Dynamics CRM” from Select application dropdown, and select “Access CRM Online as organization users.”
13. Click Save button.
14. Go back to Visual Studio 2013, then update clientid const string.

Run the app to obtain AccessToken

1. Set breakpoint at line 51 where you obtain AccessToken from result. Run the app. You will see Sign In page soon.
2. Enter username and password by which you can connect to CRM Online.
3. You will see consent screen only if you register your app in Azure Ad for separate instance. In such case, please OK to accept it.
4. Breakpoint will be hit and you can confirm AccessToken is retrieved successfully.
image

Update the code

Finally use mobile helper library to issue SOAP request.

1. Add following as main class member.
private OrganizationDataWebServiceProxy proxy;
2. To resolve the above code, add following at using section.
using Microsoft.Xrm.Sdk.Samples;
3. Add following code at constructor to initialize proxy.
image
4. Assign proxy.AccessToken after obtaining an AccessToken, then call ExecuteWhoAmI method, which you implement next.
image
5. Add ExecuteWhoAmI method as below.
image
6. Add necessary using statement to resolve names.

Try it out

1. Set break point right after Execute method above.
2. Run the application.
3. When the application breaks into break point, confirm the returned value.
image

What’s Next?

I hope you get the idea how to use the library to consume SOAP endpoint. The next step is to use CrmSvcUtil.exe to generate file for Early Bound development. I will explain how to use the tool next time.

Ken
Premier Mission Critical/Premier Field Engineer 
Microsoft Japan


The Dangers of Guid.NewGuid();

$
0
0

Microsoft Dynamics CRM uses GUIDs as their primary key for the entity’s SQL table.  Using GUIDs as a primary key is usually not the best item due the random sequence of numbers and letters.  The Dynamics platform has an algorithm that generates GUIDs in sequential order.  This special GUID enables the SQL Server to index the entity table more efficiently, so that records can be retrieved more quickly.

The Microsoft Dynamics CRM SDK Best practices for developing with Microsoft Dynamics CRM, states, Allow the system to automatically assign the GUID (Id) for you instead of manually creating it yourself. This suggestion allows Microsoft Dynamics CRM to take advantage of sequential GUIDs, which provide better SQL performance. The following sample code shows how to call the Create method to obtain a system-assigned GUID.

I have seen a number of times where a customer has created a plugin or an application that needs to create records in CRM using the SDK and they populate the record’s ID with GUID generated using with System.Guid’s NewGuid method.  The System.Guid’s GUID does not generate a sequential GUID that conforms  to the CRM platform’s GUID pattern.

AccountIDs

As you can see, the AccountID in rows 15 through 23 are generated by the platform and 24 through 34 are generated using the NewGuid method.

If you have to create records programmatically you should always let the platform create the record an ID and if you need to use the ID later, create a variable ready to assign the ID to.

Guid newAccount;

using (OrganizationServiceProxy organizatonProxy =
     GetProxy<IOrganizationService, OrganizationServiceProxy>(orgServiceManagement, 
     GetCredentials(authtype)))
{
     Entity account = new Entity("account");
     account.Attributes.Add("name", name);

     newAccount = organizatonProxy.Create(account);
}

Now there might be times that you might need to generate your own CRM primary keys, such as a data import of related records.  David Browne authored a blog post, http://blogs.msdn.com/b/dbrowne/archive/2012/07/03/how-to-generate-sequential-guids-for-sql-server-in-net.aspx, that has sample code on generating sequential GUIDs.  Generating your own primary ID’s should be done in rare occasions.

Thanks,
Walter

Microsoft Premier Field Engineer

MSFT Logo

Podcast and Overview: Update Rollup 2 for Microsoft Dynamics CRM 2013 Service Pack 1

$
0
0

Contents:

We're proud to announce that all packages for Update Rollup 2 for Microsoft Dynamics CRM 2013 Service Pack 1 were released on Friday, February 6th 2015 to the Microsoft Download Center!  The Service Pack 1 Update Rollup 2 packages should appear on Microsoft Update in February, 2015.

Note: Update Rollup 2 for Service Pack 1 was released to the Microsoft Download Center briefly on Wednesday January 28th, but an issue was found that warranted recalling the version 1 packages.  If you downloaded the packages released on January 28th, please discard them and replace them with the re-release versions announced here.

Update Rollup 2 for Service Pack 1 Re-Release Build number:

 06.01.0002.0112

Update Rollup 2 for Service Pack 1 Microsoft Download Center page

Here's the "Master" Microsoft Dynamics Knowledge Base article for Update Rollup 2 for Service Pack 1: (KB 2963850). Going forward, the plan is for the Master Knowledge Base articles for CRM 2013 and CRM 2015 Rollups and Service Packs to be published a bit in advance of release to aid planning.

Podcast

On Monday, February 9th 2015 at 1:30 PM Pacific Time, Greg Nichols and Ryan Anderson from the Microsoft CRM Premier Field Engineering Team provided information about:

  • The release of Update Rollup 2 for Service Pack 1 for Microsoft Dynamics CRM 2013
  • New fixes made available In Update Rollup 2 for Service Pack 1 for Microsoft Dynamics CRM 2013

during their Microsoft Dynamics CRM 2013 Update Rollup 2 for Service Pack 1 Podcast

Note regarding Podcasts: We've recently changed the location of where we are hosting and distributing our podcasts.  See PFE Dynamics Podcast Update for more information.

Go to Top

The "CRM Update Rollup Collateral Page"

For pointers to download locations, release dates, build information, and CRM Premier Field Engineering blogs and podcasts for all Microsoft Dynamics CRM Update Rollups and Service Packs, visit the "CRM Update Rollup and Service Pack Collateral Page"

Go to Top

General Upgrade Rollup and Service Pack Notes:

  • Testing CRM 2013 Update Rollups: Best Practices
    • Microsoft Dynamics CRM Premier Field Engineering recommends doing all the standard testing you generally do for all Update Rollups, which could be the functional and performance testing that you would do with a new major release or a subset of that test plan
    • The “general rule of thumb” for test plans for Update Rollup installs are:
      • Test any changes in a pre-production environment BEFORE introducing into your production environment. Manage your risk!
      • Consider using the Performance Toolkit for Microsoft Dynamics CRM to simulate your production user load in your testing environment, to shake out any performance-related issues early. The Dynamics CRM Premier Field Engineering can help you with using the CRM Performance Toolkit with CRM 2013 or CRM 2015
      • Test using the permissions your most restrictive end-user roles have. Testing with CRM Administrator permissions, for example, does not give you the complete picture
      • Concentrate on your SDK customizations, JavaScript, ISV add-ons – basically anything that’s not OOB ("Out of Box") functionality or customizations done from within the UI

Go to Top

Update Rollup 2 for Service Pack 1 packages are available for download via: 

to update the Dynamics CRM Product installations listed in this Microsoft Knowledge base article:

Microsoft Dynamics CRM Installations, Updates and Documentation

Note: Microsoft Dynamics CRM 2013 Updates will be pushed via Microsoft Update as Important updates

  • Client packages installed manually by downloading the packages and running install will require local administrator privileges. If the client packages are installed via Microsoft Update or SCCM (System Center Configuration Manager), they will not require local administrator privileges
  • Consider using Windows Server Update Services (WSUS) or similar software distribution technologies to distribute Dynamics CRM Update Rollups internally.  WSUS is a locally managed system that works with the public Microsoft Update website to give system administrators more control. By using Windows Server Update Services, administrators can manage the distribution of Microsoft hotfixes and updates released through Automatic Updates to computers in a corporate environment
  • For help with installation please see the Installation Information section of the Service Pack 1 Update Rollup 2 "master" Microsoft Knowledge Base article
  • Please review my former teammate Jon Strand's blog posting "CRM 2011: Silently Installing Update Rollups" which provides details on installing CRM Outlook client update rollups "silently" in order to limit end-user interruption, which also applies to CRM 2013 and CRM 2015 Update Rollups and Service Packs

Go to Top

Microsoft Dynamics CRM 2013 Update Rollup 2 for Service Pack 1 Prerequisites:

  • Essentially the prerequisites listed in the Microsoft Dynamics CRM 2013 Implementation Guide download for the various CRM components serviced

Go to Top

Issues resolved via Microsoft Dynamics CRM 2013 Update Rollup 2 for Service Pack 1: 

Microsoft Dynamics CRM 2013 Update Rollup 2 for Service Pack 1 contains fixes for issues reported by customers or discovered via internal testing.

Fixes released via CRM 2013 Update Rollup 2 for Service Pack 1:

  • Charts that contain Option Sets ignore the order that is specified
  • The GetFirstDayOfFiscalPeriod function does not correctly categorize date times that are equal to the start of each fiscal period
  • When exporting a custom report with a single page of data, an additional blank page is included in the export
  • Incoming email to a queue with an unresolved sender, and a blank subject fails to promote
  • SRS Data Connector Install fails if SQL Reporting Service Account in Trusted Domain
  • Unable to use Quick Find to search KB Articles when they are added to a dashboard as a list
  • Offline Synchronization error dialog was changed in the Outlook client
  • After the email to case functionality is set up using the opt in features of Service Pack 1, email delivery will fail if the email was sent from an unknown sender to a queue
  • Accessing a child record from a parent can cause parent activities to load on the child record's activity wall
  • An Unexpected error occurs when the combination of Access Mode and License Type is incorrect on a User form
  • The Cancel button on the bulk edit page is unresponsive
  • Ellipses are removed when the command bar labels contain many characters, and the resolution of the screen is set to 1024 by 768 or less
  • Relationship name is now visible in navbar items for relationships when building subgrids
  • When importing or deleting a solution you may receive query timeouts due to blocking from queries on the MailboxBase table
  • Generic SQL error is encountered when Synchronizing to Outlook or Exchange
  • Records, or Views are unable to be opened if they contain an invalid Option Set, or pick list values
  • Incorrect translation for the Left Voicemail label in Norwegian
  • The Record URL (Dynamic) functionality used in a dialog, or workflow produces a URL that is missing the organization name
  • When a custom web resource is added to the ribbon, and includes a custom icon the icon is not displayed
  • Business Rules will not activate when you compare a decimal field value with 0
  • Updates the Outlook Synchronization dialog to indicate the CRM Client for Outlook will be temporarily disabled during synchronization after CRM 2013 Service Pack 1
  • Resolved Case setting in Case Creation rule is not processing as expected
  • The report wizard now adds a link to transaction currency if a money field is in the report. This uses on of the 10 QueryLinkEntityLimit entries, so reports that have 10 linked entities will now fail
    • When you add a new tab to the top of form, and the tab will be collapsed by default, any content that loads when the tab is expanded will not load
  • With the windows DST patch for Russia and UR 18 installed, fields with date value set between 7th August 2015 to 26 October 2015 have an incorrect time offset
  • Outlook view sort order was changed if user clicked different entity and back to the original entity
  • When you try to edit a multiple line text field using a mobile form in either a mobile web browser or the iOS and Android mobile apps, the multiple line text field does not show enough text to easily scroll or perform edits
  • Importing a solution that contains new Quick Forms the import fails with the following error:
    • "The requested record was not found or you do not have sufficient permissions to view it"
  • Chart legends were not respecting a user's primary language if the base language for the CRM 2013 organization was set to English
  • Marketing Campaign headers displayed incorrectly with the Russian Language Pack
  • Performing a Save and Close of an Appointment record on the Sales Calendar resulted in an error if the user clicked the Save and Close button twice
  • LINQ queries defined in a custom plugin step were not functioning correctly
  • Inserting an e-mail template using Internet Explorer results in the template being inserted at the top of the e-mail body, instead of at the designated cursor location
  • Xrm.Utility.openEntityForm call fails with error:
    • 'Unable to get property 'argumentNull' of undefined or null reference'
  • When phone call activities are quick created from the Social Pane, the Subject of the phone call is set to the Description value entered.
    • This caused an issue if the Description value contained a line break
  • Reports embedded in IFRAME elements experience display issues when using Internet Explorer 9
  • When a customer creates an email activity or tracks an email that contains HTML content, and that content includes STYLE elements to apply CSS to the HTML content of the email, the style information will be inherited by the rest of the form on which the email body content is displayed.
    • This can occur on the email activity forms, or when viewing the Activities tab on the Social Pane
  • When you attempt to open the business process flow editor form for a managed business process flow, a script error will occur:
    • Unable to get property '_clientdisabledcontrols' of undefined or null reference
  • Generic SQL error occurs when Synchronizing to Outlook or Exchange
  • Activity Feeds UI experiences display issues if using a Japanese Language Pack after CRM 2013 Service Pack 1
  • The reading pane of Phone Call records is not displayed after switching the displayed form to "Information" and then attempting to customize the reading pane
  • One-to-Many relationships that are created during the creation of Entity Entitlement and Entitlement Template do not get created for any custom activity entities
  • Enable Rules that utilize Xrm.Page.getAttribute for custom Command Bar ribbons do not display correctly in the CRM 2013 Client for Outlook
  • Activity Feed Walls and Grids generate a script error when browsing with Internet Explorer 11:
    • Unable to get property 'text' of undefined or null reference
  • Go Offline operations in the CRM 2013 Client for Outlook were not synchronizing down all related records as expected
  • A SQL deadlock can occur if updating an Opportunity Product record after CRM 2013 Service Pack 1
  • After installing the CRM 2013 Client for Outlook, many platform tracing messages occur reporting Insufficient Memory Exceptions
  • A managed solution created in CRM 2013 Update Rollup 2 could not be upgraded by a new managed solution if it contained custom Activity entities
    Daylight Saving Time changes for Russian Time Zones
  • Navigating to the second page of a sub grid will cause the total record count to disappear.
    • Navigating to the last page of the sub grid will cause the entire paging bar to disappear
  • A script error occurs when attempting to Save and Close a quote record:
    • "Unable to get property 'tryTransitionToAlwaysEditMode' of undefined or null reference"
  • Duplicate Tracking Tokens are generated in the CRM 2013 Client for Outlook
  • Corrected an issue with Rollups that caused statement recompilation in SQL
  • An issue causing labels for the base language of an organization to disappear could occur when creating a new organization or upgrading an organization to Update Rollup 1 for CRM 2013 Service Pack 1
  • Scroll bar does not appear on Edit Properties and View Properties dialog windows
  • Rendering issues with SharePoint integration when using managed metadata columns in SharePoint
  • "Insufficient Permissions" error when adding user to a team
  • Cannot Save or Delete Connections when Team Templates are removed
  • Datetime fields with a format setting of Date Only were still showing the time value when viewing the field in CRM for Tablets
  • A lookup field for Appointment time on a Task entity form is not populated when using a mobile CRM client
  • If you execute ApplyRoutingRuleRequest message in code it executes with no error but the rule is not applied
  • When you use the SDK for Dynamics CRM, and you must authenticate to CRM using Claims authentication, the SDK will fail to work correctly unless the STS which should be used offers an issuing endpoint that produces an Asymetric Token security token response
  • When the async service attempts to process an async plugin, the service crashes with an error indicating an item with the same key has already been added
    Attempting to export a merged form from CRM 2013 results in a solution import failure:
    • "The label '{0}', id: '{1}' already exists. Supply unique labelid values"
  • Importing a solution with dashboards containing a custom label for another language fails if the language is disabled in the destination organization
  • Cannot update section names between Source and Destination server via import of a managed solution
  • When security roles are changed on a Microsoft Dynamics CRM 2013 form, the changes are not immediately being displayed
  • SharePoint integration does not work if SharePoint display language is not set to English
  • Drilling down into a chart generates a conversion error if the chart has two category (x-axis) attributes.
    • One category attribute is a field from a related entity, while the other is a lookup field on the main entity
  • A custom relationship set to Do Not Display is still shown in the CRM 2013 Mobile Express UI
  • When adding data to the CRM Fields form in the Microsoft Dynamics CRM 2013 Client for Outlook, that data is not being persisted to the record if the user does not click away from the field to lose focus
  • You may experience an error when uploading reports to CRM if the report contains a dynamic parameter as part of the paging information, such as count or page number
  • When you attempt to view an entity view or switch to a different view for a currently shown entity type you may receive an error:
    • "We are downloading some data in the background. Please wait several minutes and try again. Error code: 0X9000000 - C"
  • E-mails do not get tracked into CRM for a custom e-mail enabled entity
  • Some error messages when working with Appointment activities appear in a different language than the one selected in CRM
  • Users will receive "An error occurred" message when paging to the next page of related records in the Microsoft Dynamics CRM 2013 mobile site
  • Estimated revenue field is still editable after closing opportunity, even though the form is marked as read only
  • In a scenario where a user is using the web client to reply to an html email, if multiple line breaks are inserted or inserted then removed, the possibility exists of losing the font information for certain lines, which will not be apparent to the user until after the email is sent
  • When users attempt to add unordered lists in the Microsoft Dynamics CRM 2013 Email Text Editor, the indenting and bullet points of the list are lost when the email is sent or saved
  • Party information is not populated if creating an activity from a subgrid
  • Error when saving an email with dynamic values in Workflow Designer using Google Chrome
  • When AutoSave is off in System Settings and a View is modified for an Entity in Customize this System an error is encountered:
    • "Your changes have not been saved. To save you changes click cancel to stay on the page"
    • This error occurs after changing the Edit Filter Criteria and selecting OK, then attempting to Add Columns
  • When attributes are added to the quick find views, the views may timeout or perform slowly if the quick find indexes are not created properly
  • Going offline with the CRM 2013 Client for Outlook fails with error message:
    • "Column names in each table must be unique. Column name 'LeftVoiceMail' in table 'ActivityPointerBase' is specified more than once"
  • When you publish a web resource that is used on an entity form, the updated version of the web resource is not shown on the form
  • Users recieve exception for "Parameter name: s" when using Server Side Synchronization
  • Formatting of the notes in the Print Preview does not match the format in which the note is entered, ignoring line feeds
  • Numbered list formatting is incorrect when replying to an email within CRM
  • When you type the AltGR+A key for the Polish character "ą" in the body of an email CRM will show you the dialog to insert a KB article
  • After CRM 2013 Service Pack 1, a user is unable to add items via a sub grid on a non-refreshed entity
  • After upgrading to Update Rollup 1 for CRM 2013 Service Pack 1, solutions containing custom actions cannot be imported
  • Uninstalling a managed solution fails if another solution was created to hold managed components in an attempt to allow other components to be deleted
  • On Quote, Order, and Invoice forms the Associated entity navigation bar options do not change between refreshed and non-refreshed forms
  • When enabling High Contrast settings in Personal Options, the red asteriks or blue plus for required and business recommend fields no longer appear
  • Navigation buttons randomly disappear when viewing various entity forms in CRM 2013
  • Clicking between navigation tiles and the command bar may generate a script error
  • When you add or remove a user to an access team and you are using EnableRetrieveMultipleOptimization of 2, the users accessibility to the record is delayed
    • They will be able to see records that they shouldn't if removed from an access team, or not see records that they should if they were added to an access team
  • When you attempt to filter a lookup using a relationship which is a 1:N relationship, the filtered lookup produces an error dialog when the lookup icon is clicked
  • When accessing a CRM 2013 organization from an iPad device using Safari, form scrolling will be choppy at points if the forms contain a custom web resource in an IFRAME element
    • In addition, the IFRAME may appear to render incorrectly, missing the right and/or bottom borders
  • When you view the documents area on a record, and then deactivate or activate a record from within the record you will receive a script error:
    • Unable to get property 'primaryEntityId' of undefined or null reference
  • After a user opens an Appointment record from the Service Calendar, if they click the back button the browser an error indicating the Record Is Unavailable will occur
  • Attempting to set a notification using Xrm.Page.ui.setFormNotification will not work for Quick Create forms in CRM 2013
  • After setting the OrgDbOrgSetting 'SkipGettingRecordCountForPaging' to True, you will no longer be able to see the number of records selected
  • A solution created for backwards compatibility cannot be imported to a pre-CRM 2013 Service Pack 1 organization if the solution contains a workflow that triggers a child workflow
  • When adding a write-in product on the Quote entity, the Quote Product window may have an incorrect radio button selected and the Quote may not recalculate field values for calculated fields
  • When using Server Side sync and setting the option to track all email within personal options, received emails do not change the Track button, this causes the View in CRM buttons to not get enabled within the command bar
  • After applying the latest Product Update for Service Pack 1, it is no longer possible to Add New records to related sub-grids if the user accessing the record does not have write permissions to the parental entity
  • When merging records in the CRM web application UI, and the data to be merged included lots of fields to be moved from subordinate to the master, or if a few fields are merged and they contain large amounts of text, you are unable to merge the records
  • In CRM 2013, if you create more than one Quick Create form for an entity and adjust the form order to what you would like to be the default Quick Create form, the order will not be respected
  • If the CRM 2013 Service Pack 1 Japanese MUI update is applied to an Outlook Client where the base language is Japanese, the labels in the CRM subsection of the ribbon are displayed in English
  • The Display Rules for command bar buttons are not reevaluated after a Case record has been reassigned
  • When you troubleshoot the CRM Unzip Service and you view the trace logs, it mentions SharePoint Async service when it should mention CRM Unzip Service
  • Attempting to open an Order Product, Invoice Product, or Quote Product record when working offline in the CRM 2013 Service Pack 1 Client for Outlook a generic error may occur
  • After upgrading a CRM 2011 database to CRM 2013 Service Pack 1, some hidden system entities become visible in the Customize the System area of CRM 2013

Go to Top

Support for identical new technologies provided by CRM 2013 Update Rollup 2 and Service Pack 1:

The Microsoft Dynamics CRM Engineering team consistently tests Microsoft Dynamics CRM 2013 against pre-release and release versions of technology stack components that Microsoft Dynamics interoperates with. When appropriate, Microsoft releases enhancements via future Microsoft Dynamics CRM 2013 Update Rollups, Service Packs, or new major version releases to assure compatibility with future releases of these products. This compatibility matrix is updated via this Microsoft Knowledge Base article: Microsoft Dynamics CRM Compatibility List. Microsoft Dynamics CRM 2013 Update Rollup 2 and Service Pack 1 provide support for:

Go to Top

Hotfixes and updates that you have to enable or configure manually

Occasionally, updates released via Update Rollups require manual configuration to enable them. Microsoft Dynamics CRM Update Rollups are always cumulative; for example, Update Rollup 2 will contain all fixes previously released via Update Rollup 1 as well as fixes newly released via Update Rollup 2. So if you install Update Rollup 2 on a machine upon which you previously installed no Update Rollups, you will need to manually enable any desired fixes for Update Rollups 1-2:

  • Update Rollup 1: no updates requiring manual configuration
  • Update Rollup 2: no updates requiring manual configuration
  • Service Pack 1: no updates requiring manual configuration, but some new features need to be enabled by a CRM Server Administrator
    • Go to Settings > Administration and then click Install Product Updates
  • Service Pack 1 Update Rollup 1: no updates requiring manual configuration
  • Service Pack 1 Update Rollup 2: no updates requiring manual configuration

Go to Top

Microsoft Dynamics CRM compatibility with technology stack components: Internet Explorer, Windows Client and Server, Office, .NET Framework, and more

The Microsoft Dynamics CRM Engineering team consistently tests Microsoft Dynamics CRM 2013 against pre-release and release versions of technology stack components that Microsoft Dynamics interoperates with. When appropriate, Microsoft will release enhancements via future Microsoft Dynamics CRM 2013 Update Rollups, Service Packs, or new major version releases to assure compatibility with future releases of these products. This compatibility matrix is updated via this Microsoft Knowledge Base article: Microsoft Dynamics CRM Compatibility List.

Greg Nichols
Senior Premier Field Engineer, Dynamics CRM
Microsoft Corporation

CRM2013SP1UR2.mp3

Dynamics CRM Developers: Build Your Own Mobile Apps for Windows, iOS, and Android Part 2

$
0
0

Last time, I introduced how to start developing Mobile application for Microsoft Dynamics CRM by using CRM Mobile helper library. This time, I will introduce additional information which makes your work easier.

Previous post: Dynamics CRM Developers: Build Your Own Mobile Apps for Windows, iOS, and Android

Generate early-bound code

IntelliSense is one of the most required feature for many developers. By default Visual Studio does not provide any IntelliSense to Dynamics CRM Entities, and you need to generate classes which defines CRM Entities by yourself. Microsoft Dynamics SDK team released CrmSvcUtil.exe as part of CRM SDK, which generates such file for you. As CrmSvcUtil.exe generates code which depends on Microsoft.Xrm.Sdk.dll by default, you need extension to modify the output to use CRM Mobile helper library instead.

Follow the steps below to generate early-bound file for Mobile Application.

1. Download CRM Service Utility for Mobile Development and extract downloaded zip.
2. Open CrmSvcMobileUtil.sln file via Visual Studio from extracted folder.
3. If you will use Microsoft Dynamics CRM 2015 SDKs, change target .NET Framework to 4.5.2.
    a. Right click CrmSvcMobileUtil project and click Properties.
    b. Select .NET Framework 4.5.2 at Target framework dropdown.
    image
    * If you do not see .NET Framework 4.5.2, then click “install other frameworks…” and install the framework.
    c. Click “Yes” at Target Framework Change dialog.
4. Right click Reference and click “Add Reference”.
image
5. Click “Browse” button on the bottom.
6. Add CrmSvcUtil.exe and Microsoft.Xrm.Sdk.dll from SDK.
image
7. Open FilteringService.cs file.
8. Update List<string> variable in GenearteEntity method. You need to specify Entity by using logical name.
image
9. After finish updating the list, compile the solution.
10. Open Command Prompt and change directory to CRM Service Utility for Mobile Development\C#\bin\Debug folder where compiled assembly is located.
11. Run CrmSvcUtil.exe with arguments like below.
>CrmSvcUtil.exe /codecustomization:"Microsoft.Crm.Sdk.Samples.CodeCustomizationService,CrmSvcMobileUtil" /codewriterfilter:"Microsoft.Crm.Sdk.Samples.FilteringService,CrmSvcMobileUtil" /url:ttps://<your_organization>.api.crm.dynamics.com/XRMServices/2011/Organization.svc /username: <username> /password: <password> /out: <output_filename> /namespace: <namespace>
12. Add generated file to your Mobile Application project.

How to write code with IntelliSense

Now, you are ready to write code with IntelliSense. Use the following code snippet to write your code. To use early-bound, you have to call EnableProxyTypes method for OrganizationDataWebServiceProxy.

Retrieve a record

When you retrieve a record by using Retrieve method, you need to explicitly case result to early bound. The code below retrieves an account record, and case to Account type. You can also use EntityLogicalName property of each CRM Entity classes for it’s logical name. (As Logical Name may be different from Display Name like case and incident, it is safe to use EntityLogicalName property whenever possible).

ColumnSet cols = new ColumnSet("name", "telephone1");
Account account = (Account)await _proxy.Retrieve(Account.EntityLogicalName, new Guid("<record id>."), cols);

After you cast the result, you can use IntelliSense.

image

Retrieve multiple records

When you retrieve multiple record by using RetrieveMultiple, you can Case results one by one by using for or foreach statement or accessing element by specifying indexer for Array or use Linq query, etc.

ColumnSet cols = new ColumnSet("name", "telephone1");
var results = await CrmHelper._proxy.RetrieveMultiple(new QueryExpression(Account.EntityLogicalName, cols));

foreach(Account account in results.Entities)
{
}

Once you obtain a result from collection, then you can use IntelliSense like below.

image

Create an object

You can create strong-type object by using IntelliSense by using following code.

Account account = new Account()
{
    Name = "New Account",
    ParentAccountId =
        new EntityReference(Account.EntityLogicalName, new Guid("<id>")),
    NumberOfEmployees = 10
};

As each property has Type, if you try to assign different type, you see error message like below.

image

Another way to cast Entity

You can also use ToEntity<T>() method of Entity class.

ColumnSet cols = new ColumnSet("name", "telephone1");
Entity result = await _proxy.Retrieve(Account.EntityLogicalName, new Guid("<record id>."), cols);
Account account = result.ToEntity<Account>();

What’s Next?

We have published sample application as open source, which utilize this technic. Please download the sample application and see how it uses early-bound programming model.

CRM to Go – Sample app for Dynamics CRM

This sample application does not utilize MVVM model, so that it’s easy to debug and follow the code in code behind of UI. If you prefer MVVM model sample, please refer to samples below. (These samples use CRM Mobile Helper, but do not use early-bound programming model)

Activity Tracker Sample app for Dynamics CRM
Activity Tracker Plus Sample app for Dynamics CRM

Ken
Premier Mission Critical/Premier Field Engineer 
Microsoft Japan

CRM 2015 Upgrade: A Few Things You Can Prepare Ahead of Time

$
0
0

CRM 2015, which had been referred to as Vega or v7, offers some exciting new features and enhancements. Some customers, especially on premise customers, are interested to know what they can prepare ahead of time to make their upgrade process faster, more efficient, and improve user experience. This blog post covers a few items that can be prepared ahead of time prior to CRM 2015 upgrade. There are obvious benefits of doing this: less tasks to perform during the upgrade and less time required to upgrade. And don’t forget, users appreciate shorter maintenance window as well.

.NET 4.5 Installation
CRM 2015 Requires Microsoft .NET Framework 4.5. If you don’t already have .NET 4.5 installed, CRM 2015 installer will attempt to install .NET 4.5 as part of prerequisites. Reboot is required with .NET 4.5 installation. To speed up your upgrade process, you can take care of this requirement ahead of time: install .NET 4.5 and reboot your server. Then you are good to go.

Table Merge
Microsoft Dynamics CRM 2011 and earlier versions maintained two database tables for each entity. A base table contains out-of-the-box fields and an extension table contains custom fields. In CRM 2013, base table and extension table are merged into one table to reduce SQL deadlocks and performance related issues. CRM 2013 allowed customers to defer table merging to avoid upgrade performance and timing problems, it could also be done for customers who had to accommodate unsupportable reads against CRM’s base tables, giving them time to upgrade and eradicate unsupported SQL access.  Deferring the merge was optional and had to be pre-configured – if you have already upgraded to 2013 and did not configure a registry value to defer table merge the CRM 2013 upgrade has already merged your tables for you, automatically.

To check table merged or not, customer can run this query against the organization database to find out the entities that haven’t been merged.

SELECT e.Name, e.ExtensionTableName
FROM EntityView e
where e.IsActivity = 0
and e.ExtensionTableName is not null 
and e.IsIntersect = 0 
and e.IsLogicalEntity = 0
order by e.Name

 

If you have deferred your table merge, the CRM 2015 upgrade process will merge base table and extension tables automatically. The CRM 2013 Merge tool has been removed and registry key to prevent table merging is no longer valid in CRM 2015. Customers who have not performed tables merge in CRM 2013, can consider to perform table merge prior to upgrade to CRM 2015.  If you have deferred, merging your tables will help reduce upgrade time during the CRM 2015 upgrade.

Forms Design
CRM 2013 introduced a new form model. The 2013 form comes with several new features. After CRM 2013 upgrade, 2011 information forms are moved over along with 2013 forms. While CRM 2015 upgrade will carry over both set of forms, it is recommended to migrate to 2013 forms. New features and functionality are only available to 2013 forms. You can migrate your forms either prior to CRM 2015 upgrade or migrate them over time. If forms are migrated prior to upgrade, users can immediately take advantage of new features and functionalities for the new forms.

For more information about form upgrade, Brandon Kelly has published a great article--CRM 2013 Form Upgrade experience.

Supported Configurations
To upgrade to CRM 2015, you can upgrade only from CRM 2013 SP1 or higher versions. If your CRM environment is not running on CRM 2013 SP1 or higher versions, it is necessary to perform upgrade first.

The table below show supported configurations for servers and clients. Make sure your environment is running on supported configuration, we also have a blog article highlighting the supported configuration details for CRM 2015 here: http://blogs.msdn.com/b/crminthefield/archive/2014/05/19/important-information-about-supported-configurations-in-the-next-version-of-crm.aspx

Table 1. Supported configurations

Supported Servers

Supported Clients

Windows Server 2012 & Windows Server 2012 R2

Microsoft SQL Server 2012

Exchange 2010 and Exchange 2013

SharePoint 2010 and SharePoint 2013

IE 10 and IE 11

Chrome, Safari(Mac) and Firefox

Office 2010 and Office 2013

Windows 7, Windows 8.0 & Windows 8.1

Table 2. Configuration no longer supported

Servers no longer supported

Clients no longer supported

Windows Server 2008 and Windows Server 2008 R2

Small Business Server all version

Microsoft SQL Server 2008 and Microsoft SQL Server 2008 R2

Exchange 2007

SharePoint 2007

IE 8 and IE 9

Office 2007

Windows Vista

 For most up-to-date information, please reference Compatibility with Microsoft Dynamics CRM 2015.

 

Questions?

Do you have additional questions with Dynamics CRM 2015 upgrade readiness? Post a comment below, or contact us directly. We would love to hear from you!

Memory management for Dynamics CRM in a virtual environment

$
0
0

We have been engaged with a customer to do a performance review, and they had no apparent issues of performance.  We set up performance counters on all machines and they were all within threshold. However the backend role machine showed interesting behavior. It had “Available memory” within threshold while “pages/ sec” far above threshold, other hardware metrics were also within threshold.

Available MBytes is the amount of physical memory, in Megabytes, immediately available for allocation to a process or for system use.

Pages/sec is the rate at which pages are read from or written to disk to resolve hard page faults. This counter is a primary indicator of the kinds of faults that cause system-wide delays

Investigating further it turned out this machine is handling a pretty good load of plugins, MSCRMAsync services and it is virtualized (VMware) as well.

Virtualization is supported as stated in Software requirements for Microsoft Dynamics CRM Server 2013

Checking the settings of the virtual machine it turned out it doesn’t have “resource reservation” at all, which is contrary to Microsoft recommendations.  Microsoft recommends using fully reserved memory to avoid all ballooning, swamping and “Double paging” problems (described in VMware white paper).

If the virtual machine memory size is too small, guest-level Paging is inevitable:

Ref: http://www.vmware.com/files/pdf/perf-vsphere-memory_management.pdf

Hardware virtualization technologies can provide significant advantages over traditional hardware-based implementations. However, software that is running in a virtualized hardware environment is affected by intrinsic
limitations, especially performance limitations.

Ref : http://support.microsoft.com/kb/957054/en-us

Having these settings in place stabilized the system and added to the general performance and stability of the system. So our advice here if your Dynamics CRM server machines are virtualized make sure you familiarize yourself with the best practices of the virtualization provider, and you understand their best practice for memory management. And of course “performance and scalability considerations” from kb 957054

By: Julien Clauzel, Fadi EL-Hennawy

PFE Dynamics @ Convergence 2015

$
0
0

For those attending Convergence 2015 in Atlanta, GA next week, I wanted to let you know that we will have members of the PFE Dynamics team there presenting some great content.  In addition, make sure to follow @PFEDynamics on Twitter to get updates on other PFE Dynamics activities at Convergence.  Below is a list of the sessions we will be presenting during the conference.  It would be great to meet you at our sessions, so please stop by and check them out! You can also find us at the Expo throughout the week in the Premier Support booth.  You can get more info on these sessions and others via the Convergence Session Catalog.

Can’t make it to Microsoft Convergence 2015 in person? Be sure to mark your calendar to watch the opening keynote with Microsoft CEO Satya Nadella and Executive Vice President, Microsoft Business Solutions, Kirill Tatarinov LIVE on Monday, March 16, 8:30-10:30am EDT on the Convergence website. You’ll also be able to watch the Convergence General Sessions live as well (check the Session Catalog for times and listings).  If you’re not able to catch the action live, nearly all sessions at the event (including keynotes, general sessions, concurrent and deep dive sessions) will be made available for on-demand viewing at our Convergence Video Library 24-hours after session conclusion. Don’t miss out on experiencing all the amazing content delivered at Convergence 2015!   

PFE Sessions @ Convergence 2015 – Be sure to follow @PFEDynamics on Twitter and we’ll tweet our session times & rooms as they come up. 

Note: We have changed the room size for our Customizations Tips and Tricks, Upgrade Discussion and Optimization Tips and Tricks sessions on the repeat sessions to ensure that we can fit everyone who wants to attend.  In years past we have had to turn people away because of capacity limitations, so this year we are going to try a larger room for the repeat sessions and give up some of the crowd back and forth interaction and rely more on microphones in a larger ballroom to ensure that everyone has a seat.

Click on the hyper linked names to see a real-time listing of sessions in the session catalog.  This will include scheduled repeats and room changes.

Session Date Time Presenters
ID15C350-R1 - Microsoft Dynamics CRM 2015: Upgrade discussion Mon 3/16 3:30-4:30 Shawn Dieken, Sean McNellis, Daren Turner
ID15C352-R1 - Microsoft Dynamics CRM: Optimization tips and tricks Mon 3/16 5:00-6:00 Shawn Dieken, Sean McNellis, Daren Turner
ID15X002-R1 - SQL Server performance rapid-fire Tues 3/17 9:00-10:00 Michael Posl, Rod Hansen, Chip Taylor
ID15C351-R1 - Microsoft Dynamics CRM- Customization tips and tricks Tues 3/17 2:00-3:00 Shawn Dieken, Sean McNellis, Daren Turner
DD15X101-R1 - Securing performance with Performance Analyzer for Microsoft Dynamics Tues 3/17 3:30-5:00 Rod Hansen, Pepe Sifuentes
DD15X101-R2 - Securing performance with Performance Analyzer for Microsoft Dynamics Wed 3/18 9:00-10:30 Rod Hansen, Pepe Sifuentes
ID15X002-R2 - SQL Server performance rapid-fire Wed 3/18 11:00-12:00 Michael Posl, Rod Hansen, Chip Taylor
ID15C352-R2 - Microsoft Dynamics CRM: Optimization tips and tricks Wed 3/18 11:00-12:00 Shawn Dieken, Sean McNellis, Daren Turner
ID15C350-R2 - Microsoft Dynamics CRM 2015: Upgrade discussion Wed 3/18 2:00-3:00 Shawn Dieken, Sean McNellis, Daren Turner
CS15X009 - Microsoft SQL Server AlwaysOn for your business Thurs 3/19 11:30-12:30 Rod Hansen, Chris Nowak
ID15C351-R2 - Microsoft Dynamics CRM: Customization tips and tricks Thurs 3/19 2:00-3:00 Shawn Dieken, Sean McNellis, Daren Turner

You may also find updates on our sessions through the following Twitter feeds:


I know that personally Convergence is my favorite onsite of the year as I get a chance to network and reconnect with so many great customers and partners.  I really enjoy hearing all of the success stories about how you are leveraging Dynamics products to accelerate and grow your business success!  I also enjoy hearing about any challenges you are having with your deployment and how we can help make it successful.

Thanks for reading and I hope to see you at Convergence 2015!

Shawn Dieken

Follow the conversation:
@sdieken
@pfedynamics | http://www.pfedynamics.com

Convergence 2015 Interactive Discussion Topics: CRM 2015 Upgrade discussion

$
0
0

Here are the 15 tips in 15 minutes that we shared as part of our Microsoft Dynamics CRM Upgrade Discussion interactive discussion (ID15C350-R1 & ID15C350-R2) at Convergence 2015. 

We wanted to share them in a blog article to those who attended (to reduce the need for notes), for those who could not attend, and help reduce our own need for more PowerPoint slides. For those in attendance, feel free to ask any questions during the last 45 minutes of our session, or come find is in the hallways at Convergence. For those of you who couldn’t attend please feel free to leave a comment.

  1. CRM Online
  • CRM Version Recap
    • Name Build # CodeName
      CRM 2011 5.0.9688.583 Titan
      CRM 2011 UR 12 5.0.9690.3236 Polaris
      CRM 2013 6.0 Orion
      CRM 2013 SP1 6.1 Leo
      CRM 2015 7.0 Vega
      CRM 2015 Update 1 7.1 Carina
  • Outlook Client Upgrade
  • Email Options
  • Entity Form Upgrade
  • Custom indexes 2013 & 2015
    • If you have not merged tables – only base table indexes will be preserved
    • If you have already merged tables and you have custom indexes, they are cataloged, then recreated upon your upgrade to CRM 2015
  • Merge Tables Prior to Upgrade
  • Legacy Feature Check
  • Real-Time/Synchronous Workflows (v6.0+)
  • Business Rules (v6.0+)
  • Server-Side Business Rules (v7.0+)
  • Migration Options 2011 –> 2013 –>2015
  • Evaluation Out of the box Features & Code Retirement
  • CRM Solutions Import/Export
    • CRM 2011 Imports to CRM 2013 and CRM 2013 SP1
    • CRM 2013 SP1 Exports to 2013 RTM Format
    • CRM 2013 & 2013 SP1 Imports into 2013 SP1 & 2015
  • Sandbox and Test Instances
  • Enjoy!

    Shawn Dieken, Sean McNellis and Daren Turner

    Follow the conversation:
    @sdieken
    @seanmcne
    @pfedynamics | http://www.pfedynamics.com


    Convergence 2015 Interactive Discussion Topics: Customization Tips and Tricks

    $
    0
    0

    Here are the 15 tips in 15 minutes that we shared as part of our Microsoft Dynamics CRM Customizations Tips and Tricks interactive discussion (ID15C351-R1 & ID15C351-R2) at Convergence 2015.

    We wanted to share them in a blog article to those who attended (to reduce the need for notes), for those who could not attend, and help reduce our own need for more PowerPoint slides. For those in attendance, feel free to ask any questions during the last 45 minutes of our session, or come find is in the hallways at Convergence. For those of you who couldn’t attend please feel free to leave a comment.

    1. Latest Update Rollup
    2. CRM Version Recap
        Name Build # CodeName
        CRM 2011 5.0.9688.583 Titan
        CRM 2011 UR 12 5.0.9690.3236 Polaris
        CRM 2013 6.0 Orion
        CRM 2013 SP1 6.1 Leo
        CRM 2015 7.0 Vega
        CRM 2015 Update 1 7.1 Carina
    3. Modal Dialogs deprecation
    4. CRM Performance Center
    5. Customizing the Form
      • Drag and drop navigation
      • Add same field to multiple sessions
      • Quick View Forms
      • Business Rules
        • Server side in CRM 2015
      • Edit Navigation, Header and Footer
      • Role Based Forms
    6. Form Merge after Upgrade
    7. CRM for Tablets – JavaScript
    8. CRM for Tablets – All Dashboards are available and customizable now
      • CRM 2015 – All dashboards including personal
      • CRM 2013 SP1 – Sales and Service Dashboards
      • CRM 2013 – Sales Dashboard
    9. PowerBI
    10. Calculated Fields & Rollup Fields
      • You can rollup Rollup Fields
      • You can calculate off of Rollup Fields
      • You cannot rollup up Calculated Fields
    11. Connections and sub-grid+ button behavior
      • Effects of Quick Create Form
      • Field is required it does “Add existing” if there are records to add.
      • Mark the field as required – Always pops “Add New”
    12. Tips for Developers
    13. CRM Tools and Features
    14. Legacy Feature Check
    15. CRM Solutions Import/Export
      • CRM 2011 Imports to CRM 2013 and CRM 2013 SP1
      • CRM 2013 SP1 Exports to 2013 RTM Format
      • CRM 2013 & 2013 SP1 Imports into 2013 SP1 & 2015

    Enjoy!

    Shawn Dieken, Sean McNellis and Daren Turner

    Follow the conversation:
    @sdieken
    @seanmcne
    @pfedynamics | http://www.pfedynamics.com

    Monitoring and Statistics for Sandboxed Plugins

    $
    0
    0

    We usually receive questions about where should plugins be registered, and is sandbox a recommended option assuming it is "sandbox-ready", or is it only for Dynamics CRM Online?  Based on what we have seen and experienced with our customers, in this post we will answer these questions and more importantly discuss how you can monitor the plugins hosted in the sandbox service.

    Where to register my plugin?

    Developers have the option of registering their plug-ins in the sandbox, known as partial trust, or outside the sandbox, known as full trust. Full trust is supported for on-premises and Internet-facing Microsoft Dynamics CRM deployments. For a Microsoft Dynamics CRM Online deployment, plug-ins or custom workflow activities must be registered in the sandbox (partial trust) where they are isolated as previously described.

    In summary, if your plugins are “Sandbox-Ready/compliant” that conform to the boundaries of the sandbox process (Partial trust) as described in How to: Run Partially Trusted Code in a Sandbox, then the sandbox is the recommended execution environment for plug-ins as it is more secure, supports run-time monitoring and statistics reporting, and is supported on all Microsoft Dynamics CRM deployments. In addition, Microsoft Dynamics CRM Online only supports execution of custom workflow activities if they are registered in the sandbox.

    Plug-in isolation, trusts, and statistics

     

    Monitoring plugins hosted in sandbox

    "PluginTypeStatistic"

    This entity is used by the platform to record execution statistics for plug-ins registered in the sandbox (isolation mode). The schema name for this entity is PluginTypeStatistic. To view the entity metadata for your organization, install the Metadata Browser solution described in Browse the metadata for your organization.

    PluginTypeStatistic entity messages and me

    Run-time statistics

    The Microsoft Dynamics CRM platform collects run-time information about plug-ins and custom workflow activities that execute in the sandbox.

    This information is stored in the database using PluginTypeStatistic entity records. These records are populated within 30 minutes to one hour after the sandboxed custom code executes. See the PluginTypeStatistic attributes to find out what information is
    collected. You can retrieve this information by using the retrieve message or method.

    If the sandbox worker process that hosts this custom code exceeds threshold CPU, memory, or handle limits or is otherwise unresponsive, that process will be killed by the platform. At that point any currently executing plug-in or custom workflow activity in that worker process will fail with exceptions. However, the next time that the plug-in or custom workflow activity is executed it will run normally. There is one worker process per organization so failures in one organization will not affect another organization.

    An easy way to see the statistics is through the advanced find, look for “Plug-in type Statistics”

      
     

    You’ll find very interesting information reflected in the columns of the view that includes:

    TerminateMemoryContributionPercent, OrganizationId, AverageExecuteTimeInMilliseconds, FailurePercent, PluginTypeStatisticId, ModifiedOnBehalfBy, CrashPercent, CreatedBy,
    FailureCount, CreatedOnBehalfBy, CrashCount, CrashContributionPercent, TerminateCpuContributionPercent, ModifiedBy, TerminateHandlesContributionPercent, PluginTypeId, ModifiedOn,
    ExecuteCount, TerminateOtherContributionPercent, CreatedOn.

    For example, the execute count and failure count columns could be compared to determine the percentage of failures.  The failures could then be investigated further to determine root cause.  In our case, it was because the business logic in the custom component was expecting data that was not there and throwing a NullReferenceException.

    We hope this information had shed lights on the sandbox service and how to monitor it!

    By: Julien Clauzel, Fadi EL-Hennawy

    Microsoft Premier Field Engineer

    Podcast and Overview: Microsoft Dynamics CRM 2015 Update 0.1 (Update Rollup 1)

    $
    0
    0

    Contents:

    We're proud to announce that all packages for Microsoft Dynamics CRM 2015 Update 0.1 (Update Rollup 1) were released on April 14th, 2015 to the Microsoft Download Center!  These packages should appear on Microsoft Update in Q2 2015.

    Note the naming convention change!  Post-RTM Updates used to be called Update Rollups, now they're just called Updates with the version number:

    Was: Microsoft Dynamics CRM Update Rollup 1 or 2

    Is now: Microsoft Dynamics CRM Update 0.1 or 0.2

    For more details, see the Dynamics CRM Product Group blog "New naming conventions for Microsoft Dynamics CRM updates"

    Microsoft Dynamics CRM 2015 Update 0.1 Build number:

     7.0.1.129

    Microsoft Dynamics CRM 2015 Update 0.1 Microsoft Download Center page

    Here's the "Master" Microsoft Dynamics Knowledge Base article for Microsoft Dynamics CRM 2015 Update 0.1: (KB 3010990). Going forward, the plan is to continue publishing Master Knowledge Base articles for CRM Updates a bit in advance of release to aid planning.

    Podcast

    On April 15th 2015, Greg Nichols and Ryan Anderson from the Microsoft CRM Premier Field Engineering Team provided information about:

    • The release of Microsoft Dynamics CRM 2015 Update 0.1
    • New fixes made available In Microsoft Dynamics CRM 2015 Update 0.1

    during their Microsoft Dynamics CRM 2015 Update 0.1 Podcast

    Note regarding Podcasts: We've recently changed the location of where we are hosting and distributing our podcasts.  See PFE Dynamics Podcast Update for more information.

    Go to Top

    The "CRM Update Rollup Collateral Page"

    For pointers to download locations, release dates, build information, and CRM Premier Field Engineering blogs and podcasts for all supported Microsoft Dynamics CRM Update Rollups and Service Packs, visit the "CRM Update Rollup and Service Pack Collateral Page"

    Go to Top

    Important note:

    An updated Unified Service Desk (Build 06.01.0001.0132) for CRM 2013 Service Pack 1 and CRM 2015 has been released as part of Update Rollup 1 for Microsoft Dynamics CRM 2013 SP1. See the following Microsoft Download Center webpage for download details:

    Unified Service Desk for Microsoft Dynamics CRM 2013 / 2015

    General Upgrade Rollup and Service Pack Notes:

    • Testing CRM Update Rollups: Best Practices
      • Microsoft Dynamics CRM Premier Field Engineering recommends doing all the standard testing you generally do for all Updates, which could be the functional and performance testing that you would do with a new major release or a subset of that test plan
      • The “general rule of thumb” for test plans for Update Rollup installs are:
        • Test any changes in a pre-production environment BEFORE introducing into your production environment. Manage your risk!
        • Consider using the Performance Toolkit for Microsoft Dynamics CRM to simulate your production user load in your testing environment, to shake out any performance-related issues early. The CRM 2011 version is currently being evaluated against CRM 2013 and CRM 2015, but CRM Premier Field Engineering can help you use the CRM Performance Toolkit with either CRM 2013 or CRM 2015
        • Test using the permissions your most restrictive end-user roles have. Testing with CRM Administrator permissions, for example, does not give you the complete picture
        • Concentrate on your SDK customizations, JavaScript, ISV add-ons – basically anything that’s not OOB functionality or customizations done from within the UI

    Go to Top

    Microsoft Dynamics CRM 2015 Update 0.1 packages are available for download via: 

    • The Microsoft Dynamics CRM 2015 Update 0.1 Microsoft Download Center page - released April 14th, 2015
    • The Microsoft Update Catalog  (packages scheduled for release in Q2, 2015)
    • The Microsoft Update detection / installation process
      • Note: Microsoft Dynamics CRM 2015 Updates will be pushed via Microsoft Update as Important updates
      • Client packages installed manually by downloading the packages and running install will require local administrator privileges. If the client packages are installed via Microsoft Update or SCCM (System Center Configuration Manager), they will not require local administrator privileges
      • Consider using Windows Server Update Services (WSUS) or similar software distribution technologies to distribute Dynamics CRM Update Rollups internally.  WSUS is a locally managed system that works with the public Microsoft Update website to give system administrators more control. By using Windows Server Update Services, administrators can manage the distribution of Microsoft hotfixes and updates released through Automatic Updates to computers in a corporate environment
      • For help with installation please see the Installation Information section of the Microsoft Dynamics CRM 2015 Update 0.1 "master" Microsoft Knowledge Base article
      • Please review Jon Strand's blog posting "CRM 2011: Silently Installing Update Rollups" which provides details on installing CRM Outlook client update rollups "silently" in order to limit end-user interruption, which also applies to CRM 2013 and CRM 2015 Updatesollups and Service Packs

    for these CRM components:

    Microsoft Dynamics CRM Server 2015

    Microsoft Dynamics CRM 2015 for Microsoft Office Outlook (Outlook Client)

    Unified Service Desk for Microsoft Dynamics CRM 2015

    Provides a configuration-based framework for quickly building agent applications for call centers. You can aggregate customer information from different areas in Microsoft Dynamics CRM into a single desktop and get a 360° view of customer interactions

    Microsoft Dynamics CRM 2015 Email Router

    Microsoft Dynamics CRM 2015 SSRS (SQL Server Reporting Services) Data Connector

    The SSRS Data Connector is not available as an individual download.  It is included in the Microsoft Dynamics CRM Server 2015 download. When you extract the Server package (CRM2015-Server-ENU-amd64.exe /extract:path: extracts the content of the package to the path folder), you’ll find the Data Connector in the SrsDataConnector folder

    Microsoft Dynamics CRM 2015 Language Packs

    Microsoft Dynamics CRM 2015 for Windows 8 (“MoCA” – the Mobile Client Application available via the Windows Store)

    Microsoft Dynamics CRM for iPad (in iTunes)

    Microsoft Dynamics CRM 2015 Report Authoring Extension (with SQL Server Data Tools support)

    Microsoft Dynamics CRM 2015 List Component Microsoft Dynamics CRM 2015 List Component for Microsoft SharePoint Server 2010 and Microsoft SharePoint Server 2013 (for multiple browsers)

    Go to Top

    Microsoft Dynamics CRM 2015 Update 0.1 Prerequisites:

    • Essentially the prerequisites listed in the Microsoft Dynamics CRM 2015 Implementation Guide download or specific TechNet content for the various CRM components serviced

    Go to Top

    Issues resolved via Microsoft Dynamics CRM 2015 Update 0.1: 

    Microsoft Dynamics CRM 2015 Update 0.1 contains fixes for issues reported by customers or discovered via internal testing.

    Fixes released via Microsoft Dynamics CRM 2015 Update 0.1:

    • Appointment tile only shows the end time of appointment in the CRM for Tablets
    • Cannot use backspace key to delete value from fields with iOS7 in Safari on iPad
    • 1: N lookup fields are not populated when using mobile devices
    • A JavaScript error occurs switching between forms for Facilities/Equipment
    • A script error occurs when closing a DateTime control in CRM for Tablets
    • Using the OrgDbOrgSetting tool to set the boolean value SkipGettingRecordCountForPaging to True causes paging to be removed from subgrids
    • After upgrading to CRM 2015 the fields DeliveryPriorityCode and DeliveryLastAttemptedOn do not appear on all Out of Box Activity Entities
    • Business Process Flows are not displayed on the Account entity for the System Administrator role
    • Business Rules do not fire when comparing a decimal field value equal to 0
    • Cannot Save or Delete Connections when Team Templates are removed
    • Charts containing option sets ignore the order that is specified
    • Command bar Enable rules do not work when detecting if an attribute exists in the CRM Client for Outlook
    • Dependency calculation error occurs when importing a queue item view with an attribute from a custom relationship
    • The Activities tab in the Social Pane will not display Email Activities containing an invalid HTML format
    • Ellipses are disappearing when the command bar labels have long names
    • Extra white space appears between form controls when scrolling in Safari on iOS7
    • When assigning Team membership via a custom plugin, users receive an error message when attempting to open records owned by the assigned Team
    • Executing a ApplyRoutingRuleRequest message in code will execute without error but the rule is not applied
      Removing or inserting line breaks in response to an HTML email using the web client will cause email font to be lost in some parts of the email body
    • Incorrect messaging for Marketing Campaigns when using Russian language pack
    • Incorrect time is displayed when using custom time formats on Activity entities
    • Loading a child record from a parent can cause parent activities to load on child activity wall
    • Merging records with same Team as the owner creates unnecessary POA records
    • CRM for Tablets will not configure for some time zones
    • On Quote, Order, and Invoice the associated entity navigation bar is not updating with the correct navigation tiles
    • Outlook crashes when viewing another users items in the calendar, contacts folder, or task folder
    • Outlook hangs after startup when CRM for Outlook is configured
    • Parent Account is not populated for Phone Call activites if creating the activity from a subgrid on the Account entity Information form
    • Quick Find does not work on Articles when added to a Dashboard as a subgrid
    • Quick View form shows incorrect status reason values when displaying the data on a different entity form
    • Rendering issues with SharePoint integration when using managed metadata columns in SharePoint
    • A script error occurs when deactivating a CRM record after viewing the Documents area for SharePoint integration
    • Resizing a chart pane that contains multiple X Axis categories, one of which is a Boolean field, causes category values to be removed
    • Resolved Case settings in Case Creation rules are not processing as expected
    • Resources tile is not present under related navigation for the Site entity
    • Using the Save and Close button when creating multiple Appointments on the Sales Calendar causes an error to occur
    • Scroll bar does not appear on Edit Properties and View Properties dialog windows for SharePoint documents
    • Scrolling appears jittery and does not react to touch in Safari on iOS7 on iPad3
    • Sent Emails are not promoted to CRM when using Track all Email messages and Server Side Sync
    • Using XrmPageuisetFormNotification to set a notification does not work when triggered from a Quick Create form
    • Solution import fails with error that the LocalizedLabel is required by another solution
    • Error messages generated when working with Appointment activities appear in a language different than the default selected for the CRM organization
    • Related navigation tiles are missing from entity forms
    • Tiles for sub-menu items are missing from horizontal navigation bars
    • Updating an email address value for a recipient that contains multiple email addresses in CRM causes replies to a previously received email to be sent to the newly updated email address instead of the original email address
    • The DisplayRules for command bar buttons are not reevaluated after a case record has been reassigned
    • Regarding information is missing for email activities when going offline
    • The Reading Pane for Phone Call records are not displayed in CRM for Outlook
    • The sample currency format that is displayed in the Personal Settings Format tab is displayed incorrectly
    • Users with Administrative Access Mode are unable to import a solution containing Reports
    • Attempting to update a Connection entity record that does not have a Connection Role defined results in an error
    • Asynchronous Plugins that generate a COM Exception enter a failed state instead of being temporarily suspended and cannot be retried
    • Custom web resources inserted in an iframe on an entity form are not rendered correctly when viewed in the Safari browser on iPad
    • When adding data to the CRM Fields form in the Microsoft Dynamics CRM 2013 Client for Outlook, that data is not being persisted to the record if the user does not click away from the field to lose focus
    • When Creating Custom System Views, users may notice that if they leave the Primary Name Attribute on the view, it may not display in the CRM for Outlook Client
    • Exporting a solutiong containing an SLA record will add a new SLA workflow process to the customizations.xml file each time the solution is exported
    • Datetime fields with a format setting of Date Only will continue to display time values when viewed in CRM for Tablets
    • Attempting to filter a lookup using a 1:N relationship results in an error when clicking on the lookup icon if the related field is not already populated
    • When inserting a template into the body of an email using Internet Explorer, the template is inserted at the top of the email body instead of at the expected cursor location
    • Trace logging for the CRM Unzip Service refers to the SharePoint Async Service when it should instead mention the CRM Unzip Service
    • Poor performance is observed when attempting to use the Find Available Times feature for Resource Scheduling for the first time
    • Microsoft Dynamics CRM SDK calls will not work as expected if the Security Token Service used for Claims Based Authentication does not produce an Asymetric Security Token response
    • You are unable to create records for custom Activity entities when the RegardingObjectId is set
    • Clicking the dropdown arrow to the right of the Activities menu does not display Recently Viewed Items
    • An error occurs when creating a new E-mail template: "An error has occurred, please return to the home page and try again"
    • Email fields do not resolve properly even after manually resolving to a Contact
    • Phone Call activity created from a contact record does not auto populate the field Call To
    • An error occurs when creating a second Appointment record from the Dashboard Navigation: "Try again"
    • When an .exe file is attached to a Note in a Case, it throws an error and the Note is not saved
    • Script error occurs when clicking front and back arrows in the Help dialog
    • Duplicate sequence numbers occur for Opportunity, Quote, Order and Invoice details
    • A script error occurs when opening an entity on an Android 4.4 device
    • Forms are not refreshed when assigning Accounts to other users
    • ClientGlobalContext.js.aspx changes causing Silverlight controls to fail
    • Tabbing does not work in Safari 8 on OS X 10.10
    • Using the Stage.getCategory() function for the Process Flow API does not work properly
    • Branch fields are not being reset when changing stage in the Process Flow in Safari 8 on OS X 10.10
    • A blank page is added when exporting a report created from Report Wizard
    • A script error occurs when removing all branches from a branching Business Process Flow
    • An error occurs when trying to set dynamic fields in a workflow for the Account entity
    • Saving a Business Process Flow without providing details in the "value" field throws an Invalid Argument error
    • Opening an activated Business Process Flow and closing without making changes asks if user is sure they want to leave the page
    • Business Rules do not execute after meeting conditions in CRM for Tablets
    • Process Rules are not triggered when setting custom Two Option field with an existing field
    • Required fields in CRM for Tablets are set and uneditable for Opportunities
    • Stages in Business Process Flows are missing when using nested branches
    • Going backwards in a Business Process Flow marks all items as Complete instead of clearing them
    • Clicking on the Audit History tab of a workflow causes an "Unexpected Error" to occur
    • Script errors occur when using Business Process Flow APIs such as setActiveStage
    • Unable to import a managed solution containing Business Process Flows from Microsoft Dynamics CRM 2013
    • Marketplace solutions links do not function
    • Unable to create a Competitor and an error occurs when saving the Competitor form
    • A script error occurs when closing a record from Bulk Deletion window
    • Clicking Save and Close in the Hierarchy Security Configuration window without any changes throw an "Invalid Argument" error
    • Daylight Savings Time changes for Chile and Mexico
    • Hierarchy Security Configuration window does not appear in Chrome
    • When adding users through Multiple Users window, it does not find valid Active Directory users
    • Removing a security role from a team takes a very long time
    • Performance on the Product entity has decreased
    • Hierarchy rules are broken when a User's Business Unit is changed that is part of a user-manager hierarchy
    • Error deleting Connections when using Azure plugins or Workflows
    • Solution Imports fail when Workflows containing dynamic URLs are included
    • Complex calculated fields on related entities cannot be defined
    • Activity Feeds are not working in an Internet Facing Deployment upgraded to Microsoft Dynamics CRM 2015
    • CRM for Outlook Pivot Table and dynamic export to Excel options fail to export
    • Incorrect text is displayed when clicking on Add Condition for Calculated fields with the System Customizer role
    • Unable to connect to an organization with more than 1000 users
    • Event campaigns with "Publish to Web" checked are not being listed in the Event Calendar page
    • When you have a plugin registered on Create of a Contact, the Contact fails to be created
    • Actual revenue field, when edited with alphanumeric values, is getting reset with the previous numeric value present when using the CRM for Tablets
    • Blank space displayed when scrolling through the associated records on Android 4.4 devices
    • Script error occurs when a user navigates to an entity grid from a record after reconnecting a CRM for Tablets device to a network
    • Unable to configure the Microsoft Dynamics CRM 2015 CRM for Tablets application with OAuth while on an internal LAN
    • Black background is seen when scrolling records in 'Opportunity Product Inline' associated simple list of the Opportunity form in iOS8
    • Notes quick create form is not dismissed on clicking System back button and application is closed on Android 4.4
    • "All Day Event" within Appointment is not functioning as expected on Android 4.4
    • Lookup bar leaves white space at right end while scrolling on Android 4.4
    • List controls in search results are not populated with additional records on Android devices
    • Tiles disappear when navigating to and from the dashboard on Android devices
    • Dropdown values are not displaying properly the first time opened on Android devices
    • A horizontal gray line appears on users lookup bar when using Android 4.4
    • When "Prevent click-to-call" is unchecked under Policy set. Control policy error is displayed when user clicks on contact card when using CRM for Tablets
    • Script error occurs when opening any record from an activity grid after using record set navigation on the CRM for Tablets
    • Fields that are meant to be Date only should not show Date and Time controls in CRM for Tablets
    • Receiving Invalid Parameter Error in CRM for Tablets for sub-grid views with Related Entity columns
    • Changes made to the Email Server Profile record during the loading period persists
    • A confusing error message occurs when the CRM for Outlook client cannot logon to the MAPI store in Outlook
    • CRM 2015 Client for Outlook ADAL library is not FIPS compliant
    • Appointment record is not created in CRM when tracked by invitee from the CRM for Outlook client
    • An OAuth Error occurs when selecting CRM Online and "Connect automatically with my current credentials" is left checked when configuring the CRM for Outlook client
    • Not able to send the direct mail for selected account record in outlook offline mode of CRM for Outlook client
    • Unable to change the settings of Address Book, for the "Entity record type being Synced to Address Book" in the CRM for Outlook client
    • Outlook crashes when configured with the CRM for Outlook client if it loses network connectivity
    • Icons are not displaying for Opportunity Products and Opportunity relationships in the navigation bar
    • Opportunity Product list does not show name for Write-In products
    • Suggested Product is added more than once if we click on ADD button on the suggestion fly out more than once
    • Business Closure URL allows for XSS security vulnerability
    • Resolve stage in Case form is empty when using CRM for Tablets
    • Incorrect solution customization for ContractTemplate and KbArticleTemplate
    • Action Calls to navigate to a webpage is appending the org url when called through routing rule during session creation
    • Show Tab functionality from a sub-button does not work properly
    • Unable to set a timer on the Task Editor form
    • Email a link option is not functioning on KB Article template
    • Unable to use custom Views in Products subgrids
    • Stakeholders and Competitors cannot be added in the Lead or Opportunity forms using a subgrid
    • Incorrect dialog is displayed when selecting "Set Work hours" from the Customer Service Schedule
    • When a custom entity has a primary name attribute set as optional and a record is created without a value for the primary name field, you are unable to select this record through a lookup to this entity
    • Unable to create a new View using Chrome because of dialog stating "You must provide basic information about this view before using this form."
    • If a user does not have the Read permission for the Campaign entity an error will occur while reading, or creating an Account, Contact, or Lead
    • After opening an Account record from the hierarchy view into a new window using left arrow pop up button the Account form appears. When that Account form is closed the home page is displayed instead of displaying hierarchy view
    • Multi-line field headers are not a tab stop
    • Script errors occur when changing Start Times on Service Restrictions
    • Clicking On Associate child Cases and SetParent Relationship Dialog causes a JavaScript error
    • Unable to open the Quick Find entities selection when in System Settings using Chrome
    • Unable to use Lookup Field that will be filtered by N:1 relationship
    • A JavaScript error occurs when clicking the OK button after checking checkboxes for Global Audit Settings
    • Users are unable to select elements from a dropdown list using the keyboard
    • Icons do not load properly on Safari 8 browser for OS X 10.10
    • An error message occurs when trying to edit filter criteria of a System View
    • Users are unable to unfollow or follow multiple records from an entity grid
    • Duplicate tabs appear for Work Hours and Service Restrictions
    • Unable to add columns in Reports wizard page for Sales reports
    • Users are unable to enter First Name and Last Name in the Lead form on iOS8 devices
    • Users are unable to enter First Name and Last Name in the Lead form on Android 4.4.2 devices
    • Email Templates and Email tabs are not visible in Settings menu
    • Buttons are hidden behind scroll bar and are not displayed appropriately on ribbon for Connection roles
    • Form Assistant on Scheduling dialog does not show the Resources tree for the selected Service
    • Double Click does not open properties dialog in Chrome
    • Clicking OK or Cancel in the Recurring Appointment fly out does not work in Chrome
    • A script error occurs when clicking delete on a Service Restriction
    • The "OK" button does not respond in the Email Configuration form from the CRM for Outlook client
    • Navigation arrows and item numbers disappear when browsing subgrid items
    • You are unable to add components to an existing solution
    • An error occurs when adding a custom filter in the CRM Client for Outlook
    • The "OK" button does not respond in the Service Configuration Settings
    • An error occurs when editing the Bing Map control
    • Adding a step to a workflow causes a script error in Internet Explorer and causes Chrome to stop responding
    • Service Schedule Work Hours are not being saved for "Are the same each day" and "var by day" options
    • Activity status is truncated in the Activity record
    • Field Security Profiles do not save
    • The Save As dialog throws a script error when clicking the OK button
    • Unable to see menu controls on the Menu Bar in Safari 8 on Mini Mac OS
    • The Entitlements subgrid moves when scrolling and overlaps column names
    • A script error occurs when clicking the "X" on the Service Scheduling dialog
    • Unable to add multiple components to a Solution at one time
    • Unable to share an Account record from the Advanced Find window
    • Field Security permissions changes are not automatically reflected on form

    Go to Top

    Full Text indexing now provided for CRM On-premise customers with Update 0.1!

    By default, Microsoft Dynamics CRM 2015 with Update 0.1 installed uses the same search functionality that was available in previous releases, which is based mostly on string matches. Now, with CRM 2015 Update 0.1, CRM system administrators have the option to use full-text indexing for Quick Find.

    We recommend that you consider enabling full-text indexing for Quick Find because it can provide a better search experience by improving query performance. Full-text search also uses more sophisticated indexing methods that includes support for linguistic-based searches and superior relevance ranking. While the previous search method (standard indexing) returns results based on literal matches, full-text indexing returns linguistic-based matches. For example, the term "service" can return similar words like servicing and serviced.

    Note to CRM Administrators: When you enable full-text indexing for a database with a large number of columns, the size of the transaction log of the organization database may increase. So as always when configuring Quick Find, consider the implications by reviewing the full TechNet documentation for this feature addition: Configure Quick Find options for the organization

    Go to Top  

    Support for new technologies provided by CRM 2015 Update 0.1:

    The Microsoft Dynamics CRM Engineering team consistently tests Microsoft Dynamics CRM and associated CRM Updates against pre-release and release versions of technology stack components that Microsoft Dynamics interoperates with. When appropriate, Microsoft releases enhancements via future Microsoft Dynamics CRM Updates or new major version releases to assure compatibility with future releases of these products. This compatibility matrix is updated via this Microsoft Knowledge Base article: Microsoft Dynamics CRM Compatibility List.

    Microsoft Dynamics CRM 2015 Update 0.1 provides support for:

    Hotfixes and updates that you have to enable or configure manually

    Occasionally, updates released via Microsoft Dynamics CRM Updates require manual configuration to enable them. Microsoft Dynamics CRM Updates are always cumulative; for example, Update 0.2 will contain all fixes previously released via Update 0.1 as well as fixes newly released via Update 0.2. So if you install Update 0.2 on a machine upon which you previously installed no Updates, you will need to manually enable any desired fixes for Update Rollups 0.1-0.2:

    • Microsoft Dynamics CRM 2015 Update 0.1: no updates requiring manual configuration

    Go to Top

    Microsoft Dynamics CRM compatibility with technology stack components: Internet Explorer, Windows Client and Server, Office, .NET Framework, and more

    The Microsoft Dynamics CRM Engineering team consistently tests Microsoft Dynamics CRM 2015 Update Rollups against pre-release and release versions of technology stack components that Microsoft Dynamics interoperates with. When appropriate, Microsoft will release enhancements via future Microsoft Dynamics CRM Update Rollups, Service Packs, or new major version releases to assure compatibility with future releases of these products. This compatibility matrix is updated via this Microsoft Knowledge Base article: Microsoft Dynamics CRM Compatibility List.

    Greg Nichols
    Dynamics CRM Senior Premier Field Engineer
    Microsoft Corporation

    CRM2015u01Podcast.mp3

    Dynamics CRM Developers: Build Your Own Mobile Apps for Windows, iOS, and Android Part 3

    $
    0
    0

    I have explained how to use CRM Mobile Helper Library and how to register your application to Azure AD to use OAtuh 2.0 for authorization, as well as how to use CrmSvcUtil.exe extension to generate early bound types for mobile development.

    You can find part 1 and part 2.

    This time, I explain how to register you application to On-Premise and more tips for Online.

    Register your application to On-Premise

    As I explained in part 1, you need to register your application to use OAuth 2.0. For On-Premise, you register your application to Active Directory Federation Service (AD FS) and below is prerequisites.

    - Dynamics CRM 2013 or above with IFD configured.
    - Windows Server 2012 R2 AD FS.

    This time, I am using Activity Tracker Application for test, which you can download from here. You also need to download CRM Mobile helper from here.

    Confirm RedirectUrl and create ClientId.

    Obtain RedirectUrl which you need to register your application.

    1. Open Microsoft.Crm.Sdk.Mobile.sln and build the project.
    2. Open ActivityTracker.sln you downloaded.
    3. Right click Reference and add reference to compiled “Microsoft.Crm.Sdk.Mobile.dll” at step 1.
    4. Open ActivityTrackerHelper.cs and set breakpoint at line 65.

    image

    5. Start debugging, which downloads NuGet packages and launches Windows Phone emulator.
    6. When hitting the breakpoint, press F11 to move one more step so that you can grab RedirectUrl value.

    image

    7. Note the value.
    8. Next, ClientId. Unlike Azure AD, you can specify which ClientId you want to use. In this case, as sample app already have dummy ClientId, I just re-use it. In real scenario, please generate one by your own. You find ClientId just below the RedirectUri which is “a8c735c8-13bd-4736-beeb-8c715a754bb4”.

    Tweak the application

    To make this application working against On-Premise AD FS, you need to change just one line.

    1. Open ActivityTrackerHelper.cs and go to line 543.
    2. Add “false” as second CreateAsync parameter.
    authContext = AuthenticationContext.CreateAsync(ActivityTrackerHelper.OAuthUrl, false).GetResults();

    Register to AD FS

    Next, you register the application to your AD FS.

    1. Logon to AD FS server and open PowerShell.
    2. Type the following command and press Enter to execute.
    >Add-AdfsClient -ClientId a8c735c8-13bd-4736-beeb-8c715a754bb4 -Name "ActivityTracker" -RedirectUri <your RedirectUri>
    3. To confirm, run the following command.
    >Get-AdfsClient -Name “ActivityTracker”

    Test the application

    1. Run the Activity Tracker App by pressing F5 in Visual Studio.
    2. Enter IFD URL of your On-Premise CRM. Click Check mark will navigate you to sign in page.

    image

    3. Sign in to confirm it works as expected.

    Troubleshooting

    If you have trouble running the application, check the following.

    - If you explicitly specify OAuthURL, make sure you are using AD FS address. For example, if your AD FS server is adfs.contoso.com, then OAuthURL is https://adfs.contoso.local/adfs. (https://adfs.contoso.local/adfs/oauth2 or https://adfs.contoso.local/adfs/ls also works)
    - If you don’t see Form Authentication page never appear, make sure you enabled Form Authentication at AD FS console for Intranet.
    - It seems several environment won’t work correctly due to security settings. Try from different PC, or try using Fiddler to bypass the security for small test. Refer to following link for more detail.
    http://stackoverflow.com/questions/23462697/windows-phone-8-1-emulator-not-proxying-through-fiddler

    Manage Azure AD from your MSDN subscription

    Often time, you use trial Dynamics CRM Online organization to test your mobile application. To use your mobile application against the test organization, there are there choices.

    Option 1. Signup Azure trial subscription by using same credential you login to the CRM organization, then login to Azure Portal to register your application where you can find Azure AD tenant for the trial CRM organization.

    Option 2. Register your application once somewhere and let Azure handle it by using Consent feature. Actually you don’t have to register your application to each CRM tenant you connect to. If your application connecting to different tenant CRM organization than original registration tenant, user simply sees “consent”.

    Option 3. Add Azure AD of the CRM organization tenant to your Azure subscription. By using this method, you are able to register your application to the Azure AD tenant which host your CRM organization, yet you don’t have to signup Azure subscription for each tenant.

    Manage other Azure AD from your Azure subscription

    1. For test, signup CRM Online trial or use your own test CRM Online organization.
    2. Login to Azure Portal by using your existing Azure subscription. I am logging in to current portal (https://manage.windowsazure.com)
    3.  Select Active Directory.

    image

    4. Then click New button on the bottom of the page, select APP SERVICES | ACTIVE DIRECTORY | DIRECTORY, then click Custom Create.

    image

    5. Select “Use existing directory” from DIRECTORY menu. Check the “I am ready to be signed out now” and go next.

    image

    6. You will be signed out and redirected to sign in page. Sign in by using credential for CRM Online organization. Then you will be prompted confirmation. Click continue.

    image

    7. You will sign out then sign in back to your Azure subscription. Now you will find newly added Azure AD tenant. From there you can register your application directly to the tenant.

    Next time, I will explain how you can use CRM Mobile Library and ADAL for Xamarin development.

    Ken
    Premier Mission Critical/Premier Field Engineer 
    Microsoft Japan

    Podcast and Overview: Update Rollup 3 for Microsoft Dynamics CRM 2013 Service Pack 1

    $
    0
    0

    Contents:

    We're proud to announce that all packages for Update Rollup 3 for Microsoft Dynamics CRM 2013 Service Pack 1 were released on Thursday, April 16th 2015 to the Microsoft Download Center!  The Update Rollup 3 packages for Service Pack 1 should appear on Microsoft Update in Q2, 2015.

    Update Rollup 3 for Microsoft Dynamics CRM 2013 Service Pack 1 Build number:

    06.01.0003.0119

    Update Rollup 3 for Service Pack 1 Microsoft Download Center page

    Here's the "Master" Microsoft Dynamics Knowledge Base article for Update Rollup 3 for Service Pack 1: (KB 3016464). Going forward, the plan is for the Master Knowledge Base articles for CRM 2013 and CRM 2015 Updates to be published a bit in advance of release to aid planning.

    Podcast

    On Monday, April 27th 2015 Greg Nichols and Ryan Anderson from the Microsoft CRM Premier Field Engineering Team will provide information about:

    • The release of Update Rollup 3 for Service Pack 1 for Microsoft Dynamics CRM 2013
    • New fixes made available In Update Rollup 3 for Service Pack 1 for Microsoft Dynamics CRM 2013

    during their Microsoft Dynamics CRM 2013 Update Rollup 3 for Service Pack 1 Podcast

    Note regarding Podcasts: We've recently changed the location of where we are hosting and distributing our podcasts.  See PFE Dynamics Podcast Update for more information.

    Go to Top

    The "CRM Update Rollup Collateral Page"

    For pointers to download locations, release dates, build information, and CRM Premier Field Engineering blogs and podcasts for all Microsoft Dynamics CRM Updates, visit the "CRM Update Rollup and Service Pack Collateral Page"

    Go to Top

    General Upgrade Rollup and Service Pack Notes:

    • Testing CRM 2013 Update Rollups: Best Practices
      • Microsoft Dynamics CRM Premier Field Engineering recommends doing all the standard testing you generally do for all Updates, which could be the functional and performance testing that you would do with a new major release or a subset of that test plan
      • The “general rule of thumb” for test plans for Update Rollup installs are:
        • Test any changes in a pre-production environment BEFORE introducing into your production environment. Manage your risk!
        • Consider using the Performance Toolkit for Microsoft Dynamics CRM to simulate your production user load in your testing environment, to shake out any performance-related issues early. The Dynamics CRM Premier Field Engineering can help you with using the CRM Performance Toolkit with CRM 2013 or CRM 2015
        • Test using the permissions your most restrictive end-user roles have. Testing with CRM Administrator permissions, for example, does not give you the complete picture
        • Concentrate on your SDK customizations, JavaScript, ISV add-ons – basically anything that’s not OOB ("Out of Box") functionality or customizations done from within the UI

    Go to Top

    Update Rollup 3 for Microsoft Dynamics CRM 2013 Service Pack 1 packages are available for download via: 

    to update the Dynamics CRM Product installations listed in this Microsoft Knowledge base article:

    Microsoft Dynamics CRM Installations, Updates and Documentation

    Note: Microsoft Dynamics CRM 2013 Updates will be pushed via Microsoft Update as Important updates

    • Client packages installed manually by downloading the packages and running install will require local administrator privileges. If the client packages are installed via Microsoft Update or SCCM (System Center Configuration Manager), they will not require local administrator privileges
    • Consider using Windows Server Update Services (WSUS) or similar software distribution technologies to distribute Dynamics CRM Update Rollups internally.  WSUS is a locally managed system that works with the public Microsoft Update website to give system administrators more control. By using Windows Server Update Services, administrators can manage the distribution of Microsoft hotfixes and updates released through Automatic Updates to computers in a corporate environment
    • For help with installation please see the Installation Information section of the <a href="http://blogs.msdn.com/controlpanel/blogs/posteditor.aspx/Service Pack 1 Update Rollup 2 "master" Microsoft Knowledge Base article">Service Pack 1 Update Rollup 2 "master" Microsoft Knowledge Base article
    • Please review my former teammate Jon Strand's blog posting "CRM 2011: Silently Installing Update Rollups" which provides details on installing CRM Outlook client update rollups "silently" in order to limit end-user interruption, which also applies to CRM 2013 and CRM 2015 Update Rollups and Service Packs

    Go to Top

    Microsoft Dynamics CRM 2013 Update Rollup 3 for Service Pack 1 prerequisites:

    • Essentially the prerequisites listed in the Microsoft Dynamics CRM 2013 Implementation Guide download for the various CRM components serviced

    Go to Top

    Issues resolved via Microsoft Dynamics CRM 2013 Update Rollup 3 for Service Pack 1: 

    Microsoft Dynamics CRM 2013 Update Rollup 3 for Service Pack 1 contains fixes for issues reported by customers or discovered via internal testing.

    Fixes released via CRM 2013 Update Rollup 3 for Service Pack 1:

    • The URL that is used for creating a new business closure can allow a malicious user to inject cross-site scripting (XSS) into the URL of the new closure
    • Duplicate Key error when you import a solution into an upgraded organization
    • In sub grids, multi-line field column headers are not a tab stop
    • Address information is removed in CRM for some contact records that use the CRM Outlook Client
    • In a very small subset of circumstances when you decode a UTF 8 e-mail message from pop3, an email field may be lost
      • This occurs when a header field of interest to CRM is in the first line of results retrieved from the pop3 server
    • Incorrect Contact Mailing Address  synchronizes with Server Side Sync when a contact is promoted from Outlook
    • Assigning records throws an error when the assigning user has assign permissions on a user level
    • Cannot display Note intermittently if setting Note as the default tab of the social panel
    • Removing the preprint privilege for a user will not remove their ability to print records and grids as it would in CRM 2011
    • New Button added in customization.xml for ribbon customization does not display on first attempt
    • SLA - 12:00 AM schedule end time causes an endless loop and spikes the w3wp process
    • Cannot upload files when you use Safari on an iPad with CRM On Premise
    • The URL used for creating a new business closure can allow a malicious user to inject cross-site scripting (XSS) into the URL of the new closure
    • When you attempt to save a new case from an existing case form in Microsoft Dynamics CRM 2013 SP1 UR1 using the Save and Close button, users will encounter script error:
      • Microsoft Dynamics CRM has encountered an error - Unable to get property 'handleSingleClick' of undefined or null reference
    • Adding a multi-line form control such as an iFrame or Web Resource to a form will not respect a non-default number of rows for height if visibility is collapsed by default
    • Quick Find view definition is not properly considered. The columns being defined in the Quick find view are not used in the result that is displayed
    • The Help button in the menu has no text for Screen Readers or Windows Narrator to read
    • The Home button in the menu has no text for Screen Readers or Windows Narrator to read
    • The Settings button in the menu has no text for Screen Readers or Windows Narrator to read
    • Create a CRM 2013 Organization having the English language as base language. Install any language pack on top of it (for example, Norwegian):
      • If a user who sets the Norwegian language as the primary language is his personal options, opens the Out Of Box Sales Pipeline Chart, the user sees the name of this chart in Norwegian
      • However the legend of the chart remains in English
    • Outlook lookup/dialog windows does not scale when the DPI is set to 125 or 150 percent
    • If the Sales Professional Connection Role is deleted then it is no longer possible to remove Sales Team members from an Opportunity
    • When a customer is using LINQ to query the CRM database from inside a plugin step, the query works fine in CRM 2013 UR 2. After upgrading to UR 3, it throws an error
    • Email ModifiedOn Date changes when you use Reply, Forward or Reply All
    • The default font does not have a proper font tag in the HTML Definition
    • Tracing level Options are added to the Outlook Client Diagnostic
    • Field mapping does not work for Option Sets in the tablet app. Option Set values do not get pre-populated
    • addPreSearch is not applied to team lookups when the refresh button is pressed
    • The Connector for Microsoft Dynamics (ERP) Solutions fails to import into CRM at Customer Address entity
    • When you create a Roll up Query that has the ampersand symbol (&) in the field, it fails to open and gives the following error:
      • Error: There was an error processing your request. Please wait and try again later
    • The Dialog box indicating that the Offline Process is complete closes too early
      • When the user assumes the process is already done, they try to access the CRM Data in offline mode and may encounter error messages, crashes, or hangs in Outlook
    • When you upgrade or create a CRM organization on a CRM 2013 SP1 with UR1, during the "Microsft.Crm.Tools.Admin.InstallDatabaseUpdateAction" phase, most of the Out Of Box labels related to the base language of the organization will be updated to blank in the Localizedlabel table in the organization database
    • If you work offline and you have the CRM client for Outlook with SP1 installed and you attempt to open a Sales Order Detail (Order Product) Invoice Detail (Invoice Product) Quote Detail (Quote Product), you receive a generic error on the web page that should have been shown:
      • If you look at tracing, you see the error ArgumentException:
        • Unsupported Entity code. Parameter name: entityTypeCode
    • FilterRelationships on form lookups do not work properly
    • If you try to import the CRM 2013 Management Pack on SCOM 2007 SP1/R2, you get the following error:
      • Cannot load Management Pack from specific sealed assembly file: [C:\Program Files (x86)\System Center Management Packs\ Microsoft System Center Management Pack for Dynamics CRM 2013\Microsoft.Dynamics.CRM.MP] This assembly is built by a runtime newer than the currently loaded runtime and cannot be loaded (Exception from HRESULT: 0x8013101B)
    • Users of Microsoft Dynamics CRM 2013 will notice that the fields in the form's footer are not refreshed until the form is closed and reopened
    • When we have a record that has a date and time already defined and click on the pick list to change the time, the first value we see is 0:00 or 12:00 AM instead of the selected value
    • Embedded images do not render in E-mails
    • When you send workbooks as attachments in Microsoft Excel and have Microsoft Dynamics CRM 2013 Client for Outlook is installed, Excel will appear to hang if the user did not save their changes prior to sending the attachment
    • Users of Microsoft Dynamics CRM 2013 may encounter script error dialogs showing an InvalidCharacter Error
    • There are three incorrect translations in the notes section of the activity pane for the German CRM 2013 that are misleading:
      • "Insert note" which is translated to "Knoten eingeben" (translated back it comes out as "Insert Knot" or "Insert Node" as in XML-Node). Expected: "Notiz eingeben."
      • The button "done" is translated to "abgeschlossen" ("closed" in English). Expected: "Fertig."
      • The delete button "Delete Note." The german translation is "Diese Rolle löschen", which would mean "Delete this role."
        • As role is the short form of security-roles, there is confusion about what this button does with security-roles. Expected: "Notiz Löschen."
    • Printer prompts for 8.3"x11" paper when you print a report created in the report wizard
    • When you attempt to save a new case from an existing case form in Microsoft Dynamics CRM 2013 SP1 UR1 using the Save and Close button, users will encounter script errors:
      • Microsoft Dynamics CRM has encountered an error - Unable to get property 'handleSingleClick.'
    • Updates to Appointments are not synced from Outlook to CRM if they are owned by a team of which the user is a member
    • Users that modify the horizontal axis labels on their charts will notice that the charts are displayed incorrectly in Microsoft Dynamics CRM 2013
    • When you try to change views for a grid, if the view picker contains a large amount of options such as 50, Safari on the iPad may not render it
    • You cannot create a record from a custom activity entity when theRegardingObjectId is set
    • When date/time columns are null for a mailbox in CRM Online, 2013, or 2015, and access is tested for that mailbox, the CRM Asynchronous Service will crash
      • The event viewer will record an error stating Host {server name}: failed while monitoring asynchronous operations queue. Event ID 17411
    • When many records are updated in Dynamics CRM, and all of those records have 1 or more workflows which are waiting for updates to those records, performance problems may occur in the SQL database for CRM
      • This could result in the blocking of SQL queries when those records are updated
    • w3wp and crmasync platform trace logs contain Excessive Warnings logged for "Invoking delegate number XX for eventId XX"
    • The onChange event for a field is not triggered for second time if a focus call is made within the onchange script
    • Embedded Images fail to download after organization import. When viewing a network / http trace such as Fiddler, a 404 is occurring because the wrong URL is being used
    • Error mails are received due to the existance of the CrmOrgMailboxPrefix* folder
    • JavaScript using setRequiredLevel("none") does not work on CRM for Tablets for Business Required fields
    • OnChange works incorrectly on the mandatory field if it is selected more than twice
    • Consider the scenario where Plain text emails are promoted\create in CRM using the CRM Email router or SDK:
      • When the body of the email is shown by expanding email in the Social Pane Wall, it doesn't word wrap unless there is an explicit line break
      • In CRM if a user replies to the offending email and is subsequently tracked in CRM, the issue stops occurring for the replied email
      • This issue is reproducible in all browsers
    • Before Service Pack 1 Update Rollup 1, Product Lookup from Order showed Product ID. After Service Pack 1 Update Rollup 1, Product Lookup from Order showed Price Per Unit
      • Also, the Product Name is shown twice in the lookup
    • Receiving Invalid Parameter Error in Mobile Client Application client for sub grid views that contain Related Entity columns
    • Some form field types are not read when you use JAWS disability software
    • Cannot navigate look up fields and they do not return any output to the user when using JAWS disability software
    • When you use JAWS disability software, a search box with results or no results available does not have any auditory feedback
    • You cannot delete a Managed solution when it includes a ribbon customization that references JavaScript
    • Importing solutions is slow in environments with field level security in use
    • When you navigate to a Lookup dialog, using only the keyboard, narrator does not read entries of a lookup control
    • You cannot insert Email Templates after Update Rollup 2 for CRM 2013 Service Pack 1
    • Removing the preprint privilege for a user will not remove their ability to print records and grids as it does in CRM 2011
    • CRM performs HTML encoding for the last recently viewed items which causes name corruption
    • Multi line fields auto grow even when the field definition is not set to "automatically expand to use available space."
      • Once you tab out of the field the Multi line field gets automatically expanded and the scroll bar disappears
      • However, this leads to corruption of the form rendering
    • Upon selecting the chevron in a quote, the Documents button does not appear even though it is in the form
    • When you create a record from a sub grid related through a N:N relationship to the main entity, after filling in the mandatory fields and saving the record, the focus jumps to the parent page
    • Mailboxes stop processing incoming and outgoing email when you use CRM Server Side Synchronization for email processing
      • This occurs when the mailbox that needs to be processed remains in a locked state
    • When you run a report in CRM Online, or when you execute a Sandbox plugin, the report or plugin may fail with an exception similar to the following:
      • >System.Security.SecurityException: Microsoft Dynamics CRM has experienced an error:
      • Reference number for administrators or support: #B944196D: System.Security.SecurityException: Either a required impersonation level was not provided, or the provided impersonation level is invalid
    • NullReferenceException occurs when you send messages to an Azure topic using CRM SDK ServiceBus Plugins
    • 12:00 AM schedule end in Service Level Agreements causes endless loop and spiked w3wp process
    • After Update Rollup 1 for CRM 2013 Service Pack 1, an error occurs when creating Appointments when AutoRouteToOwnerQueue is set to 1
      • This can also occur with plugins in place on Book of appointment

    Go to Top

    Support for identical new technologies provided by CRM 2013 Update Rollup 3 for Service Pack 1:

    The Microsoft Dynamics CRM Engineering team consistently tests Microsoft Dynamics CRM 2013 and associated CRM Updates against pre-release and release versions of technology stack components that Microsoft Dynamics interoperates with. When appropriate, Microsoft releases enhancements via future Microsoft Dynamics CRM 2013 Updates or new major version releases to assure compatibility with future releases of these products. This compatibility matrix is updated via this Microsoft Knowledge Base article: Microsoft Dynamics CRM Compatibility List.

    Microsoft Dynamics CRM 2013 Update Rollup 2 for Service Pack 1 provides support for:

    Microsoft Dynamics CRM 2013 Update Rollup 3 for Service Pack 1 provides additional support for:

    Go to Top

    Hotfixes and updates that you have to enable or configure manually

    Occasionally, updates released via Update Rollups require manual configuration to enable them. Microsoft Dynamics CRM Update Rollups are always cumulative; for example, Update Rollup 2 will contain all fixes previously released via Update Rollup 1 as well as fixes newly released via Update Rollup 2. So if you install Update Rollup 2 on a machine upon which you previously installed no Update Rollups, you will need to manually enable any desired fixes for Update Rollups 1-2:

    • Update Rollup 1: no updates requiring manual configuration
    • Update Rollup 2: no updates requiring manual configuration
    • Service Pack 1: no updates requiring manual configuration, but some new features need to be enabled by a CRM Server Administrator
      • Go to Settings > Administration and then click Install Product Updates
    • Service Pack 1 Update Rollup 1: no updates requiring manual configuration
    • Service Pack 1 Update Rollup 2: no updates requiring manual configuration
    • Service Pack 1 Update Rollup 3: no updates requiring manual configuration

    Go to Top

    Microsoft Dynamics CRM compatibility with technology stack components: Internet Explorer, Windows Client and Server, Office, .NET Framework, and more

    The Microsoft Dynamics CRM Engineering team consistently tests Microsoft Dynamics CRM 2013 and associated Updates against pre-release and release versions of technology stack components that Microsoft Dynamics interoperates with. When appropriate, Microsoft will release enhancements via future Microsoft Dynamics CRM 2013 Update Rollups, Service Packs, or new major version releases to assure compatibility with future releases of these products. This compatibility matrix is updated via this Microsoft Knowledge Base article: Microsoft Dynamics CRM Compatibility List.

     

    Greg Nichols

    Senior Premier Field Engineer, Microsoft Dynamics CRM

    Microsoft Corporation

    CRM2013SP1UR3.mp3

    LINQPad 4 Driver for Dynamics CRM is available on CodePlex

    $
    0
    0

    I am pleased to announce that we released “LINQPad 4 Drive for Dynamics CRM” on CodePlex.

    What’s LINQPad?

    LINQPad (http://www.linqpad.net/) is a great tool which you can write and execute LINQ query against many data sources, like SQL Server, Oracle or Web Services. In addition to LINQ query support, the tool also supports C#/F#/VB expression, statement block or program, to write and execute the code and code snippet.

    What can you do with CRM Driver?

    By using CRM Driver, you are able to run LINQ query against Microsoft Dynamics CRM organizations on the fly. Follow the steps below to try it out!

    Install Driver to LINQPad

    1. Download and install LINQPad if you don’t have it yet from http://www.linqpad.net/.

    2. Go to https://linqpaddriverforcrm.codeplex.com/ and click “DOWNLOADS” tab, then download CRMLinqPadDriver.lpx file.

    3. Open LINQPad and click “Add connection” link on top left.

    image

    4. Click “View more drivers…” button at the bottom of the page.

    image

    5. Click “Browse” button in the bottom of the page.

    6. Select downloaded CRMLinqPadDriver.lpx file, then click “Open”.

    7. Click OK.

    image

    Use the Driver

    1. Select “Dynamics CRM Linq Pad Driver” in Choose Data Context and click “Next”.

    image

    2. Click “Login to CRM” button.

    image

    3. Login to your Organization at login screen.

    image

    4. Then it automatically start loading metadata and DataContext from selected organization. Wait until it’s done.

    image

    5. Once “Loading Data” completed, click “Exit”. Then LinqPad starts loading schema, which takes a bit of time. Wait until you see schema information on the left pane like below screenshot.

    image

    Write LINQ query and Execute

    1. Firstly, select added connection from “Connection” dropdown on the top right.

    image

    2. Enter following query to query window.

    image

    3. Click “Play” button or press F5 key to execute query. You will see the result in result pane.

    4. Click SQL tab in result pane, where you can find QueryExpression and FetchXML equivalent to LINQ query.

    image

    image

    Write C# statement and Execute

    In addition to LINQ query, you can write C# as well.

    1. Click [+] tab to open new query window next to existing Query tab.

    2. Select “Connection” again.

    image

    3. Select “C# Statement(s)” from Language dropdown.

    image

    4. Enter following statements and Execute.

    image

    “this” of above statement represents DataContext of your connection, which is CrmOrganizationServiceContext. Therefore “this” has all common method from OrganizationService, as well as methods from OrganizationServiceContext.

    IntelliSense?

    When you use free version of LINQPad, you won’t get IntelliSense, but if you purchase the license, it works like Visual Studio.

    image

    What’s next?

    We would like to hear feedback from you!! As it’s open source, you are able to extend it to your own needs, or you can suggest/report bugs.

    Ken
    Premier Mission Critical/Premier Field Engineer 
    Microsoft Japan

    Customers’ choices… The most popular "Dynamics CRM in the Field" technical blog posts from Premier Field Engineering!

    $
    0
    0

    The CRM Premier Field Engineering content team feel customers can benefit from knowing what technical content we have provided that has been most popular with customers; ranked by number of page views.

    We included the top 10 posts for each of the last three years to cover all of the Microsoft Dynamics CRM versions still supported as per the Microsoft Dynamics CRM Lifecycle Page.

    We'll periodically update these lists as new content is posted.

    Enjoy!

    The Dynamics CRM Premier Field Engineering team

     ========================================================================

    Published in 2015

    Title

    Rank

    Date

    Convergence 2015 Interactive Discussion Topics: Optimization Tips and Tricks

    1

    16-Mar-15

    Convergence 2015 Interactive Discussion Topics: Customization Tips and Tricks

    2

    17-Mar-15

    Convergence 2015 Interactive Discussion Topics: CRM 2015 Upgrade discussion

    3

    16-Mar-15

    Microsoft Dynamics CRM 2015 White Papers & Technical Documentation

    4

    5-Jan-15

    Dynamics CRM Developers: Build Your Own Mobile Apps for Windows, iOS, and Android

    5

    12-Jan-15

    CRM 2015 Upgrade: A Few Things You Can Prepare Ahead of Time

    6

    19-Feb-15

    The Dangers of Guid.NewGuid();

    7

    19-Jan-15

    LINQPad 4 Driver for Dynamics CRM is available on CodePlex

    8

    24-Apr-15

    Memory management for Dynamics CRM in a virtual environment

    9

    4-Mar-15

    Dynamics CRM Developers: Build Your Own Mobile Apps for Windows, iOS, and Android Part 2

    10

    12-Feb-15

     

    Published in 2014  

    Title

    Rank

    Date

    Enable WCF Compression & SSL to Improve CRM 2013 Network Performance

    1

    2-Sep-14

    PFE Core Library for Dynamics CRM on CodePlex and NuGet

    2

    13-May-14

    Dynamics CRM 2011, 2013 and 2015 useful Tools and Features

    3

    4-Mar-14

    Microsoft Dynamics CRM 2013 CSS Style Reference using Browser Developer Tools

    4

    6-Jan-14

    Dynamics CRM Custom FetchXML Reporting with Multiple Datasets using Pre-Filtering

    5

    10-Mar-14

    PFE CRM Trace Log File Reader

    6

    19-Feb-14

    Microsoft Dynamics CRM 2013 Implementation Guide (IG) and Software Development Kit (SDK) …

    7

    12-Feb-14

    Tips : Dynamics CRM 2013 Field Level Data Encryption Management

    8

    30-Jun-14

    CRM Online Test Instance Changes are now live (Sandbox Instances)

    9

    21-Mar-14

    Table Bloat Due to Workflow Log Entries

    10

    29-Sep-14

     

    Published in 2013 

    Title

    Rank

    Date

    Microsoft Dynamics CRM 2015, 2013, and 2011 Updates: Release Dates, Build Numbers, and Collateral

    1

    11-Jul-13

    CRM 2011 Email Router – NullReferenceException error

    2

    21-Oct-13

    Microsoft Dynamics CRM 2013 White Papers & Technical Documentation

    3

    26-Dec-13

    6 Steps to Add a Deployment Administrator in Microsoft Dynamics CRM 2011

    4

    7-Oct-13

    How to install Microsoft Dynamics CRM 2013 without an Internet Connection

    5

    21-Nov-13

    Where did my scripts go? How to debug JavaScript in CRM 2011 post-UR15

    6

    23-Oct-13

    Dynamics CRM 2011 UR11 Critical Update: What you need to know

    7

    29-Jul-13

    CRM 2011 Platform Tracing – Registry vs. Windows PowerShell

    8

    15-Oct-13

    Creating SSL Certificates for CRM Test Environment

    9

    9-Dec-13

    Dynamic Activity Reporting using FetchXML

    10

    1-Jul-13


    Dynamics CRM Developers: Build Your Own Mobile Apps for Windows, iOS, and Android Part 4

    $
    0
    0

    As I promised in the last article, I will explain how to develop a Xamarin app using Visual studio. If you haven’t read previous articles yet, I recommend you read them all:

    Part 1 | Part 2 | Part 3

    Before starting, please note that Dynamics CRM Online 2015 Update 1 released WebAPI developer preview in CRM 7.1 (Carina) supports OData V4, so in the future you may want to build your application on top of it. We’ll address that in a future blog post.

    Develop Xamarin.iOS application

    For this article we’ll assume you already know what Xamarin is as well as the basics of Xamarin.iOS. For this article I used Visual Studio 2013, but you could also use Xamarin Studio.

    Create a solution and add references

    1. Create new project, and select iOS | iPhone | Single View App (iPhone).

    image

    2. Enter Name and click “OK”. I named it Crm.iOS.

    3. Right click the project in solution explorer and click “Manage NuGet Packages..” to launch the NuGet Package Explorer.

    4. In the NuGet Package explorer, make sure you select nuget.org on the left for the search source, then Search for: Json.NET and install it.

    5. Next, change release category to “Include Prerelease” and search ADAL. Select “Active Directory Authentication Library”, and confirm the version is version 3.3 or higher, then install the package (ADAL v3.3+ has support for Xamarin.iOS).

    image

    6. Once you’ve installed the above components, in the solution explorer pane of Visual Studio, Right-click References and click “Add Reference”.

    7. Select following additional assemblies, then press click “OK”.
    - System.Net
    - System.Net.Http
    - System.Runtime.Serialization
    - System.Xml.Linq

    8. Right click the project and click Add | New Folder. Name it as CRMSDK.

    9. Open browser and go to https://code.msdn.microsoft.com/Mobile-Development-Helper-3213e2e6. Download the sample and extract it all to a known location.

    image

    10. In the solution explorer right click the the CRMSDK Folder in the Visual Studio solution explorer under the project, select Add, Existing Item, select all the .cs files you extracted above except CRMHelper.cs .

    image

    11. Once completed, double click Microsoft.Xrm.Sdk,Samples.cs to open the cs file.

    12. Comment out line 35, and 666-682. There lines are for Windows Store/Phone application and Xamarin does not understand it.

    13. Compile the solution once to see if you don’t get any error message.

    Change UI and add code.

    Next, you update existing UI and code.

    1. Double click to open MainStoryboard.storyboard.

    2. Drag and drop a Button control from Toolbox to UI surface, and change the button text to “Login”. Drag and drop a Text Field as well. Name the Text Field as “txtUserName”.

    image

    3. Double click Login button to generate “TouchUpInside event in controller.

    image

    4. Add following class properties. Change serverUri to your CRM organization Uri. You will replace clientId later.

    private string commonAuthority = "https://login.windows.net/common";
    private string clientId = "9e36414a-af12-4d52-989e-564ea978bdd9";
    private Uri returnUri = new Uri("http://crmxamarin");
    private string serverUri = "https://crm2015training10.crm7.dynamics.com";
    private AuthenticationResult authResult;

    5. Add following using statements at the top of the code.

    using Microsoft.IdentityModel.Clients.ActiveDirectory;
    using Microsoft.Xrm.Sdk.Samples;
    using Microsoft.Crm.Sdk.Messages.Samples;
    using Microsoft.Xrm.Sdk.Query.Samples;
    using System.Threading.Tasks;

    6. Add following method which get AccessToken by using ADAL.

    public async Task Authenticate()
    {
        AuthenticationContext authContext = new AuthenticationContext(commonAuthority);
        if (authContext.TokenCache.ReadItems().Count() > 0)
            authContext = new AuthenticationContext(authContext.TokenCache.ReadItems().First().Authority);
        authResult = await authContext.AcquireTokenAsync(serverUri, clientId, returnUri, new PlatformParameters(this));           
    }

    7. Add following method which get UserName by using CRM Mobile Helper.

    public async Task GetUserName()
    {
        OrganizationDataWebServiceProxy proxy = new OrganizationDataWebServiceProxy();
        proxy.ServiceUrl = serverUri;
        proxy.AccessToken = authResult.AccessToken;

        WhoAmIResponse result = (WhoAmIResponse)await proxy.Execute(new WhoAmIRequest());

        var user = await proxy.Retrieve("systemuser", result.UserId, new ColumnSet("fullname"));

        txtUserName.Text = user["fullname"].ToString();
    }

    8. Update TouchUpInside event like following.

    async partial void UIButton5_TouchUpInside(UIButton sender)
    {
        await Authenticate();
        await GetUserName();
    }

    9. Compile the solution to make sure you got no errors.

    Register Application to Azure AD

    To use OAuth 2.0, you need to register your app, which I explain the details in previous articles.
    To simply the steps, I omit the steps here. If you can register application, replace the ClientId in the code above, otherwise you can use the clientid which registered to my own azure ad.

    Run the application

    Finally, you are able to test the application. Run the application using either device or simulator. I use simulator here.

    1. Select iPhoneSimulator and select any simulator. I selected iPhone 6 iOS 8.1. Press F5 to start.

    image

    2. Once simulator launched and application started, click “Login” button.

    image

    3. SignIn page will be shown. Enter credential to connect to Dynamics CRM.

    4. After you signing in, user name will be displayed to the text field.

    image

    Next Action

    In this article, I only used WhoAmI and Retrieve method. Please try more complex scenario by your self. Xamarin.Android or even Xamarin.Forms works in similar way as it’s C# application. I will demonstrate how to build an application by using WebAPI in the next article.

    References

    ADAL sample for Multi-Platform https://github.com/AzureADSamples/NativeClient-MultiTarget-DotNet

    Ken
    Premier Mission Critical/Premier Field Engineer 
    Microsoft Japan

    LINQPad 4 Driver for Dynamics CRM REST/Web API are available on CodePlex

    $
    0
    0

    I am pleased to announce that we released “LINQPad 4 Drive for Dynamics CRM REST and Web API (Preview)” on CodePlex.

    For REST: https://crmlinqpadrest.codeplex.com/
    For Web API (Preview): https://crmlinqpadwebapi.codeplex.com/

    If you are interested in SOAP endpoint driver, please refer to previous blog.
    LINQPad 4 Driver for Dynamics CRM is available on CodePlex

    What’s LINQPad?

    LINQPad (http://www.linqpad.net/) is a great tool which you can write and execute LINQ query against many data sources, like SQL Server, Oracle or Web Services. In addition to LINQ query support, the tool also supports C#/F#/VB expression, statement block or program, to write and execute the code and code snippet.

    What can you do with CRM Driver?

    By using CRM Driver, you are able to run LINQ queries against Microsoft Dynamics CRM REST/Web API endpoints on the fly. Follow the steps below to try it out!

    Install Drivers to LINQPad

    1. Download and install LINQPad if you don’t have it yet from http://www.linqpad.net/.

    2. Go to REST Driver and Web API Driver and click “DOWNLOADS” tab, then download CRMLinqPadDriverREST.lpx and CRMLinqPadDriverWebAPI.lpx file.

    3. Open LINQPad and click “Add connection” link on top left.

    image

    4. Click “View more drivers…” button at the bottom of the page.

    image

    5. Click “Browse” button in the bottom of the page.

    6. Select downloaded lpx file, then click “Open”.

    7. Click OK.

    image

    8. Do the same for another driver.

    Use the REST Driver

    Firstly, I explain how to use REST driver.

    Create Connection

    1. Select “Dynamics CRM REST Linq Pad Driver” in Choose Data Context and click “Next”

    image

    2. If you want to use your own ClientId, then uncheck “Register to Azure AD automatically” I will explain what it is later in this article. Click “Login to CRM”. If you want to run query against On-Premise server, (including IFD), you can leave the option as it is.

    image

    3. Login to your Organization at login screen.

    image

    4. Then it automatically starts doing its work and generates a DataContext from the selected organization. Wait until it’s done.

    5. Click “Exit” button once loading completed. Then LINQPad starts loading the schema, which takes a bit of time. Wait until you see the schema information on the left pane like below screenshot.

    image

    Write LINQ query and Execute

    1. Firstly, select added connection from “Connection” dropdown on the top right.

    image

    2. Enter following query to query window.

    image

    3. Click “Play” button or press F5 key to execute query. You will see the result in result pane.

    4. Click SQL tab in result pane, where you can find OData query for REST endpoint.

    image

    Use the Web API (Preview) Driver

    Next, Web API Driver. Please note that Web API is still preview and you have to use Dynamics CRM Online organization which 2015 Update 1 is applied and the feature is enabled.

    Enable Web API (Preview)

    1. Login to Dynamics CRM Online and navigate to Settings | Administration | System Settings.

    2. Click “Previews” tab and enabled Web API.

    image

    Create Connection

    1. Open LINQPad and click “Add Connections”. Select “Dynamics CRM Web API Linq Pad Driver” in Choose Data Context and click “Next”

    image

    2. If you want to use your own ClientId, then uncheck “Register to Azure AD automatically” I will explain what it is later in this article. Click “Login to CRM”. Login to the organization where you enabled Web API preview.

    3. Then it automatically starts doing its work and generates a DataContext from the selected organization. Wait until it’s done.

    4. Click “Exit” button once loading completed. Then LinqPad starts loading the schema, which takes a bit of time. Wait until you see the schema information on the left pane like below screenshot.

    image

    Write LINQ query and Execute

    1. Firstly, select added connection from “Connection” dropdown on the top right.

    image

    2. Enter following query to query window.

    image

    3. Click “Play” button or press F5 key to execute query. You will see the result in result pane.

    4. Click SQL tab in result pane, where you can find OData query for Web API endpoint.

    image

    Write Statements and Execute

    1. To try functions, select “C# Statements” from Language and write Query like below.

    image

    2. SQL tab gives you OData query, too.

    image

    3. In addition to simple function, you are able to try more complex statements like below. This sample code creates an account, and create an opportunity by referecing the account as its parent.

    // Create Account record.
    DataServiceCollection<account> accounts = new DataServiceCollection<account>(this);
    account myaccount = new account();
    accounts.Add(myaccount);
    // Specify field values
    myaccount.name = "Test Account";
    // Then call SaveChanges to create it.
    this.SaveChanges(SaveChangesOptions.PostOnlySetProperties);

    // Create Opportunity record.
    DataServiceCollection<opportunity> opportunities = new DataServiceCollection<opportunity>(this);
    opportunity myopportunity = new opportunity();
    opportunities.Add(myopportunity);
    // Specify field values
    myopportunity.name = "Test Opps";
    // Assign the account
    myopportunity.opportunity_customer_accounts = myaccount;

    this.SaveChanges(SaveChangesOptions.PostOnlySetProperties);

    Console.WriteLine("Opportunity Created");

    Azure AD Application Registration

    For authentication, Dynamics CRM Online REST based web service endpoints only support OAuth 2. To use OAuth 2.0, you need to register your application (in this case, LINQPad driver) to Azure AD or AD FS (depending on your deployment), which typically requires you to perform manual work. (See Walkthrough: Register a CRM app with Active Directory for more details). To eliminate this manual work, these drivers have a built-in Azure AD Application Registration feature. If you are interested in how to do this, please see the source code.

    By default, it uses your CRM login credential to register the application. However if the credential does not have enough privilege, you will be prompted to enter another credential. If you do not know about this and other people managing your Azure AD, you can ask them to register your application and get the ClientId. Once you get the ClientId, you can use it when adding the connection. Uncheck “Register to Azure AD” checkbox and enter ClientId manually.

    image

    This tool registers your application as follows. If the same application name already exists, then it reuses existing ClientId.

    image

    If you are using On-Premise Server for REST endpoint, the driver uses Windows Integrated Authentication, so it is skipping application registration part.

    Ken
    Premier Mission Critical/Premier Field Engineer 
    Microsoft Japan

    Dynamics CRM Developers: Build Your Own Mobile Apps for Windows, iOS, and Android Part 5

    $
    0
    0

    In the last article, I said I will explain how to use Web API developer preview. However, I got several questions regarding Xamarin.Forms, so I will introduce how you can build Xamarin.Forms app for Dynamics CRM first in this article.

    I assume you already know what is Xamarin, how to register your application to Azure AD, what is OAuth 2.0, overview of Active Directory Authentication Library (ADAL) etc. Please read previous articles for more detail.

    Part 1 | Part 2 | Part 3 | Part4

    Please note, that Xamarin and ADAL are evolving technologies and released new update often, so the technical details in this article may be incorrect when you read it in the near future. I am using Xamarin 3.11.666 and Visual Studio 2013 Update 4 when I write this article.

    Xamarin.Forms

    Xamarin.Forms is one of Xamarin’s product, which lets you write not only business logic but also UI with XAML like technology once and share across multi-platform. Please refer to following link for more detail.
    http://xamarin.com/forms
    http://developer.xamarin.com/guides/cross-platform/xamarin-forms/

    Prepare a solution

    1. Open Visual Studio, and create new project. and select Mobile Apps | Blank App (Xamarin.Forms Shared).
    The reason I do not use Portable Class Library (PCL) is that ADAL doesn’t support Xamarin.Forms yet, thus need to reference ADAL for each project.

    image

    2. Enter name and click “OK”. I name it CrmXForm.

    3. Windows Phone project is targeted to Windows Phone 8.0 by default. Right Click CrmXForm.WinPhone (Windows Phone 8.0) project and click Properties.
    Select Windows Phone 8.1 from Target. Save the changes.

    image

    4. Right click the project in solution explorer and click “Manage NuGet Packages..” to launch the NuGet Package Explorer. Click Updates in the left pane and update Xamarin.Forms to the latest version.

    5. In the NuGet Package explorer, make sure you select nuget.org on the left for the search source, then Search for: Json.NET and install it.

    image

    6. Next, search “ADAL” and select “Active Directory Authentication Library”. Confirm the version is 2.16 or higher which support Silverlight.
    Click Install and it only shows WinPhone project. Click “OK” to install it.

    image

    image

    7. Then search “HttpClient” and select “Microsoft HTTP Client Libraries”, and click Install. Select CrmXForm.WinPhone project and click “OK”

    image

    image

    8. Next, change release category to “Include Prerelease” and search ADAL. Select “Active Directory Authentication Library”, and confirm the version is version 3.3 or higher which supports Xamarin.iOS, and Xamarin.Android. Click Install and select Droid and iOS projects, then click “OK”

    image

    image

    9. Expand CrmXForm.Droid project and right click and click Add References. Add following references.

    System.Net
    System.Net.Http
    System.Runtime.Serialization

    10. Do the same for CrmXForm.iOS project and add following references.

    System.Net
    System.Net.Http
    System.Runtime.Serialization
    System.Xrm.Linq

    11. Delete unnecessary files from iOS projects. Delete iTunesArtwork files and all files under Resources folder of iOS Project.

    12. Right click CrmXForm.iOS project and click Properties. Change SDK version as desired on iOS Build | General. I selected 8.1 here.

    image

    13. Click iOS Application on the left pane, and select 8.1 for Deployment Target and remove Launch Storyborad. I selected 8.1 here.

    image

    14. Build the solution, and run each project to confirm it works fine at this point.

    Add CRM SDK and Help Files

    Next, add CRM and ADAL related codes.  There are many ways to achieve the same, so please feel free to change code or folder structure if you want to manage them in a different way.

    1. Firstly, add CRMSDK files to the shared project. Right click the CrmXForms Shared project and click Add | New Folder. Name it as CRMSDK.

    2. Open browser and go to https://code.msdn.microsoft.com/Mobile-Development-Helper-3213e2e6. Download the sample and extract it all to a known location.

    image

    3. In the solution explorer right click the the CRMSDK Folder in the Visual Studio solution explorer under the project, select Add, Existing Item, select all the .cs files you extracted above except CRMHelper.cs .

    image

    4. Once completed, double click Microsoft.Xrm.Sdk,Samples.cs to open the cs file.

    5. Comment out line 35, and 666-682. There lines are for Windows Store/Phone application and Xamarin does not understand it.

    6. Next, add CRMSDK wrapper which handles Authentication and error handling when calling SDK methods. Right Click the CrmXForms Shared project and add another folder, and name it as Helper.

    7. Right click the Helper folder and add a class file, name it as OrganizationServiceProxy.cs, which will be wrapper of CRMSDK.

    8. Replace the folder with following code. Use“http://crmxform.local” as redirect Uri for Android and iOS and register the application to Azure AD get obtain ClientId.

    using Microsoft.Crm.Sdk.Messages.Samples;
    using Microsoft.IdentityModel.Clients.ActiveDirectory;
    using Microsoft.Xrm.Sdk.Query.Samples;
    using Microsoft.Xrm.Sdk.Samples;
    using System;
    using System.Threading.Tasks;

    namespace CrmXForm.Helper
    {
        // Inherit from OrganizationDataWebServiceProxy.
        public class OrganizationServiceProxy : OrganizationDataWebServiceProxy
        {
            #region Method     

            public OrganizationServiceProxy()
            {
                ServiceUrl = ServerUri;
            }

            // Wrap SDK methods. This example uses Execute and Retrieve method only.
            public async Task<OrganizationResponse> Execute(OrganizationRequest request)
            {
                // Aquire Token before every call.
                await Authenticate();
                // I omit try/catch error handling to make sample simple.
                return await base.Execute(request);
            }

            public async Task<Entity> Retrieve(string entityName, Guid id, ColumnSet columnSet)
            {
                await Authenticate();
                return await base.Retrieve(entityName, id, columnSet);
            }

            private async Task Authenticate()
            {
                // Make sure AccessToken is valid.
                await GetTokenSilent();

                // Wait until AccessToken assigned
                while (String.IsNullOrEmpty(AccessToken))
                {
                    await System.Threading.Tasks.Task.Delay(10);
                }
            }
           
            #endregion

            #region ADAL

            #region Property

            public AuthenticationContext authContext = null;
           
    #if __ANDROID__
            public Android.App.Activity activity;
    #elif __IOS__
            public UIKit.UIViewController uiViewController;
    #endif

            private string OAuthUrl = "https://login.windows.net/common/oauth2/authorize";
            private string ServerUri = "https://<org>.crm.dynamics.com";
           
            // Register the application to get ClientId.
            private string ClientId = "<your ClientId>";

    #if __ANDROID__ || __IOS__
            private string RedirectUri = "http://crmxform.local";
    #else
            private string RedirectUri = Windows.Security.Authentication.Web.WebAuthenticationBroker.GetCurrentApplicationCallbackUri().ToString();
    #endif             

            #endregion

            #region Method

            private async Task GetTokenSilent()
            {
                // If no authContext, then create it.
                if (authContext == null)
                {
    #if __ANDROID__ || __IOS__
                    authContext = new AuthenticationContext(OAuthUrl);
    #else
                    authContext = AuthenticationContext.CreateAsync(OAuthUrl).GetResults();
    #endif
                }

                AuthenticationResult result = null;

    #if __ANDROID__
                IPlatformParameters parameters = new PlatformParameters(activity);
    #elif __IOS__
                IPlatformParameters parameters = new PlatformParameters(uiViewController);
    #endif

    #if __ANDROID__ || __IOS__
                try
                {
                    result = await authContext.AcquireTokenAsync(ServerUri, ClientId, new Uri(RedirectUri), parameters);
                    StoreToken(result);
                }
                catch (Exception ex)
                {               
                }
    #else
                result = await authContext.AcquireTokenSilentAsync(ServerUri, ClientId);
                if (result.Status == AuthenticationStatus.Success)
                    StoreToken(result);
                else
                    authContext.AcquireTokenAndContinue(ServerUri, ClientId, new Uri(RedirectUri), StoreToken);
                return;
    #endif
            }

            /// <summary>
            /// This mothod called when ADAL obtained AccessToken
            /// </summary>
            /// <param name="result"></param>
            private void StoreToken(AuthenticationResult result)
            {           
                AccessToken = result.AccessToken;
            }

            #endregion

            #endregion
        }
    }

    9. Save the change and add another class file, and name it as CrmXFormHelper.cs. Overwrite the code with following. This is the helper class which application uses.

    using Microsoft.Crm.Sdk.Messages.Samples;
    using Microsoft.Xrm.Sdk.Query.Samples;
    using Microsoft.Xrm.Sdk.Samples;
    using System.Threading.Tasks;
    using Xamarin.Forms;

    namespace CrmXForm.Helper
    {
        static public class CrmXFormHelper
        {
    #if __ANDROID__
            static public Android.App.Activity activity
            {
                set { Proxy.activity = value; }
            }
    #elif __IOS__
            static public UIKit.UIViewController uiViewController
            {
                set { Proxy.uiViewController = value; }
            }
    #endif
            static private OrganizationServiceProxy proxy;
            static public OrganizationServiceProxy Proxy
            {
                get
                {
                    if (proxy == null)
                        proxy = new OrganizationServiceProxy();
                    return proxy;
                }
            }

            static public async Task<string> GetLoginUser()
            {
                WhoAmIResponse result = (WhoAmIResponse)await Proxy.Execute(new WhoAmIRequest());
                Entity user = await Proxy.Retrieve("systemuser", result.UserId, new ColumnSet("fullname"));

                return user["fullname"].ToString();
            }
        }
    }

    Update Project startup files

    1. Now its time to update each Project startup page to pass information for ADAL to Helper code. Expand CrmXForm.Droid project and open MainActivity,cs. Add below using statement.

    using CrmXForm.Helper;
    using Android.Content;
    using Microsoft.IdentityModel.Clients.ActiveDirectory;

    2. Add following line in OnCreate method.

    CrmXFormHelper.activity = this;

    3. Add following method in MainActivity class which will be called after authentication.

    protected override void OnActivityResult(int requestCode, Result resultCode, Intent data)
    {
        base.OnActivityResult(requestCode, resultCode, data);
        // Pass the authentication result to ADAL.
        CrmXFormHelper.Proxy.authContext.SetAuthenticationAgentContinuationEventArgs(requestCode, resultCode, data);
    }

    4. Expand CrmXForm.iOS project and open AppDelegate.cs file. Add below using statement.

    using CrmXForm.Helper;
    using Xamarin.Forms;

    5. Replace inside FinishedLaunching method with following code.

    public override bool FinishedLaunching(UIApplication app, NSDictionary options)
    {           
        global::Xamarin.Forms.Forms.Init();

        var application = new CrmXForm.App();
        window = new UIWindow(UIScreen.MainScreen.Bounds);
        window.RootViewController = application.MainPage.CreateViewController();
        window.MakeKeyAndVisible();
               
        CrmXFormHelper.uiViewController = window.RootViewController;

        LoadApplication(application);
        return true;
    }

    6. Add following code in AppDelegate class.

    UIWindow window;

    7. Expand CrmXForm.WinPhone and expand App.xaml, then open App.xaml.cs file. Add below using statements.

    using Windows.ApplicationModel.Activation;
    using CrmXForm.Helper;

    8. Add following method in App class which will be called after Authentication.

    private async void Application_ContractActivated(object sender, Windows.ApplicationModel.Activation.IActivatedEventArgs e)
    {
        var webAuthenticationBrokerContinuationEventArgs = e as WebAuthenticationBrokerContinuationEventArgs;
        if (webAuthenticationBrokerContinuationEventArgs != null)
        {
            await CrmXFormHelper.Proxy.authContext.ContinueAcquireTokenAsync(webAuthenticationBrokerContinuationEventArgs);
        }
    }

    9. Add following code in InitializePhoneApplication method, which relates above code to ContractActivated event.

    PhoneApplicationService.Current.ContractActivated += Application_ContractActivated;

    10. Double click Package.appxmanifest file and click Capabilities tab. Check Internet (Client & Server).

    image

    Add MainPage

    Finally, lets add a page to the project. As Xamarin.Forms support data binding natively, I am using MVVM model. I am including INotificationPropertyChanged and Relay command in the same file to simply the code, but I recommend to separate those into single files in real application.

    1. Right click the CrmXForms Shared project and click Add | New Folder. Name it as View. Add ViewModel folder too.

    2. Right click ViewModel folder and add a class file, name it as “MainPageViewModel.cs. Replace code with following. This ViewModel will be used by MainPage.xaml which you will add next.

    using CrmXForm.Helper;
    using System;
    using System.ComponentModel;
    using System.Windows.Input;

    namespace CrmXForm.ViewModel
    {
        public class MainPageViewModel : INotifyPropertyChanged
        {
            private string userName;
            public string UserName
            {
                get { return userName; }
                set
                {
                    userName = value;
                    NotifyPropertyChanged();
                }
            }

            public RelayCommand GetUserName
            {
                get
                {
                    return new RelayCommand(async () =>
                    {
                        UserName = await CrmXFormHelper.GetLoginUser();
                    });
                }
            }

            #region INotifyPropertyChanged Members

            public event PropertyChangedEventHandler PropertyChanged;

            // Used to notify Silverlight that a property has changed.
            internal void NotifyPropertyChanged([System.Runtime.CompilerServices.CallerMemberNameAttribute] string propertyName = "")
            {
                if (PropertyChanged != null)
                {
                    PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
                }
            }

            #endregion

            #region RelayCommand

            public class RelayCommand : ICommand
            {
                private readonly Action _execute;
                private readonly Func<bool> _canExecute;

                public event EventHandler CanExecuteChanged;

                public RelayCommand(Action execute)
                    : this(execute, null)
                {
                }

                public RelayCommand(Action execute, Func<bool> canExecute)
                {
                    if (execute == null)
                        throw new ArgumentNullException("execute");
                    _execute = execute;
                    _canExecute = canExecute;
                }

                public bool CanExecute(object parameter)
                {
                    return _canExecute == null ? true : _canExecute();
                }

                public void Execute(object parameter)
                {
                    _execute();
                }

                public void RaiseCanExecuteChanged()
                {
                    var handler = CanExecuteChanged;
                    if (handler != null)
                    {
                        handler(this, EventArgs.Empty);
                    }
                }
            }

            #endregion       
        }
    }

    3. Right click View folder and add “Form Xaml Page”. Name it as MainPage, which will add MainPage.xaml and MainPage.xaml.cs files.

    image

    4. Open MainPage.xaml file and replace Label to Grid like below.

    image

    5. Open MainPage.xaml.cs. Replace the code with following.

    using CrmXForm.ViewModel;
    using Xamarin.Forms;

    namespace CrmXForm.View
    {
        public partial class MainPage : ContentPage
        {
            MainPageViewModel vm = new MainPageViewModel();
            public MainPage ()
            {
                InitializeComponent ();
                this.BindingContext = vm;
            }
        }
    }

    6. Now set the added page to initial page. Open App.cs. Replace the constructor code as following.

    public App ()
    {
        // The root page of your application
        MainPage = new MainPage();
    }

    7. Compile the solution.

    Compile the solution.

    Run the application

    Let’s try Windows Phone first.

    1. Right click CrmXForm.WinPhone project and click “Set as Startup Project”.

    2. Select target and presss F5. I selected “Emulator 8.1 WVGA 4 inch 512MB”.

    3. When the application launched, click the button.

    image

    4. When you prompted, enter user credential and click “Sign In”.

    image

    5. After you signed in wait for a while and the application displays login user’s fullname.

    image

    6. Let’s try iOS next. Right click CrmXForm.iOS project and click “Set as Startup Project”. Select target and press F5. I selected “iPhone 6 iOS 8.1” simulator.

    image

    7. When the application runs, you will see the button below. Click it.

    image

    8. You will be prompted. Enter user credential and click “Sign in”.

    image

    9.Fullname of login user will be displayed.

    image

    10. Do the same for Android, too.

    Xamarin.Forms PCL and WinRT application?

    The reason I used Xamarin.Forms shared project is because ADAL does not support it yet as I explained. In the future, ADAL may support Xamarin.Forms PCL, and it also supports WinRT application in addition to Silverlight. So what is the best choice? It is up to you, as there are several pros and cons to use Shared vs. PCL, and I do not have any recommendation myself.

    What’s Next?

    As I promised in previous article, I will show you how to use Web API developer preview.

    Ken
    Premier Mission Critical/Premier Field Engineer 
    Microsoft Japan

    Manage Dynamics CRM data and settings with PowerShell!

    $
    0
    0

    Hey everyone, I have a new exciting project to share with the community. Kenichiro  and I recently released a scripted PowerShell module (PSM1) called Microsoft.Xrm.Data.Poweshell.  This PowerShell module enables admins to query and manipulate Dynamics CRM Data. It supports On-Prem and Online and primarily targets releases CRM 2013 and greater, however I have been able to connect to CRM 2011 for basic operations.

    So, what can you do with this PowerShell module?

    • Query, Create, Update, and Delete CRM records
    • Execute workflows, change business units, assign/remove roles
    • Review plugin traces (in CRM version 7.1+ and higher) and Mailbox Trace data
    • Review customization solution import results (including the result XML)
    • Import, export, and publish customizations
    • much more!

    You can download the module by following the link, but I’ve also included installation instructions at the bottom of the post: Xrm.Data.Poweshell: PowerShell for Dynamics CRM Organization Data or you can use the short URL of: https://aka.ms/CRMPowerShell

    Why?

    Reason #1: customers, our customers have been asking for this and Ken and I wanted to make management and querying CRM data easier and accessible to everyone. While the XrmTooling Powershell snapin provides a connection and proxy back to CRM, the proxy is a bit difficult to work with and admins usually just want to get work done. To enable this, Ken and I targeted the most common operations admins and developers would want based on feedback we've heard in the field with customers. Additionally, we’ve packaged the tooling DLL with our module meaning you don’t have to register the snapin to connect to CRM when using this module.

    Also, with CRM onprem and online, admins need a standardized way to query data and configure their instances of CRM (no matter where they're hosted). This module will allow you to import it and get right to work, query data, query metadata, get entity attributes, verify record data that isn't easily viewable in CRM and more. We did our best to follow the common patterns for naming like: 'get-crmRecords', 'connect-CrmOnlineDiscovery'. 

    Who should use this?

    The target audience for the module is for IT Admins, CRM Admins, and developers - it's very helpful to verify attribute metadata, get record counts, look at entity metadata, etc. The module provides basic and common functions to allow easy downloading and usage of the module. We also released several samples to illustrate common uses.

    What’s next?

    • We’re looking at listing this in a repository like Chocolatey (https://chocolatey.org/) so you can install it via OneGet  – this is a work in progress and something we haven’t attempted yet – if you have any tips please share! Smile 
    • I hope to try and get a screencast recorded showing some simple uses of the module to help with getting started quickly
    • We will keep adding more functions to the module, at the same time we'll add more sample scripts so that you can simply modify them and and use them immediately. Any feedback is welcome, so please post Questions in the Q&A section here: https://gallery.technet.microsoft.com/scriptcenter/PowerShell-functions-for-16c5be31/view/Discussions#content 
    • AzureAutomation – currently it appears XrmTooling has some dependencies that we believe are not compatible with Azure Automation (at least not without some tweaking).  Ken and I looking into this, we’ll do what we can to make the current version work or try and get something out to work in Azure Automation if at all possible.

    We look forward to your feedback and as always, thanks for reading! 

    Sean McNellis & Kenichiro Nakamura


    @seanmcne
    @pfedynamics | http://www.pfedynamics.com

    --------------------------------------------------------------------------------------------

    PowerShell Module Installation Instructions:

    1. You can download the module here installation instructions are below: Microsoft.Xrm.Data.Poweshell: PowerShell for Dynamics CRM Organization Data

    2. Download the zip file and save it to disk

    3. Right-click the Zip file and press properties 

    4. On the properties page: Check "Unblock" checkbox and click "OK", or simply click "Unblock" the button could look differently depending on the OS.

    5. Extract the zip file and copy "Microsoft.Xrm.Data.PowerShell" folder to one of the following folders:
       • %USERPROFILE%\Documents\WindowsPowerShell\Modules
       • %WINDIR%\System32\WindowsPowerShell\v1.0\Modules 

    The image below shows this module copied to User Profile. If you want all users to have the module accessible on the computer, copy them to System Wide PowerShell module folder instead. If you do not have the folder, you can manually create them.

    6. The module is not signed and you may need to change Execution Policy to load the module. You can do so by executing following command (Please refer to Set-ExecutionPolicy for more information).

    Set-ExecutionPolicy –ExecutionPolicy RemoteSigned –Scope CurrentUser

     

    7. Open PowerShell and run following command to load the module.

    Import-Module Microsoft.Xrm.Data.Powershell

    8. Here is a sample on how to query all accounts from a CRM Online org called “Contoso”

    Import-Module Microsoft.Xrm.Data.Powershell -verbose –force
    $me = Get-Credential
    $myOrg = Get-CrmConnection -Credential $me -DeploymentRegion NorthAmerica –OnlineType Office365 –OrganizationName CONTOSO -verbose
    Get-CrmRecords -conn $myOrg -EntityLogicalName systemuser -Fields *

    #now retrieve all users who have a fullname like ‘Sean%’
    Get-CrmRecords -conn $myOrg -EntityLogicalName systemuser -Fields * -FieldName fullname -FilterOperator like -FilterValue 'Adventure%'

    Performance Tuning with Email Tagging

    $
    0
    0

    One of our customers is adding many new users to Dynamics CRM system almost every month. As the number of CRM users increased, they are starting to see more alerts from their load balancer F5 indicates that IIS is not responding.  After some investigation, it appears the issues are related to requests that have been queued in IIS and are waiting on responses from SQL.  Based on our prior recommendation, they used DynamicsPerf to identify their performance bottleneck.

    Finding Performance Bottleneck

    Performance Analyzer for Microsoft Dynamics is a toolset developed by Premier Field Engineering at Microsoft. The toolset is designed to collect SQL Server Data Management Views (DMVs) and Microsoft Dynamics data into a singular database called DynamicsPerf. This tool helps customers to identify performance issues on Microsoft Dynamics products (CRM, AX, GP, NAV, SL).

    Using DynamicsPerf, they found their most expensive query is related to email tagging:

     

    select

    DISTINCT  top 51 "email0".ModifiedOn as "modifiedon", "email0".MessageId as "messageid", "email0".ActivityId as "activityid",

    "email0".RegardingObjectId as "regardingobjectid", "email0".Subject as "subject", "email0".RegardingObjectIdYomiName as "regardingobjectidyominame",

    "email0".RegardingObjectIdName as "regardingobjectidname", "email0".RegardingObjectTypeCode as "regardingobjecttypecode"

    from

    Email as "email0" join ActivityParty as "activityparty1" on ("email0".ActivityId  =  "activityparty1".ActivityId and (("activityparty1".PartyId = @PartyId0)))

    where

    (( "email0".ModifiedOn >= @ModifiedOn0  and "email0".MessageId is not null))

    order by

    "email0".MessageId asc, "email0".ActivityId asc

     

    Fig 1. Performance statistics

     

    With performance bottleneck identified, what should you do next?

    Enable or Disable Email Tagging

    In CRM 2011 and 2013, email tagging is enabled by default. However, some customers may not need email tagged to be turned on. It is important to review your environment and see if you really need to have email tagging enabled. There are two scenarios that enabling email tagging is useful. If they don’t apply to your environment, then consider to turn off email tagging to improve performance.

    So what are the two scenarios? Our colleague, Aaron Richards, provided great information in his article--CRM E-mail Tracking: Part 3- Tagging Deep Dive:

    1. When the user record (Settings| Administration| Users) is set to use the Email Router. When using the Email Router for incoming and outgoing emails, the CRM for Outlook client cannot tell whether or not the emails should be tracked, as they are routed through the Email Router for tracking instead. Since the tagging process's main goal is to retrieve changes to emails from the CRM Server and bring them to the CRM for Outlook client, tagging will see that these emails have been added to or changed in CRM and that they should be tracked when requesting records from the CRM Server and it will then pull down these change to the CRM for Outlook client to show these emails as tracked.

    2. The second scenario is where the System Settings (Settings| Administration | System Settings) "Track e-mails sent between CRM users as two activities" is not marked. If two CRM users are included on an email, each user has the option to track this into CRM. Now, if User1 tracks this to a specific record (Record A), the Set Regarding record will then be updated on the CRM Server for that email. However, if User2 tracks this email from their CRM for Outlook client and sets the regarding to a different record in CRM (Record B), this will update the Set Regarding for the same email record on the CRM Server. If tagging is enabled on User1's CRM for Outlook client, this set regarding change will roll down to User1's email in their CRM for Outlook client and they will now see this Set Regarding to Record B.

    For the first scenario, it mentioned Email Router for Incoming and Outgoing emails. If you are using server side sync for emails, your tracked emails should show as tracked with email tagging off. So if a user sends an email from within CRM it would show as tracked even if you turned off email tagging.

    After reviewed Aaron Richards’ article and their environment, our customer decided that they are safe to disable email tagging. So they are planning to start to implement this with a small group of users, then roll out to all CRM users.

    Client Side Change

    Our customer wondered how to make this change for their users. Email tagging setting is determined by client side registry keys. It is not a server side setting. So they will need to roll this out to their CRM users via Group Policy. This applied to CRM 2011 and 2013. Again, you can find more detailed information from Aaron Richards’ article--CRM E-mail Tracking: Part 3- Tagging Deep Dive.

    Some customers are asking why not make email tagged disabled by default? That is being considered as an enhancement for future release.

    Helpful Resources

    CRM E-mail Tracking: Part 3- Tagging Deep Dive

    Slow performance when you use the Microsoft Dynamics CRM 2011 client for Outlook

    Dynamics CRM Outlook Client Performance Troubleshooting and Optimizations Guide

    Hope this article is helpful. Thanks everyone!

    Andy


    Viewing all 458 articles
    Browse latest View live


    <script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>