RelationshipsExtended 12.29.0

There is a newer version of this package available.
See the version list below for details.
dotnet add package RelationshipsExtended --version 12.29.0                
NuGet\Install-Package RelationshipsExtended -Version 12.29.0                
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="RelationshipsExtended" Version="12.29.0" />                
For projects that support PackageReference, copy this XML node into the project file to reference the package.
paket add RelationshipsExtended --version 12.29.0                
#r "nuget: RelationshipsExtended, 12.29.0"                
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
// Install RelationshipsExtended as a Cake Addin
#addin nuget:?package=RelationshipsExtended&version=12.29.0

// Install RelationshipsExtended as a Cake Tool
#tool nuget:?package=RelationshipsExtended&version=12.29.0                

Bug Fixes:

  • Fixed Add Related Tree bug
  • Added logic to properly render Staging task for 'next' environment in chained staging setups (ex dev → staging → live)
  • Fixed some of the logic to better handle if SiteContext is missing for License Checking
  • Updated to Security Hotfix (which affected Staging)

Relationships Extended for Kentico CMS Documentation

Full Documentation at http://devtrev.com/Resources/Relationships-Extended

Must use on Kentico SP (12.29.0) and above

Helper Methods

The RelationshipsExtended module comes with a RelHelper class which provides helper methods for leveraging various features of the RelationshipsExtended.

Where Condition Generators

In some cases (such as categorization) often the bound relationships are meant as a means of tagging and filtering objects. For example, you may have Regions on a Banner and want to show only Banners in the current user's region or regions. In SQL the where condition or join can be tedious. You can leverage the following methods to generate the Where Conditions for you.

Each of these Where Condition methods features a couple options:

  1. Automatic Conversion of Code Name, GUID, or IDs passed to it into ID lookups to optimize performance in queries.
  2. Multiple Condition Types: (Matching Any of the items, All of the items, or none of the items passed)
  3. Automatic "1=1" if no filter objects are passed to it or some misconfiguration occurs, so it will not break your where condition.
  4. Each of these also comes with a Macro version through the RelHelper macro namespace.

These methods are:

  • GetDocumentCategoryWhere (For Document Categories)
  • GetNodeCategoryWhere (For Node Categories used with the CMS.TreeNode class that comes with this module)
  • GetBindingCategoryWhere (For Object to Category bindings)
  • GetBindingWhere (For any Object to Object binding)

Node-Binding Staging Task Handlers

Unlike normal Object to Object Binding classes, where you can simply set the SynchronizationSetting to TouchParent, Node to Object binding is trickier and requires a lot of manual processing if you wish to have a Node's update task contain all its related items.

But default Related Pages are already handled by Kentico, and Node Categories using the CMS.TreeNode that comes with the relationships extended also automatically are handled by my code. Any additional or custom classes need to be manually handled.

I have reduced all that complex logic into a couple lines of code thanks to some helper methods that I have created. I would refer to the Demo File's DemoInitializationModule.cs to see how each of them work and how to leverage them.

  • HandleNodeBindingInsertUpdateDeleteEvent (Handles triggering the Document Update with some magic to ensure only about 1 document update is ran even if you bind a large quantity of objects)
  • UpdateTaskDataWithNodeBinding (handles attaching the Bound objects to the Document Update's Task data so it can be processed)
  • NewBoundObjectIDs (Used in the Staging Task Processing to convert the old object IDs into the new ones on the new environment, returning all the IDs that the node should be bound to)
  • NewOrderedBoundObjectIDs (For Ordered Node Bindings, used in the Staging Task Processing to convert the old object IDs into the new ones on the new environment, returning all the IDs in order)

If you decide to not Bind the Node-Binding objects to the Node itself, there is the SetBetterBindingTaskTitle that can help convert the less-than-readable normal StagingTask into a normal one. This is used on the StagingTask.LogTask.Before hook.

CMS.TreeCategory and Node Categories

Another feature is a new class, CMS.TreeNode. This is not a Kentico created class, although I am sharing the CMS namespace as if Kentico ever did create a Tree Category, this wouldn't be needed anymore. This class operates the same as CMS.DocumentCategory, except it's attached to the Node instead of the Document, allowing you to use Categories without fear of things becoming out of sync with different localized versions of the Documents.

There is also a new UI when you edit a Page. In Properties on the page, you'll see Node Categories next to Categories, this allows you to assign any Node-category just as you would a Document category.

Advanced Category Selector (RE) and Advanced Many to Many Selector (RE)

The Advanced Category Selector (RE) form control and Advanced Many to Many selector (RE) form controls are both included with this module. The Advanced Category Selector also has a "Node Category" Save mode added which automatically integrates with the CMS.TreeCategory of the RelationshipsExtended. The Advanced Many to Many selector can mimic the functionality of the Edit Bindings (Tree+Order Support) only in that it can handle Object to Object bindings and Node to Object bindings, however it does not support ordering through the control, you will need to leverage the Edit Bindings (Tree+Order Support) for that.

The Related Pages (RE) form control is also included with this module. This allows you to mimic the edit relationships functionality on a page form and provides most of the same functionality (ability to select an Adhoc or Normal Relationship Name, Bind on Primary Nodes, Restrain what pages can be selected through Page Type and Left Side/Right Side Macros). This form control does have some limitations however when compared to the Edit Relationships UI template in that it uses Kentico's default page selection instead of the Uni Selector/Tree Selector.

Relationship Names Extended

This new User Interface (under Configuration) simply allows for the creation of AdHoc (sortable) relationship names, as by default you cannot. This is used then in conjunction with the Edit Relationship Template discussed in the next section.

User Interfaces Templates

A large part of the functionality given in the RelationshipsExtended is a handful of User interfaces which allow you to control the various binding scenarios. We'll go over them and explain some of what they do and how to use them. Remember, I won't cover every property, most are well explained when you hover over them.

Edit Relationship

This user interface allows you to manage Page Relationships (including Adhoc ones) with much greater control. The default Kentico related pages gives no control over what Page Types you can relate (you could related a Folder page for the Relationship "Banners" for example), it was clunky in its usage (you had to add pages one at a time) and it didn't allow Adhoc relationships (orderable ones), so you couldn't have order to the objects without making it part of a Page Type (which can get messy if multiple page types may need the same relationship, such as Banners or Quick Links).

The Edit Relationship also automatically gives a "read only" view to the "Right Side" only page types. For example, if a Banner is a Right-side only on the Relationship "Banners" then if you view the Banners UI on a Banner page, it will show you all the pages that use that banner.

Edit Categories

Those of you who have used the Advanced Category Selector already pretty much know what this is all about. The Edit Categories is the IU version of that tool. With it you can leverage Kentico categories in any way you wish, with much more control than you get with the standard Kentico category selector (which shows the entire category tree)

Edit Bindings (Tree+Order Support)

The normal Edit bindings UI page template is great for Object to Object, non-ordered bindings. However, it lacked two features: The ability to support Node binding (it couldn't figure out that the NodeID was the ParentObjectID), and it didn't support Orderable Bindings. This of course, corrects that.

Product Compatible and additional computed target framework versions.
.NET Framework net is compatible. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

This package has no dependencies.

NuGet packages

This package is not used by any NuGet packages.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last updated
13.0.11 401 1/15/2024
13.0.10 149 1/15/2024 13.0.10 is deprecated because it has critical bugs.
13.0.9 1,515 5/5/2023 13.0.9 is deprecated because it has critical bugs.
13.0.8 231 5/5/2023 13.0.8 is deprecated because it has critical bugs.
13.0.7 209 5/3/2023 13.0.7 is deprecated because it has critical bugs.
13.0.6 297 4/21/2023 13.0.6 is deprecated because it has critical bugs.
13.0.5 508 1/25/2023 13.0.5 is deprecated because it has critical bugs.
13.0.4 452 12/19/2022 13.0.4 is deprecated because it has critical bugs.
13.0.3 8,632 11/12/2020 13.0.3 is deprecated because it has critical bugs.
13.0.2 619 11/12/2020 13.0.2 is deprecated because it has critical bugs.
13.0.1 478 11/12/2020 13.0.1 is deprecated because it has critical bugs.
13.0.0 512 11/11/2020 13.0.0 is deprecated because it has critical bugs.
12.29.8 646 4/28/2021
12.29.6 497 11/30/2020
12.29.5 917 9/4/2020
12.29.4 520 8/18/2020
12.29.3 587 7/20/2020
12.29.2 3,476 9/12/2019
12.29.1 618 8/28/2019
12.29.0 647 7/24/2019
12.0.14 874 4/12/2019
12.0.12 629 4/11/2019
12.0.11 666 4/9/2019
12.0.10 659 4/8/2019
12.0.9 651 4/1/2019
12.0.8 631 3/28/2019
11.48.8 424 4/28/2021
11.48.6 512 9/4/2020
11.48.5 518 7/20/2020
11.48.4 552 10/31/2019
11.48.2 607 9/12/2019
11.48.1 614 8/28/2019
11.48.0 585 7/24/2019
11.0.14 646 4/12/2019
11.0.12 676 4/11/2019
11.0.10 650 4/8/2019
11.0.9 647 4/1/2019
11.0.8 629 3/28/2019
10.52.8 389 4/28/2021
10.52.4 528 9/4/2020
10.52.3 524 7/20/2020
10.52.2 577 9/12/2019
10.52.1 573 8/28/2019
10.52.0 598 7/24/2019
10.0.14 644 4/12/2019
10.0.12 651 4/11/2019
10.0.10 644 4/8/2019
10.0.9 665 4/1/2019
10.0.8 632 3/28/2019

Fixed IsStagingSite() issues, added fix for tasks that are generated for another server that originate from another server.