How Content Type Inheritance works
I am sure by now you are aware that I am a huge fan of metadata. You can start taking advantage of metadata by simply starting to create columns at a list or library level. However, metadata really shines when you start getting into Content Types. Content Types allow you and your organization to really standardize metadata across sites and the whole tenant. Today, I want to explain another capability related to content types: the Content Type Inheritance. I will explain how it works, and a few use cases for using that capability.
What is a Content Type?
If you are new to Content Type terminology, I suggest you check out this post, where I explain what a Content Type is and how it works. In a nutshell, Content Type is a collection of columns/metadata for a particular type of content (i.e. invoice).
What is Content Type Inheritance?
When you create a Content Type, you must specify the parent for the Content Type. In most cases, you just choose Document Content Type, which just contains File Name and Title columns, essentially, it is a blank content type without any custom metadata. So when you create your own Content Type, you inherit two default columns: File Name and Title. File Name Column is mandatory, since this is what displays the file name, and Title could be hidden if not necessary. And then, of course, you also add your own custom columns! So the end result for your custom Content Type is File Name Column + your custom columns + Title Column (if need be).
However, we do not necessarily need to choose the default Document Content Type. We can choose another Content Type, perhaps even a custom one we have already created previously. The end result would be that the Child Content Type we are creating will inherit all metadata columns from the parent content type as well. So, in the end, the Child Content Type will contain columns created for it + columns that already exist with the parent content type(s)!
Use Case for Content Type Inheritance
Perhaps before I explain how to set up inheritance between content types, it first makes sense to provide a real-life use case for you.
At the Tenant level, within the Content Type Gallery, the organization provisioned a Content Type called Invoice. That Content Type already contains the following columns:
- Invoice Amount (Currency Column Type)
- Invoice Due Date (Date Column Type)
- Client Name (Managed Metadata Column Type)
- Date Paid (Date Column Type)
The Invoice Content Type is pushed via the Content Type Gallery to all sites within the tenant. This way, the organization has a common way for the Site Owners to organize and tag invoices within their departments. As a Site Owner, you would like to use this Content Type, but you also would like to tag invoices with 2 additional columns:
- Person Responsible (Person Column Type)
- Invoice Status (Choice Column Type)
So what you would need to do is create a Content Type at the Site level for your department (i.e., Engineering Invoice), and use the tenant-wide Content Type as Parent Content Type. This will get you the initial 4 columns the company wants for all invoices. Then, you add the 2 department site columns to the Child Content Type, and that will get you the extra columns you need as well! I hope this makes sense.
How to set up Content Type Inheritance
So, let’s go through all the steps to set up the parent-child content type.
Step 1: Make sure the Tenant Content Type is available on your site
Now, the parent content type does not necessarily need to be configured at the Content Type Gallery level – it can also be created at the site itself as well. However, for this exercise, I want to follow the use case I mentioned above, where the Invoice Content Type was created and published to all the sites via the Content Type Gallery.
I have previously explained how to create and publish a Content Type to all the sites. Check out this post for instructions. So, using those instructions, create a Parent Content Type with your tenant-wide metadata columns, as stated in the article above. In my case, it is a Content Type Invoice with 4 columns:
- Invoice Amount (Currency Column Type)
- Invoice Due Date (Date Column Type)
- Client Name (Managed Metadata Column Type)
- Date Paid (Date Column Type)
Here is how it looks when it is all set and done.
Step 2: Create Department Content Type at a Site Level
Following my example above, let’s go ahead and create the Site-level (Child) content type now.
- From your SharePoint site, click Gear Icon > Site Information
- Click View all site settings
- Under Web Designer Galleries, click Site content types
- You will then see a list of all Content Tyopes that already exist on your site. Most of them are out-of-the-box content types that exist. Some Content types you will see there are those Tenant-level content types published to you by the organization from the Content Type Gallery. For example, you will get to see Company Invoice Tenant Level Content Type created and published in the previous step!
- To create a Department-level Content Type, click Create content type
- Give your content type a name. It will be super-important to select that tenant-level content type as a parent (since we want to inherit metadata from it). To do so, select Custom Content Types for Parent Category and the actual Content Type you want to be the parent (in our case – Company Invoice)
- This will create a Department-Level Content Type. Notice that it will already have all the metadata columns from the parent content type, since we are inheriting from it!
Step 3: Add Site columns to your Department Content Type
We are ready to add our own (department-level) site columns to the department content type. To do so:
- Click Add site column > Create new site column
- Give your column a name (in my case, Person Responsible), choose the proper type of column and click Save
- Create the remaining columns (in my case, I have a Status Column to add).
- Once completed, you will see the content type with some columns inherited and some columns created by you.
Step 4: Add Department-Level Content Type to the Document Library
The final step is to add our content type to the document library. To do so:
- On a given Document Library, click the +Add column, scroll all the way down, and select Add content type.
- You will then see a list of all content types you can add. You might create some at the site level, some are published from Content Type Gallery.
- Select the Department-Level Content Type and click Apply.
- The step above will add your Content Type to the document library. To see the columns in a view, switch to the Content Type View automatically created for you.
- There are a few additional cleanup steps involved with the use of the content types, I will omit those here in this article, but I do explain them in greater detail in my Advanced Document Management Course.
- Once it is all set and done and you upload and tag all the documents, this is what the library will look like.
Other User Cases for Content Type Inheritance
There are many other use cases for content type inheritance.
- Tenant and Site Level Content Types: Tenant-level content types pushed via Content Type Gallery + site-level content types inheriting from those, just like described above, for things like Invoices, Contracts, Legal Agreements, etc.
- Legal Agreements of various complexity: Multiple levels of content types are defined at the site level for various types of legal agreements. For example, for simple legal agreements, you might have 1 Content Type with just a few columns (Parent Content Type only), and for more complex legal agreements, you might want to use Content Type with additional metadata (Child Content Type with few extra column + Parent Content Type metadata)
- Projects of various complexity: If you are using Document Sets, you can use the inheritance for different types of projects, for example. For the small/quick projects, you might have 1 Document Set Content Type with just a few columns (Parent Content Type only), and for larger projects, you might want to use Document Set Content Type with additional metadata (Child Content Type with few extra column + Parent Content Type metadata)