With the release of CRM 2016 we gained access to the new and improved Interactive Service Hub, designed by Microsoft to replace the old knowledgebase functionality of previous versions, as well as to provide a host of new features for CRM users who work primarily in service.
Part of the new knowledge article functionality is the ability to relate one article to another – for example, you might have an article called ‘Troubleshooting Keyboard Problems’ and relate it to an article called ‘Fixing a Stuck Key’. This is a fairly common and useful tool in such knowledge systems.
Another new feature is the ability to create new versions of an article without modifying the old ones by using major and minor versioning. Your keyboard troubleshooting article can start at version 0.0 and iterate through 0.1, 0.2, 1.0, 1.1, etc., as time goes by and more adjustments are made. This makes it easier to manage changes, so you can maintain a full history of an article’s changes rather than having to wonder exactly when you added the paragraph about mechanical keyboards.
However, let’s think about the ability to relate articles to each other: if version 0.1 has a related article and you update it to version 0.2 what should happen? Presumably you want the same related article to follow you through all versions instead of having to relate each article every time you make an update. This is the assumption that Dynamics makes, and it has a system in place for this in the background.
Whenever you relate one knowledge article to another, CRM creates two Connection records in the background (not an N:N relationship, as you might expect) and it sets the roles to Primary Article and Related Article. Interestingly, the relationship is one-way due to the limitations of Connections, meaning that if you relate Article A to Article B then Article B won’t automatically be related to Article A. If you want to create the full, two-way relationship you need to go to Article B as well and relate it back to Article A. Furthermore, the Connections are actually created between the root articles – non-versioned copies that Dynamics keeps separate just for this kind of thing.
So what if you want to find related articles using a C# QueryExpression? Once we know how it works in the background, the queries themselves aren’t too hard. Here’s one that finds all related articles in the system:
Or a query that finds related articles for a given article:
I hope this article might save you a bit of time if you ever have to deal with related articles in the Interactive Service Hub.