Showing posts with label Dynamics CRM 2013. Show all posts
Showing posts with label Dynamics CRM 2013. Show all posts

Sunday, October 04, 2015

Rumours of Yammer's terminal health

Just read a very interesting post by Wictor Wilén, a SharePoint MVP here in Sweden. He strongly argues that Yammer is planned for termination by Microsoft and lists several, very good reasons for this. Do read it.

 
Is Yammer breaking up?
Why is this important for us working with Dynamics CRM? As you might know there is a built-in integration between Dynamics CRM and Yammer, where Yammer can be used to replace the Activity Feeds. This gives the organization using the Dynamics CRM system increased use of the feed functionality, as most of the features of Yammer Enterprise can be used directly from within CRM. It will create a thread for each record. For more information on how to set it up and how it works, read this Tech Net article: https://technet.microsoft.com/library/dn850385.aspx.

Recently, in CRM 2015 Spring Update (version 7.1) it is also possible to integrate CRM to Office Groups. If you read Wictor's Post, you will note his referal to how this most likely is the informal successor to Yammer internally within Microsoft. The Office Groups integration makes the collaboration Picture in Dynamics CRM even more complicated as there now are Three different ways of collaborating;

- Activity Feeds
- Yammer
- Office Groups

However, if Yammer really is to be deprecated, then this Picture clears a bit.

Another interesting fact is that there has been nothing done to the Yammer integration in CRM for several versions. It was released for CRM 2013 and it still has a lot of basic features missing, like if it is enabled for an organization, it cannot be removed. (https://msdn.microsoft.com/en-us/library/jj945277(v=crm.6).aspx)

If Yammer was to be officially terminated, do note that Wictor (and I in this post) are just speculating, migrating the existing data from Yammer to ActivityFeeds or OfficeGroups is also a non-trivial issue. As Wictor mentions briefly in his post, the Yammer API:s have some areas which can be improved.

So, based on this. I would not advice any current CRM system owners to enable the Yammer integration unless Microsoft starts investing in Yammer and/or the CRM-Yammer integration.

I would also be more than happy to have a discussion on this subject in the comments section below.

Gustaf Westerlund
MVP, Founder and CTO at CRM-konsulterna AB
www.crmkonsulterna.se

Friday, August 14, 2015

Queue question and the difference between community work and putting food on the table

I received a question per email today and as I Work as a Consultant, Selling my time by the hour, while at the same time sharing my knowledge and experience on this blog and in Other places, I thought I might share my general view on how I separate the Community Work from the Work that puts food on my table.

I am a strong believer in the notion that we need to share knowledge with each other to be able to all grow and be stronger. This is why I started the blog, started CRM User Group Sweden, run Techie After Work (with Allan Varcoe and Peter Björkmarker), present at Conferences where I do not get paid for speaking. If we all do this in the Dynamics CRM Community, it will grow large, new people will quickly learn from the more experienced, and our CRM system, will prosper to all our benefit.

We all have to put food on the table
But, I also have to put food on the table, so when people ask me to help them by contacting me by
email or phone, they do actual ask me as a Consultant and I can and will charge for the time I help out. Typically an agreement, including NDA, is signed so that I can help out in a more direct manner, which of course, is different than somebody asking something general in the comment on a blog post.

So, if you have a question to me, regarding a post, I recommend leaving a comment. Sadly, there are a lot of comment spammers out there, looking for some links to their sites, why I need to moderate all comments, as I respect you as readers and I do not want to waste your time with crap comments and irrelevant links to companies trying to sell training or otherwise.

So, on to the question I got, as it was clearly directed as a comment, will answer it in the form of a blog post instead of an email reply, so that others in the Community can also benefit from it.

"I was reading your blog post on sending emails from a queue (http://gustafwesterlund.blogspot.com/2013/02/sending-emails-from-queue-with-email.html) and had a question.  I’m using CRM 2015 and trying to set up a queue for sending and I was wondering if the generic address needs to point to a mailbox on the server or if it can be a distribution list or mail-enabled public folder.  I’ve tried setting up an existing distribution list address for the email address, but I get errors because it can’t log on to a mailbox, so I didn’t know if it was possible or if there’s something else I need to do instead."

It is a good question. It is not obvious why you cannot use one type of email address or Another, but if you refer to the implementation guide (yes, I know, it is a very large document(s) and hard to navigate, but try to find your way around it) you will see that it says that the email address that you indicate in a queue has to be a user mailbox. It cannot be anything else. There are several different ways of logging in to this, the simplest is to set the credentials in the queue, but this will require you to change the password in the queue every time you change it in the AD. I wrote the Synchronization overview chapter in the CRM Field Guide (http://gustafwesterlund.blogspot.se/2015/04/the-crm-2013-field-guide-is-out.html) and I would strongly recommend that you read this or the similar parts in the implementation guide for more detailed information.

Gustaf Westerlund
MVP, Founder and CTO at CRM-konsulterna AB
www.crmkonsulterna.se

Tuesday, April 21, 2015

The CRM 2013 Field Guide is out

After a lot of work a huge amount of MVP:s have now managed to achieve the second CRM Field Guide. I have this time had the honor of being among the authors of this very comprehensive title which goes into details of many areas that very few other books do. At almost 1000 pages it is something that you just have to have with you if you are a CRM expert, or claiming to be one. As Bob Stutz, said in his keynote here at eXtreme CRM today, it is impossible to keep all this information in the head, so we have helped you out, we have tried to destill it poured it into this book.

The book is for CRM 2013, which might seem strange, now that CRM 2015 Update 1 is about to be released but keeping up with Microsoft's cadance is not easy. The absolut majority of the things in the book are still true, yes, there might be some new features in CRM 2015 that can be revised in the book, but I guarantee you that if you know the book by heart, you will be one of the best experts in the worlds on Dynamics CRM, even CRM 2015.

And from our perspectives as authors, most of us, like me, are CTO:s, Techical directors, CEO:s, or senior consultants and developers, we take a lot of our time to write this book, as we partly like to share our knowledge, and partly, I guess to be totally truthful, to feed our pride a bit :). However, the CRM market for books is very limited, and the time frame a book is current is very short, making piles and piles of money off a CRM book is almost impossible, it is probably better to go about your daily job. I would hence say that the best way that you can encourage us to write the next version of this book, is to tell us, the people who made it what you thought of it. What is good, what can be made better? Tell us what is useful for you when you are working with a customer, tell us what you lack. The more people showing interest in what we do, the more we feel inclined to make the next version.

To buy your copy, click on the image below. I have 25 discount vouchers, to my readers, so the first 25 people can use the code "Gustaf2013".



Gustaf Westerlund
MVP, Founder and CTO at CRM-konsulterna AB
www.crmkonsulterna.se

Saturday, September 13, 2014

Resco javascript development - be careful of variable names

We are all new to stuff sometimes and I am currently quite new to Resco.NET and the JavaScript API it has. There is quite a lot of information and examples on Resco's site regarding this but you know how it is when you get going, you're always looking for something that just isn't there. Today I thought I was missing some vital part of how to parse the data, turned out I was addressing the fields incorrectly, so I thought I'd share it with you in case you ever got into the same spot.

Well, my current Customer likes the Resco mobile client a lot. They like the ability it has for configuration and the fact that it is so configurable and even has API:s allowing us to make custom webpages for them that they can take offline, as Resco does support full offline.

Back to my problem, I was trying to show some data from the account entity on the html-page and as I had previously tried this, I had no problems with the name field. However, when I tried retrieving a field that we had created, let's call it "Type" I looked in the list of fields in Woodford as I thought this was their view of the fields and hence how I was to address it. The name it showed was the weird REST-endpoint name with Camel-case "crmk_Type", but I didn't Think to much about this and used it in my code. The result was that I just got "undefined" as the returned value from the Resco JavaScript Bridge. It took me quite some time and a very helpful support guy at Resco before I opened the form editor in Resco and noticed that the field name set there was the normal name, used in the database/soap webservice, "crmk_type". Upon noticing this, I tried the lowercase version and it worked like a charm.

My conclusion is hence that the field names that are to be used in the Resco JavaScript bridge are the lowercase field names, not the Camel case versions, despite the fact that these are the once that you see in the Field list in Woodford. Also, make sure the field that you are addressing has been included in the the field list. This might be changed in the future. If so, I hope to be able to write an update on the subject.

Here is a link to the Support page at Resco.NET where you can download the bridge file and also at the far bottom, go to the reference pages for the Bridge. http://www.resco.net/mobilecrm/support.aspx

Gustaf Westerlund
MVP, CEO and owner at CRM-konsulterna AB
www.crmkonsulterna.se

Thursday, July 03, 2014

Collation and MVP Renewal

When working with CRM systems in non-English countries you often need to take certain aspects into consideration that might have very dire consequences if set incorrectly, one of these is the database collation.

The collation of the database is simplified how it orders characters. For those of you not used to working with multi-language installation with odd characters this might not be something you have considered. As I am Swedish let me give you an example. The Swedish alphabet looks as follows:

abcdefghijklmnopqrstuvwxyzåäö

However using the collation that is default when using English as language in an on premise installation, which is "Latin1_General_CI_AI" (CI= Case Insensitive, AI = Accent Insensitive) the Swedish alphabet would be sorted as follows:

aäåbcdefghijklmnoöpqrstuvwxyz

This is why when installing an organization that is to be used in Sweden, despite the fact that you might have chose to have English as base language, that you need to select the collation that sorts the Swedish characters correctly which for CRM is "Finnish_Swedish_CI_AS".

On-premise setup of CRM - ability to select Finnish_Swedish_CI_AS collation
despite using English as base language

When setting up an organization in CRM online, you cannot chose the collation explicitly which is regrettable and I hope there will be some advanced setting in the future which will allow for this when provisioning new organizations. Check out what happened when I provisioned a new organization in English indicating that I was in Sweden.

The first pick list is for country - I selected "Sweden", the last is for language and I changed from "Swedish" to "English", which were the two only options.
After going through all the three steps you are shown a last instance configuration step.
In the instance configuration screen you can select the base language but there is no selector for collation. I selected "Engelska", which if you have any imagination, means "English".
After, a few seconds, yes, the new installation process is great and really fast, my org is up and running and I jump in to contacts and create to contact and check out the sorting. Any bets?
As you can see selecting English language will also implicitly select Latin1_General _CI_AI as collation which is incorrect from a Swedish perspective, I would have liked to see Östen Svensson at the end of the list, not sorted as "O". 

Collations are integral to the configuration of the SQL database and there are many features of the database like ORDER BY and indexes that depend on the collation why changing collation of a database is very very tricky. It is actually so tricky that it is not supported if you manage to do it with an on-premise, which I have heard rumours of that some people have managed to do. On an online you cannot request it. You will be recommended to migrate the data from the old org to the new.

So let's hope Microsoft will enhance the provisioning experience for CRM Online so that it includes a selector for collation. In the meantime, if you need a special setup, like the one I tried to set up above, English with Finnish_Swedish_CI_AS collation on CRM online I would suggest contacting Microsoft Online support to get their assistance in setting up the instance correctly. Hopefully they can assist in this.

And on another note, I was awarded the MVP award for the third year! A great honour and this very article is dedicated to the very award as two of my fellow MVP:s Shan McArthur and Niel Benson provided with background information to this article. I extend to you a humble thanks!

Gustaf Westerlund
MVP, CEO and owner at CRM-konsulterna AB
www.crmkonsulterna.se

Wednesday, April 30, 2014

Resco javascript Fetch all account example

I have recently been working on a Proof-of-concept for a customer with the Resco.net mobile platform. It is the first time I have been working deeply with it and I really like it. The woodford customization tool is very powerful and easy to use. It also allows customizers to add custom components such as offline html and js-components that can be used to extend the built in functionality where the standard forms do not meet the customer’s requirements.

In this case my customer wanted me to prove that it was possible to create an overview screen for an account showing lots of related information on a single screen. As Resco does not intrinsically support subgrids, like Microsoft Dynamics CRM does, you have to create this with a custom html which loads this data from the offline Resco storage. In theory this shouldn’t be too hard. It proved to be a bit more of a challenge, especially since the Resco Woodford manual contained some errors why I thought it might be a good idea to publish an example of how a complete code example of how to fetch a list of accounts wrapped in a working html-page that can just be copy-pasted into a file and tested out. This was one of the issues I had as just getting a simple base-line to work from was quite a lot of work.

So, without any more bells and whistles, here is the code:

<!DOCTYPE html>
<html>
<head>
    <title>Account List</title>
<script type="text/javascript" src="JSBridge.js"></script>
<script type="text/javascript">

function writeError(text) {
var error = document.getElementById("errortext");
error.innerHTML = error.innerHTML + "
"
+ text;
}

function callbackAccountsLoaded(res)
{
    writeError("In callbackAccountsLoaded")
    writeError(res);
}
 
function callbackAccountsFailure(res)
{
    writeError("callbackAccountsFailure")
    writeError(res);
}

function onAccountLoad() {
    try {
        writeError("Start!");

        var account = new MobileCRM.FetchXml.Entity("account");
        account.addAttribute("name");
        account.filter = new MobileCRM.FetchXml.Filter();
        account.filter.where("statuscode", "eq", 1); // which have “Active” status

        var fetch = new MobileCRM.FetchXml.Fetch(account);
        writeError("Sending");
        fetch.execute("Array", function (res) { callbackAccountsLoaded(res); }, function (err) { callbackAccountsFailure(err); }, null);
    }
    catch (e)
    {
        errortext("Error: " + e.message);
    }
}
</script>
</head>
<body onload="onAccountLoad();">
<div style="height:300px;" id="errortext"></div>
</body>
</html>

Some of the important points here are:

1.      account.filter.where needs to be used instead of using account.where directly as indicated in the example in the Woodford manual. It also needs to be instantiated with the “MobileCRM.FetchXml.Filter();”

2.      The fetch.execute is referencing two callback functions, one for success and one for failure. Make sure these references exist and have the correct number of arguments.

3.      I have not found any decent way of debugging javascripts within Resco. I would be more than happy to be corrected here. Using alerts will not work on all platforms (Resco indicates alerts do not work on Windows 8 RT for instance). Hence I have created the errortext-method which outputs text in a log-file manner to a div at the end. Make sure that the height is enough.

4.      To be able to load information on the currently edited object, if the iFrame is shown in the context of an account for instance, then MobileCRM.UI.EntityForm.requestObject() has to be used.

5.      The first parameter of fetch.execute indicates how the result is to be formatted. In this example I have chosen “Array”, but there are other choices like “JSON” and “XML” as well. Please refer to the Woodford manual for more information on this.

6.      Do try to use try-catch around a lot of this as any errors will otherwise just not show when run. If there is an error, you can display the message and at least get an idea of what was wrong.

7.      When developing, I like to use Windows 8/8.1 and maybe a CRM Online/IFD environment as that will allow me to install the Windows 8 version of the Resco CRM to try it out. The different platform clients for Resco are 95% identical, some UI differences and I have seen some other differences as well, but in general, it will speed up development a lot and you will only have to do the final development tests on the iPad/Android device.

If I get a lot of interest in this, I will publish more on this subject. As mentioned earlier, I havn’t found that much community content on Resco, the mobile client I currently feel is the premier choice, as the Microsoft Mobile client is a bit simpler in its design, features and also customizabilities.


Gustaf Westerlund
MVP, CEO and owner at CRM-konsulterna AB
www.crmkonsulterna.se

Tuesday, April 22, 2014

Server side Sync Trouble shooting

I have been working with a Proof-of-concept for the lates couple of Days and have been setting up the server side sync for a CRM on-premise system. First of all I would just like to share that it is a really nice new feature, I really like the fact that we now can have an option to not have to use the email router. With the new spring release, it will also be available for CRM Online, but only CRM-Online to Exchange Online (O365) not hybrid Environments (ex. CRM Online to Exchange on-premise or vice versa).

However, I did run into some issues as none of the emails that I sent to the email account connected to the queue showed up in the queue.

The Server Sync is handled by the MSCRMAsyncService and if you switch on logging in CRM (which can be done using adding the registry key "TraceEnabled" and setting it to 1 or using Power Shell)  you will get the logging of the server sync in the async tracing loggs. It turned out that I had a missmatch in email addresses which CRM apparently didn't like and you can only have one email address for a queue, but it was easily fixed once I knew the problem. I just wonder how I would troubleshoot this if I got this in CRM Online... hopefully MSFT will be adding additional logging to the server sync functionality.

Gustaf Westerlund
MVP, CEO and owner at CRM-konsulterna AB
www.crmkonsulterna.se