From 08b9f79fdd7759092f1910b6fbcc94d3c62df1cb Mon Sep 17 00:00:00 2001 From: "Alina-Magdalena Tincas (Umbraco HQ)" Date: Wed, 29 May 2024 16:00:31 +0200 Subject: [PATCH 1/2] add warning notes for v14 articles that need to be looked into --- 14/umbraco-cms/extending/backoffice-tours.md | 2 +- 14/umbraco-cms/extending/dashboards.md | 2 +- .../extending/embedded-media-providers.md | 4 +++ .../extending/language-files/README.md | 4 +++ .../extending/property-editors/README.md | 2 +- .../property-editors/build-a-block-editor.md | 2 +- .../declaring-your-property-editor.md | 4 +++ .../full-examples-value-converters.md | 4 +++ .../property-editors/package-manifest.md | 6 ++++ .../property-editors/property-actions.md | 4 +++ .../property-value-converters.md | 12 +++++--- .../extending/property-editors/tracking.md | 4 +++ .../extending/section-trees/README.md | 4 +++ .../block-editor/README.md | 4 +++ .../block-editor/block-grid-editor.md | 4 +++ .../block-editor/block-list-editor.md | 4 +++ .../build-custom-view-for-blocks.md | 4 +++ .../rich-text-editor/README.md | 4 +++ .../rich-text-editor/rte-blocks.md | 4 +++ 14/umbraco-cms/implementation/controllers.md | 8 +++--- .../tutorials/creating-a-backoffice-tour.md | 6 +++- .../creating-custom-views-for-blocklist.md | 28 +++++++++++-------- 22 files changed, 95 insertions(+), 25 deletions(-) diff --git a/14/umbraco-cms/extending/backoffice-tours.md b/14/umbraco-cms/extending/backoffice-tours.md index a4c11daebd5..2d5071b11fe 100644 --- a/14/umbraco-cms/extending/backoffice-tours.md +++ b/14/umbraco-cms/extending/backoffice-tours.md @@ -5,7 +5,7 @@ description: A guide configuring backoffice tours in Umbraco # Backoffice Tours {% hint style="warning" %} -This article is a work in progress and will be updated after Umbraco 14 release. +This article is a work in progress and may undergo further revisions, updates, or amendments. The information contained herein is subject to change without notice. {% endhint %} Backoffice Tours are a way to create helpful guides for how to work in the Umbraco backoffice. diff --git a/14/umbraco-cms/extending/dashboards.md b/14/umbraco-cms/extending/dashboards.md index 52e28e1607a..65d52c9b6f2 100644 --- a/14/umbraco-cms/extending/dashboards.md +++ b/14/umbraco-cms/extending/dashboards.md @@ -6,7 +6,7 @@ description: >- # Dashboard {% hint style="warning" %} -This page is a work in progress. It has been migrated but the content is waiting to be updated for the new Backoffice. +This article is a work in progress and may undergo further revisions, updates, or amendments. The information contained herein is subject to change without notice. {% endhint %} Each section of the Umbraco backoffice has its own set of default dashboards. diff --git a/14/umbraco-cms/extending/embedded-media-providers.md b/14/umbraco-cms/extending/embedded-media-providers.md index e96d074fbab..a30abfc1d17 100644 --- a/14/umbraco-cms/extending/embedded-media-providers.md +++ b/14/umbraco-cms/extending/embedded-media-providers.md @@ -4,6 +4,10 @@ description: A guide to creating a custom embed providers in Umbraco # Embedded Media Providers +{% hint style="warning" %} +This article is a work in progress and may undergo further revisions, updates, or amendments. The information contained herein is subject to change without notice. +{% endhint %} + The Rich Text Editor in Umbraco has an 'Embed' button, that when pressed, slides open a panel. This panel enables editors to paste the URL of a third-party media resource to embed in content. ![The Rich Text Editor Embed Button](images/Embed-Button.png) diff --git a/14/umbraco-cms/extending/language-files/README.md b/14/umbraco-cms/extending/language-files/README.md index 95adbe0fb97..51d43bcdcba 100644 --- a/14/umbraco-cms/extending/language-files/README.md +++ b/14/umbraco-cms/extending/language-files/README.md @@ -6,6 +6,10 @@ description: >- # Language Files & Localization +{% hint style="warning" %} +The Language Files & Localization articles are a work in progress and may undergo further revisions, updates, or amendments. The information contained herein is subject to change without notice. +{% endhint %} + Localization files are used to translate: * The Umbraco backoffice user interface so that end users can use Umbraco in their native language. This is particularly important for content editors who do not speak English. diff --git a/14/umbraco-cms/extending/property-editors/README.md b/14/umbraco-cms/extending/property-editors/README.md index fe9b4434d4f..5c819f70695 100644 --- a/14/umbraco-cms/extending/property-editors/README.md +++ b/14/umbraco-cms/extending/property-editors/README.md @@ -5,7 +5,7 @@ description: Guide on how to work with and create Property Editors in Umbraco # Property Editors {% hint style="warning" %} -This page is a work in progress. It will be updated as the software evolves. +The Property Editor articles are a work in progress and may undergo further revisions, updates, or amendments. The information contained herein is subject to change without notice. {% endhint %} This section describes how to work with and create Property Editors. A property editor is the editor used to insert content into Umbraco. [See here for definition](../../fundamentals/backoffice/property-editors/) diff --git a/14/umbraco-cms/extending/property-editors/build-a-block-editor.md b/14/umbraco-cms/extending/property-editors/build-a-block-editor.md index 6f2e0e8e744..a8997eedbf1 100644 --- a/14/umbraco-cms/extending/property-editors/build-a-block-editor.md +++ b/14/umbraco-cms/extending/property-editors/build-a-block-editor.md @@ -1,7 +1,7 @@ # Build a Block Editor {% hint style="warning" %} -This guide is currently being re-evaluated, as it might not work as intended. +This page is a work in progress and may undergo further revisions, updates, or amendments. The information contained herein is subject to change without notice. {% endhint %} Before reading this document we highly recommend that you familiarise yourself with[the basics of developing a custom Property Editor for Umbraco](../../tutorials/creating-a-property-editor/). diff --git a/14/umbraco-cms/extending/property-editors/declaring-your-property-editor.md b/14/umbraco-cms/extending/property-editors/declaring-your-property-editor.md index 0b945dc5cab..1bbde8fc00d 100644 --- a/14/umbraco-cms/extending/property-editors/declaring-your-property-editor.md +++ b/14/umbraco-cms/extending/property-editors/declaring-your-property-editor.md @@ -1,5 +1,9 @@ # Declaring your property editor +{% hint style="warning" %} +This page is a work in progress and may undergo further revisions, updates, or amendments. The information contained herein is subject to change without notice. +{% endhint %} + Generally Umbraco supports two different ways to declare a property editor. Most commonly one would create a `package.manifest` file, and then use it for declaring one or more property editors. But as an alternative, property editors can also be declared using C#. A property editor consists of a number of mandatory properties, and some optional ones as well. As such, the outer JSON object for the property editor has the following properties: diff --git a/14/umbraco-cms/extending/property-editors/full-examples-value-converters.md b/14/umbraco-cms/extending/property-editors/full-examples-value-converters.md index 5973476b6a6..50f247dc15e 100644 --- a/14/umbraco-cms/extending/property-editors/full-examples-value-converters.md +++ b/14/umbraco-cms/extending/property-editors/full-examples-value-converters.md @@ -1,5 +1,9 @@ # Content Picker Value Converter Example +{% hint style="warning" %} +This page is a work in progress and may undergo further revisions, updates, or amendments. The information contained herein is subject to change without notice. +{% endhint %} + ```csharp using System; using Umbraco.Cms.Core; diff --git a/14/umbraco-cms/extending/property-editors/package-manifest.md b/14/umbraco-cms/extending/property-editors/package-manifest.md index 0c4bb8a253f..028cc95f4fe 100644 --- a/14/umbraco-cms/extending/property-editors/package-manifest.md +++ b/14/umbraco-cms/extending/property-editors/package-manifest.md @@ -4,6 +4,10 @@ description: An extension begins with a Package Manifest # Package Manifest +{% hint style="warning" %} +This page is a work in progress and may undergo further revisions, updates, or amendments. The information contained herein is subject to change without notice. +{% endhint %} + A Package is declared via an Umbraco Package Manifest. This describes the Package and declares one or more UI Extensions. {% hint style="warning" %} @@ -23,6 +27,7 @@ Before Umbraco 14, the manifest was declared in a `package.manifest` file instea {% endhint %} {% code title="umbraco-package.json" %} + ```json { "name": "Sir Trevor", @@ -44,6 +49,7 @@ Before Umbraco 14, the manifest was declared in a `package.manifest` file instea ] } ``` + {% endcode %} ## Sample Manifest with Csharp diff --git a/14/umbraco-cms/extending/property-editors/property-actions.md b/14/umbraco-cms/extending/property-editors/property-actions.md index 8e7ecbefe15..0c0795b1d29 100644 --- a/14/umbraco-cms/extending/property-editors/property-actions.md +++ b/14/umbraco-cms/extending/property-editors/property-actions.md @@ -4,6 +4,10 @@ description: Guide on how to implement Property Actions for Property Editors in # Property Actions +{% hint style="warning" %} +This page is a work in progress and may undergo further revisions, updates, or amendments. The information contained herein is subject to change without notice. +{% endhint %} + Property Actions are a built-in feature that provide a generic place for secondary functionality for property editors. Property Actions appear as a small button next to the label of the property, which expands to show the available actions. They are defined and implemented in the Property Editor, making it open as to what a Property Action is. diff --git a/14/umbraco-cms/extending/property-editors/property-value-converters.md b/14/umbraco-cms/extending/property-editors/property-value-converters.md index 0c86201af80..236568e9004 100644 --- a/14/umbraco-cms/extending/property-editors/property-value-converters.md +++ b/14/umbraco-cms/extending/property-editors/property-value-converters.md @@ -5,6 +5,10 @@ description: "A guide to creating a custom property value converter in Umbraco" # Property Value Converters +{% hint style="warning" %} +This page is a work in progress and may undergo further revisions, updates, or amendments. The information contained herein is subject to change without notice. +{% endhint %} + A Property Value Converter converts a property editor's database-stored value to another type. The converted value can be accessed from MVC Razor or any other Published Content API. For example the standard Umbraco Core "Content Picker" stores a nodeId as `String` type. However if you implement a converter it could return an `IPublishedContent` object. @@ -102,14 +106,14 @@ Do not use this cache level unless you know exactly what you're doing. We recomm The property value will be cached until its _element_ is modified. The element is what holds (or owns) the property. For example: -- For properties used at the page level, the element is the entire page. +- For properties used at the page level, the element is the entire page. - For properties contained within Block List items, the element is the individual Block List item. -This is the most commonly used cache level and should be your default, unless you have specific reasons to do otherwise. +This is the most commonly used cache level and should be your default, unless you have specific reasons to do otherwise. #### `PropertyCacheLevel.Elements` -The property value will be cached until _any_ element (see above) is changed. This means that any change to any page will clear the property value cache. +The property value will be cached until _any_ element (see above) is changed. This means that any change to any page will clear the property value cache. This is particularly useful for property values that contain references to other content or elements. For example, this cache level is utilized by the Content Picker to clear its property values from the cache upon content updates. @@ -165,7 +169,7 @@ public object ConvertSourceToIntermediate(IPublishedElement owner, IPublishedPro This method converts the Intermediate to an Object. The returned value is used by the `GetPropertyValue` method of `IPublishedContent`. -The below example converts the nodeId (converted to `Int` or `Udi` by *ConvertSourceToIntermediate*) into an 'IPublishedContent' object. +The below example converts the nodeId (converted to `Int` or `Udi` by _ConvertSourceToIntermediate_) into an 'IPublishedContent' object. ```csharp public object ConvertIntermediateToObject(IPublishedElement owner, IPublishedPropertyType propertyType, PropertyCacheLevel referenceCacheLevel, object inter, bool preview) diff --git a/14/umbraco-cms/extending/property-editors/tracking.md b/14/umbraco-cms/extending/property-editors/tracking.md index fc38b21f835..75961dd4455 100644 --- a/14/umbraco-cms/extending/property-editors/tracking.md +++ b/14/umbraco-cms/extending/property-editors/tracking.md @@ -6,6 +6,10 @@ description: >- # Tracking References +{% hint style="warning" %} +This page is a work in progress and may undergo further revisions, updates, or amendments. The information contained herein is subject to change without notice. +{% endhint %} + Property editors can be extended further to track entity references that may be selected or referenced inside the property editor. For example in the core of the CMS we have added this to numerous property editors. A good example of this is the Media Picker. The CMS stores a reference to the selected media item, enabling the identification of content nodes that use that particular media item. This avoids it being accidentally deleted if it is being used. diff --git a/14/umbraco-cms/extending/section-trees/README.md b/14/umbraco-cms/extending/section-trees/README.md index 20852e548ad..d4539abd774 100644 --- a/14/umbraco-cms/extending/section-trees/README.md +++ b/14/umbraco-cms/extending/section-trees/README.md @@ -4,6 +4,10 @@ description: "An explanation on sections and trees in Umbraco" # Sections & Trees +{% hint style="warning" %} +The Section & Trees articles are a work in progress and may undergo further revisions, updates, or amendments. The information contained herein is subject to change without notice. +{% endhint %} + The Umbraco backoffice consists of sections (sometimes referred to as applications) which contain Trees. Each section is identified by its name in the top navigation ribbon of the Umbraco Backoffice. diff --git a/14/umbraco-cms/fundamentals/backoffice/property-editors/built-in-umbraco-property-editors/block-editor/README.md b/14/umbraco-cms/fundamentals/backoffice/property-editors/built-in-umbraco-property-editors/block-editor/README.md index 7311b60f985..3d711aad480 100644 --- a/14/umbraco-cms/fundamentals/backoffice/property-editors/built-in-umbraco-property-editors/block-editor/README.md +++ b/14/umbraco-cms/fundamentals/backoffice/property-editors/built-in-umbraco-property-editors/block-editor/README.md @@ -2,6 +2,10 @@ The Block Editors are property editors that enabled you to build advanced editor tools using a set of predefined Document Types. +{% hint style="warning" %} +This article is a work in progress and may undergo further revisions, updates, or amendments. The information contained herein is subject to change without notice. +{% endhint %} + Umbraco CMS currently ships with two Block Editors: the Block List and the Block Grid. ## [Block List](block-list-editor.md) diff --git a/14/umbraco-cms/fundamentals/backoffice/property-editors/built-in-umbraco-property-editors/block-editor/block-grid-editor.md b/14/umbraco-cms/fundamentals/backoffice/property-editors/built-in-umbraco-property-editors/block-editor/block-grid-editor.md index 6e85d2e8422..37fdc0a1a01 100644 --- a/14/umbraco-cms/fundamentals/backoffice/property-editors/built-in-umbraco-property-editors/block-editor/block-grid-editor.md +++ b/14/umbraco-cms/fundamentals/backoffice/property-editors/built-in-umbraco-property-editors/block-editor/block-grid-editor.md @@ -6,6 +6,10 @@ The **Block Grid** property editor enables editors to layout their content in the Umbraco backoffice. The content is made of Blocks that can contain different types of data. +{% hint style="warning" %} +This article is a work in progress and may undergo further revisions, updates, or amendments. The information contained herein is subject to change without notice. +{% endhint %} + ## Sample configuration When testing out the property editor, you can use a set of predefined Blocks. The option will only be possible when there are no other Data Types using the Block Grid property editor. diff --git a/14/umbraco-cms/fundamentals/backoffice/property-editors/built-in-umbraco-property-editors/block-editor/block-list-editor.md b/14/umbraco-cms/fundamentals/backoffice/property-editors/built-in-umbraco-property-editors/block-editor/block-list-editor.md index e8279c8cffa..5f27338cba3 100644 --- a/14/umbraco-cms/fundamentals/backoffice/property-editors/built-in-umbraco-property-editors/block-editor/block-list-editor.md +++ b/14/umbraco-cms/fundamentals/backoffice/property-editors/built-in-umbraco-property-editors/block-editor/block-list-editor.md @@ -4,6 +4,10 @@ `Returns: IEnumerable` +{% hint style="warning" %} +This article is a work in progress and may undergo further revisions, updates, or amendments. The information contained herein is subject to change without notice. +{% endhint %} + **Block List** is a list editing property editor, using [Element Types](../../../../data/defining-content/#element-types) to define the list item schema. {% hint style="info" %} diff --git a/14/umbraco-cms/fundamentals/backoffice/property-editors/built-in-umbraco-property-editors/block-editor/build-custom-view-for-blocks.md b/14/umbraco-cms/fundamentals/backoffice/property-editors/built-in-umbraco-property-editors/block-editor/build-custom-view-for-blocks.md index e38e6fb0f17..f601911f5e5 100644 --- a/14/umbraco-cms/fundamentals/backoffice/property-editors/built-in-umbraco-property-editors/block-editor/build-custom-view-for-blocks.md +++ b/14/umbraco-cms/fundamentals/backoffice/property-editors/built-in-umbraco-property-editors/block-editor/build-custom-view-for-blocks.md @@ -1,5 +1,9 @@ # Build a Custom View for a Block +{% hint style="warning" %} +This article is a work in progress and may undergo further revisions, updates, or amendments. The information contained herein is subject to change without notice. +{% endhint %} + You can choose to customize your editing experience by implementing a custom view for each Block Type of a Block Editor. By picking a custom view you overwrite the backoffice UI for the given block with your own. This enables you to define how a block should be presented. It can, however, also include interactive elements and be a full custom solution to how data is manipulated. In the Block List Editor the Inline Editing Mode must be disabled for custom backoffice views to appear. diff --git a/14/umbraco-cms/fundamentals/backoffice/property-editors/built-in-umbraco-property-editors/rich-text-editor/README.md b/14/umbraco-cms/fundamentals/backoffice/property-editors/built-in-umbraco-property-editors/rich-text-editor/README.md index 318ab531894..a350e79a301 100644 --- a/14/umbraco-cms/fundamentals/backoffice/property-editors/built-in-umbraco-property-editors/rich-text-editor/README.md +++ b/14/umbraco-cms/fundamentals/backoffice/property-editors/built-in-umbraco-property-editors/rich-text-editor/README.md @@ -4,6 +4,10 @@ `Returns: HTML` +{% hint style="warning" %} +This article is a work in progress and may undergo further revisions, updates, or amendments. The information contained herein is subject to change without notice. +{% endhint %} + The Rich Text Editor (RTE) is based on [tinymce](https://www.tinymce.com/) and is highly configurable. Depending on the configuration, it will give your content editors more flexibility when working with content that should be more than only plain text. {% hint style="info" %} diff --git a/14/umbraco-cms/fundamentals/backoffice/property-editors/built-in-umbraco-property-editors/rich-text-editor/rte-blocks.md b/14/umbraco-cms/fundamentals/backoffice/property-editors/built-in-umbraco-property-editors/rich-text-editor/rte-blocks.md index f8fd37577a7..007816b3767 100644 --- a/14/umbraco-cms/fundamentals/backoffice/property-editors/built-in-umbraco-property-editors/rich-text-editor/rte-blocks.md +++ b/14/umbraco-cms/fundamentals/backoffice/property-editors/built-in-umbraco-property-editors/rich-text-editor/rte-blocks.md @@ -1,5 +1,9 @@ # Blocks in Rich Text Editor +{% hint style="warning" %} +This article is a work in progress and may undergo further revisions, updates, or amendments. The information contained herein is subject to change without notice. +{% endhint %} + It is possible to insert Blocks into the markup of the Rich Text Editor (RTE). Once you've defined the Block Type as part of the RTE Data Type and enabled the Blocks Toolbar Option. Then Blocks can be created directly inside the Rich Text Editor. ## Configure Blocks diff --git a/14/umbraco-cms/implementation/controllers.md b/14/umbraco-cms/implementation/controllers.md index 0f868e7aaeb..3856689ee5e 100644 --- a/14/umbraco-cms/implementation/controllers.md +++ b/14/umbraco-cms/implementation/controllers.md @@ -6,6 +6,10 @@ description: >- # Controllers +{% hint style="warning" %} +This guide is awaiting to be updated as it uses UmbracoApiController which is obsolete in Umbraco 14 and removed in Umbraco 15. +{% endhint %} + Umbraco contains different types of controllers to perform different tasks: * [Render MVC Controllers](controllers.md#render-mvc-controllers) @@ -37,10 +41,6 @@ All implementations of Umbraco API Controllers inherit from the base class: `Umb For details on using Umbraco API Controllers, see the [Umbraco API Controllers](../reference/routing/umbraco-api-controllers/) article. -{% hint style="warning" %} -UmbracoApiController is obsolete in Umbraco 14 and will be removed in Umbraco 15. -{% endhint %} - ## Umbraco Authorized Controllers and Attributes An Umbraco Authorized Controller is used when the controller requires member or user authentication (authN) and/or authorization (authZ). If either the `authN` or `authZ` fail, the controller will return a `401 - unauthorized response`. diff --git a/14/umbraco-cms/tutorials/creating-a-backoffice-tour.md b/14/umbraco-cms/tutorials/creating-a-backoffice-tour.md index c252bc6375b..be96421259a 100644 --- a/14/umbraco-cms/tutorials/creating-a-backoffice-tour.md +++ b/14/umbraco-cms/tutorials/creating-a-backoffice-tour.md @@ -6,6 +6,10 @@ description: >- # Creating a Backoffice Tour +{% hint style="warning" %} +This article is a work in progress and may undergo further revisions, updates, or amendments. The information contained herein is subject to change without notice. +{% endhint %} + ## Introduction In this tutorial we will show how you can create a backoffice tour, helping users get started with working in the Umbraco backoffice. @@ -16,7 +20,7 @@ Before moving on, we recommend reading the [Backoffice Tours](../extending/backo ## Video tutorial -{% embed url="https://youtu.be/7xas45Keb_o" %} +{% embed url="" %} Video tutorial on how to create a backoffice tour {% endembed %} diff --git a/14/umbraco-cms/tutorials/creating-custom-views-for-blocklist.md b/14/umbraco-cms/tutorials/creating-custom-views-for-blocklist.md index 839a85138fb..a6655da5db7 100644 --- a/14/umbraco-cms/tutorials/creating-custom-views-for-blocklist.md +++ b/14/umbraco-cms/tutorials/creating-custom-views-for-blocklist.md @@ -2,6 +2,10 @@ Custom Views are used to overwrite the AngularJS view for the Block List in the Content editor. We can improve the editing experience by overwriting the default representation of our block entries with a custom view that will provide a better view of how the content will look on the frontend. +{% hint style="warning" %} +This article is a work in progress and may undergo further revisions, updates, or amendments. The information contained herein is subject to change without notice. +{% endhint %} + ## Creating the Document Type For this tutorial, we will set-up a simple document type and create a new property using Block List as the property editor. @@ -14,16 +18,16 @@ To create a Document Type: * Using folders can help you organize your **Document Types**. 4. Enter a **Name** for the **Document Type**. Let's call it _Product_. You'll notice that an **Alias** is automatically created. 5. Click **Add Group** and **Enter a Name** for the group. Let's call it _Product Details_. -6. Add the following properties: \\ +6. Add the following properties: \\
-7. Add another group called **Features** and a property with the following specification: +7. Add another group called **Features** and a property with the following specification: | Name | Features | | --------- | ---------- | | Alias | features | | Data Type | Block List | -8. Click **Save**. Your document type should look like: +8. Click **Save**. Your document type should look like:
@@ -43,7 +47,7 @@ To create the Content Node: To configure the Block List editor: 1. Go to **Settings** and open the **Product** document type. -2. Click on the **Block List** property we created earlier. You'll see the Block list editor's configuration, as shown below: +2. Click on the **Block List** property we created earlier. You'll see the Block list editor's configuration, as shown below: ![Document Type](../../../10/umbraco-cms/tutorials/images/blocklist-editor-settings.png) @@ -53,7 +57,7 @@ To add blocks to our Block List editor: 1. Click **Add** in the **Available Blocks**. The **Pick Element Type** window opens. From here, you have the option to select an existing Element Type, if any, or you can create a new Element Type from the configuration screen. 2. For this tutorial, we will **Create a new Element Type**. -3. Setup a new Element type called **Feature** and use the following configuration: +3. Setup a new Element type called **Feature** and use the following configuration: | Property Name | Alias | Editor | | ------------- | ----------- | ------------ | @@ -102,12 +106,12 @@ Now that we have created our view, let's assign it to our block: To add content to the blocks: 1. Go to the **Content** section and select **Product**. -2. Select **Add Content** in the **Features** group. The **Add Content** displays the blocks we created earlier. +2. Select **Add Content** in the **Features** group. The **Add Content** displays the blocks we created earlier.
3. Select **Feature**. The **Feature** window opens. 4. Enter the **Name** and **Details** in the Feature window. You will notice you can view the content as you type. This is because we have enabled the **Live editing** mode. -5. Click **Confirm**. +5. Click **Confirm**.
@@ -129,11 +133,11 @@ To add a Settings model: * Click **Add Property** and **Enter a Name**. Let's call it _Block Alignment_. An alias _blockTheme_ is generated. * Select **Dropdown List** as the editor. The **Editor Settings** window opens. * In the Add prevalue field, add **left**, **center** and **right** as values. - * Click **Submit**. + * Click **Submit**.
7. Click **Submit**. -8. Click **Save and Close**. +8. Click **Save and Close**.
9. Click **Submit** until you reach the Product document type. @@ -199,13 +203,13 @@ Now that we have updated our view and stylesheet let's assign it to our block. 2. Click the `cog` wheel next to **Features**. 3. Select the **Product - Features - Block List**. The **Editor Settings** window opens. 4. Select **Feature** from the **Available Blocks** configuration. The **Configuration of 'Feature'** window opens. -5. Select **Add Stylesheet** and browse to **style.css**. +5. Select **Add Stylesheet** and browse to **style.css**.
6. Select **Add Settings** in the **Settings model** and select **Feature Settings**. 7. Click **Submit** until you reach the Product document type. 8. Click **Save**. -9. Restart your application. Now, when you head over to the **Product** page in the **Content** section and hover over the block you will notice the settings option. +9. Restart your application. Now, when you head over to the **Product** page in the **Content** section and hover over the block you will notice the settings option.
10. Click on **Edit Settings** and you can see the **Block Theme** options we created. @@ -219,6 +223,6 @@ Now that we have updated our view and stylesheet let's assign it to our block. To render the stored value of your Block List editor on the frontend, see the [Rendering Block List Content](../fundamentals/backoffice/property-editors/built-in-umbraco-property-editors/block-editor/#block-list) section. -{% embed url="https://www.youtube.com/embed/Gp_ek2-FJNY?rel=0" %} +{% embed url="" %} Custom Views for Blocks {% endembed %} From 7e5d6aead955270841ed82190dc64ff794682f6d Mon Sep 17 00:00:00 2001 From: "Alina-Magdalena Tincas (Umbraco HQ)" Date: Thu, 30 May 2024 12:16:07 +0200 Subject: [PATCH 2/2] added rest of warning notes --- .../extending/filesystemproviders/README.md | 4 ++++ 13/umbraco-cms/implementation/composing.md | 10 +++++++++- 13/umbraco-cms/implementation/controllers.md | 4 ++++ .../management/services/userservice/README.md | 12 +++++++++--- .../reference/querying/imembermanager.md | 11 +++++++++-- 13/umbraco-cms/reference/routing/authorized.md | 4 ++++ .../routing/umbraco-api-controllers/README.md | 4 ++++ .../umbraco-api-controllers/authorization.md | 4 ++++ .../extending/filesystemproviders/README.md | 6 ++++++ 14/umbraco-cms/implementation/composing.md | 14 +++++++++++++- 14/umbraco-cms/implementation/controllers.md | 5 +++++ .../management/services/create-a-new-user.md | 10 ++++++++++ .../reference/querying/imembermanager.md | 10 ++++++++++ 14/umbraco-cms/reference/routing/authorized.md | 8 +++++++- .../routing/umbraco-api-controllers/README.md | 6 ++++++ .../umbraco-api-controllers/authorization.md | 6 ++++++ .../upgrading/version-specific-upgrades.md | 4 ++-- 17 files changed, 112 insertions(+), 10 deletions(-) diff --git a/13/umbraco-cms/extending/filesystemproviders/README.md b/13/umbraco-cms/extending/filesystemproviders/README.md index 90117e07448..9913eb37658 100644 --- a/13/umbraco-cms/extending/filesystemproviders/README.md +++ b/13/umbraco-cms/extending/filesystemproviders/README.md @@ -113,6 +113,10 @@ For inspiration on building a custom file system, have a look at the [Azure Blob ### Accessing the media file system from code +{% hint style="warning" %} +The example below uses `UmbracoAuthorizedApiController` which has been removed from Umbraco 14. Use `ManagementApiControllerBase` class instead. +{% endhint %} + Since the default media file system can be swapped with custom implementations, you should never access the implementation directly. Umbraco uses a manager class called `MediaFileManager`. You can get a reference to this manager class via dependency injection in the constructor for your custom class or controller: ```csharp diff --git a/13/umbraco-cms/implementation/composing.md b/13/umbraco-cms/implementation/composing.md index c87c633882c..2608f3aaf4e 100644 --- a/13/umbraco-cms/implementation/composing.md +++ b/13/umbraco-cms/implementation/composing.md @@ -153,7 +153,7 @@ Below is a list of collections with their corresponding 'collection type' and ho | ContentIndexHandlers | Lazy | Type scanned for `IContentIndexHandler` | | Dashboards | Weighted | Package.manifest & Explicit Registration | | DataEditors | Lazy | Type scanned for `IDataEditor` | -| DataValueReferenceFactories | Ordered | Explicit Registration - Empty by default | +| DataValueReferenceFactories | Ordered | Explicit Registration - Empty by default | | EditorValidators | Lazy | Type scanned for `IEditorValidator` | | EmbedProviders | Ordered | Explicit Registration | | FilterHandlers | Lazy | Type scanned for `IFilterHandler` | @@ -341,6 +341,10 @@ The runtime has detected an up-to-date Umbraco install and is running. ## Example of using Ordered Collections and adding types explicitly +{% hint style="warning" %} +The example below uses `UmbracoAuthorizedApiController` which has been removed from Umbraco 14. Use `ManagementApiControllerBase` class instead. +{% endhint %} + You may wish to create an Umbraco package that allows package consumers to extend and add additional functionality. In this example, we show how you can use the `OrderedCollectionBuilderBase`. ```csharp @@ -431,6 +435,10 @@ public class SomeBackofficeApiController : UmbracoAuthorizedApiController ## Example of using Lazy Collections with Type Scanning +{% hint style="warning" %} +The example below uses `UmbracoAuthorizedApiController` which has been removed from Umbraco 14. Use `ManagementApiControllerBase` class instead. +{% endhint %} + You may wish to create an Umbraco package that allows package consumers to extend and add additional functionality. In this example, we show how you can use the `LazyCollectionBuilderBase` to scan assemblies that implement your interface by using the `TypeLoader` {% hint style="warning" %} diff --git a/13/umbraco-cms/implementation/controllers.md b/13/umbraco-cms/implementation/controllers.md index 519f36f0aa1..8d3381877a3 100644 --- a/13/umbraco-cms/implementation/controllers.md +++ b/13/umbraco-cms/implementation/controllers.md @@ -77,6 +77,10 @@ public class ExampleController : UmbracoController * **WebAPI** +{% hint style="warning" %} +`UmbracoAuthorizedApiController` and `UmbracoAuthorizedJsonController` have been removed from Umbraco 14. Use`ManagementApiControllerBase` class instead. +{% endhint %} + A base class implementation for authorized auto-routed Umbraco API controllers is inherited from: `Umbraco.Cms.Web.BackOffice.Controllers.UmbracoAuthorizedApiController`. This controller inherits from `Umbraco.Cms.Web.Common.Controllers.UmbracoApiController` it is auto-routed. This controller is also attributed with `Umbraco.Cms.Web.Common.Attributes.IsBackOfficeAttribute` to ensure that it is routed correctly to be authenticated for the backoffice. Another base class implementation for the backoffice is `Umbraco.Cms.Web.BackOffice.Controllers.UmbracoAuthorizedJsonController`. It inherits from `Umbraco.Cms.Web.BackOffice.Controllers.UmbracoAuthorizedApiController` but has some special filters applied to it to automatically handle anti-forgery tokens for use with AngularJS in the backoffice. diff --git a/13/umbraco-cms/reference/management/services/userservice/README.md b/13/umbraco-cms/reference/management/services/userservice/README.md index c9658a36de6..40fec880f48 100644 --- a/13/umbraco-cms/reference/management/services/userservice/README.md +++ b/13/umbraco-cms/reference/management/services/userservice/README.md @@ -2,8 +2,8 @@ The UserService acts as a "gateway" to Umbraco data for operations which are related to Users. - * **Namespace:** `Umbraco.Core.Services` - * **Assembly:** `Umbraco.Core.dll` +* **Namespace:** `Umbraco.Core.Services` +* **Assembly:** `Umbraco.Core.dll` All samples listed in this document will require references to the following dll: @@ -21,6 +21,13 @@ using Umbraco.Core.Services; ### Services property +{% hint style="warning" %} + +* `UmbracoAuthorizedApiController` has been removed from Umbraco 14. Use `ManagementApiControllerBase` class instead. +* `UmbracoApiController` is obsolete in Umbraco 14 and will be removed in Umbraco 15. + +{% endhint %} + If you wish to use the UserService in a class that inherits from one of the Umbraco base classes (eg. `SurfaceController`, `UmbracoApiController` or `UmbracoAuthorizedApiController`), you can access the service through a local `Services` property: ```csharp @@ -53,7 +60,6 @@ If neither a `Services` property or Dependency Injection is available, you can a IUserService userService = Umbraco.Core.Composing.Current.Services.UserService; ``` - ## Samples * [**Create a new user**](create-a-new-user.md)
Quick sample showing how to create a new backoffice user; including setting a password, assigning the user to a user group, and setting the name of the user. diff --git a/13/umbraco-cms/reference/querying/imembermanager.md b/13/umbraco-cms/reference/querying/imembermanager.md index fee17ca4192..4f17df9074d 100644 --- a/13/umbraco-cms/reference/querying/imembermanager.md +++ b/13/umbraco-cms/reference/querying/imembermanager.md @@ -23,6 +23,13 @@ _memberManager.IsLoggedIn() ### Dependency Injection +{% hint style="warning" %} + +* `UmbracoAuthorizedApiController` has been removed from Umbraco 14. Use `ManagementApiControllerBase` class instead. +* `UmbracoApiController` is obsolete in Umbraco 14 and will be removed in Umbraco 15. + +{% endhint %} + If you wish to use the `IMemberManager` in a class that inherits from one of the Umbraco base classes (eg. `SurfaceController`, `UmbracoApiController`, or `UmbracoAuthorizedApiController`), you can use Dependency Injection. For instance, if you have registered your own class in Umbraco's dependency injection, you can specify the `IMemberManager` interface in your constructor: ```csharp @@ -139,7 +146,7 @@ Returns the user id of a user ``` @{ - var userId = await _memberManager.GetUserIdAsync(user); + var userId = await _memberManager.GetUserIdAsync(user); } ``` @@ -213,6 +220,6 @@ Validates that a user's credentials are correct without logging them in. ``` @{ - var isValidCredentials = await _memberManager.ValidateCredentialsAsync(userName, password); + var isValidCredentials = await _memberManager.ValidateCredentialsAsync(userName, password); } ``` diff --git a/13/umbraco-cms/reference/routing/authorized.md b/13/umbraco-cms/reference/routing/authorized.md index 1a5375cab31..046e8879fd5 100644 --- a/13/umbraco-cms/reference/routing/authorized.md +++ b/13/umbraco-cms/reference/routing/authorized.md @@ -4,6 +4,10 @@ description: "Requirements for authenticating requests for the backoffice" # Backoffice authentication +{% hint style="warning" %} +`UmbracoAuthorizedApiController` and `UmbracoAuthorizedJsonController` have been removed from Umbraco 14. Use `ManagementApiControllerBase` class instead. +{% endhint %} + In order for Umbraco to authenticate a request for the backoffice, the routing needs to be specific. Any URL that routes to: > /umbraco/backoffice/* diff --git a/13/umbraco-cms/reference/routing/umbraco-api-controllers/README.md b/13/umbraco-cms/reference/routing/umbraco-api-controllers/README.md index 6dfebece4ec..fdffc0c01a6 100644 --- a/13/umbraco-cms/reference/routing/umbraco-api-controllers/README.md +++ b/13/umbraco-cms/reference/routing/umbraco-api-controllers/README.md @@ -97,6 +97,10 @@ For more information about areas, Urls and routing see the [routing section](rou ## Backoffice controllers +% hint style="warning" %} +`UmbracoAuthorizedApiController` and `UmbracoAuthorizedJsonController` have been removed from Umbraco 14. Use `ManagementApiControllerBase` class instead. +{% endhint %} + If you are creating a controller to work within the Umbraco backoffice then you will need to ensure that it is secured properly by inheriting from: `UmbracoAuthorizedApiController` or `UmbracoAuthorizedJsonController`. This controller type will auto-route your controller like the above examples except that it will add another segment to the path: 'backoffice'. `~/Umbraco/backoffice/Api/[YourControllerName]` diff --git a/13/umbraco-cms/reference/routing/umbraco-api-controllers/authorization.md b/13/umbraco-cms/reference/routing/umbraco-api-controllers/authorization.md index b089eba0613..46bc113135a 100644 --- a/13/umbraco-cms/reference/routing/umbraco-api-controllers/authorization.md +++ b/13/umbraco-cms/reference/routing/umbraco-api-controllers/authorization.md @@ -10,6 +10,10 @@ _This section will describe how to secure your Umbraco Api controllers based on ### Inheriting from UmbracoAuthorizedApiController +{% hint style="warning" %} +`UmbracoAuthorizedApiController` has been removed from Umbraco 14. Use `ManagementApiControllerBase` class instead. +{% endhint %} + Probably the easiest way to ensure your controller is secured for only backoffice users is to inherit from `Umbraco.Cms.Web.BackOffice.Controllers.UmbracoAuthorizedApiController`. This is essentially the same as applying `[Authorize(Policy = AuthorizationPolicies.BackOfficeAccess)]` to your controller (see below). The `UmbracoAuthorizedApiController` is automatically routed. Check out the [routing documentation](../authorized.md) for more information on this topic. diff --git a/14/umbraco-cms/extending/filesystemproviders/README.md b/14/umbraco-cms/extending/filesystemproviders/README.md index 8118e35df94..5ce6069051c 100644 --- a/14/umbraco-cms/extending/filesystemproviders/README.md +++ b/14/umbraco-cms/extending/filesystemproviders/README.md @@ -113,6 +113,12 @@ For inspiration on building a custom file system, have a look at the [Azure Blob ### Accessing the media file system from code +{% hint style="warning" %} +`UmbracoAuthorizedApiController` has been removed from Umbraco 14. Use`ManagementApiControllerBase` class instead. + +Read the [Creating a Backoffice API article](../../tutorials/creating-a-backoffice-api/README.md) for a comprehensive guide to writing APIs for the Management API. +{% endhint %} + Since the default media file system can be swapped with custom implementations, you should never access the implementation directly. Umbraco uses a manager class called `MediaFileManager`. You can get a reference to this manager class via dependency injection in the constructor for your custom class or controller: ```csharp diff --git a/14/umbraco-cms/implementation/composing.md b/14/umbraco-cms/implementation/composing.md index ba00f758b54..770e8dd185d 100644 --- a/14/umbraco-cms/implementation/composing.md +++ b/14/umbraco-cms/implementation/composing.md @@ -153,7 +153,7 @@ Below is a list of collections with their corresponding 'collection type' and ho | ContentIndexHandlers | Lazy | Type scanned for `IContentIndexHandler` | | Dashboards | Weighted | Package.manifest & Explicit Registration | | DataEditors | Lazy | Type scanned for `IDataEditor` | -| DataValueReferenceFactories | Ordered | Explicit Registration - Empty by default | +| DataValueReferenceFactories | Ordered | Explicit Registration - Empty by default | | EditorValidators | Lazy | Type scanned for `IEditorValidator` | | EmbedProviders | Ordered | Explicit Registration | | FilterHandlers | Lazy | Type scanned for `IFilterHandler` | @@ -340,6 +340,12 @@ The runtime has detected an up-to-date Umbraco install and is running. ## Example of using Ordered Collections and adding types explicitly +{% hint style="warning" %} +`UmbracoAuthorizedApiController` has been removed from Umbraco 14. Use`ManagementApiControllerBase` class instead. + +Read the [Creating a Backoffice API article](../tutorials/creating-a-backoffice-api/README.md) for a comprehensive guide to writing APIs for the Management API. +{% endhint %} + You may wish to create an Umbraco package that allows package consumers to extend and add additional functionality. In this example, we show how you can use the `OrderedCollectionBuilderBase`. ```csharp @@ -430,6 +436,12 @@ public class SomeBackofficeApiController : UmbracoAuthorizedApiController ## Example of using Lazy Collections with Type Scanning +{% hint style="warning" %} +`UmbracoAuthorizedApiController` has been removed from Umbraco 14. Use`ManagementApiControllerBase` class instead. + +Read the [Creating a Backoffice API article](../tutorials/creating-a-backoffice-api/README.md) for a comprehensive guide to writing APIs for the Management API. +{% endhint %} + You may wish to create an Umbraco package that allows package consumers to extend and add additional functionality. In this example, we show how you can use the `LazyCollectionBuilderBase` to scan assemblies that implement your interface by using the `TypeLoader` {% hint style="warning" %} diff --git a/14/umbraco-cms/implementation/controllers.md b/14/umbraco-cms/implementation/controllers.md index 3856689ee5e..cce580a8789 100644 --- a/14/umbraco-cms/implementation/controllers.md +++ b/14/umbraco-cms/implementation/controllers.md @@ -80,6 +80,11 @@ public class ExampleController : UmbracoController ``` * **WebAPI** +{% hint style="warning" %} +`UmbracoAuthorizedApiController` and `UmbracoAuthorizedJsonController` have been removed from Umbraco 14. Use`ManagementApiControllerBase` class instead. + +Read the [Creating a Backoffice API article](../tutorials/creating-a-backoffice-api/README.md) for a comprehensive guide to writing APIs for the Management API. +{% endhint %} A base class implementation for authorized auto-routed Umbraco API controllers is inherited from: `Umbraco.Cms.Web.BackOffice.Controllers.UmbracoAuthorizedApiController`. This controller inherits from `Umbraco.Cms.Web.Common.Controllers.UmbracoApiController` it is auto-routed. This controller is also attributed with `Umbraco.Cms.Web.Common.Attributes.IsBackOfficeAttribute` to ensure that it is routed correctly to be authenticated for the backoffice. diff --git a/14/umbraco-cms/reference/management/services/create-a-new-user.md b/14/umbraco-cms/reference/management/services/create-a-new-user.md index 659d9e7837d..5e5e72b0a16 100644 --- a/14/umbraco-cms/reference/management/services/create-a-new-user.md +++ b/14/umbraco-cms/reference/management/services/create-a-new-user.md @@ -6,6 +6,16 @@ description: This will show you how to add a user to a user group using the User ## Services property +{% hint style="warning" %} + +* `UmbracoAuthorizedApiController` has been removed from Umbraco 14. Use`ManagementApiControllerBase` class instead. + +Read the [Creating a Backoffice API article](https://docs.umbraco.com/umbraco-cms/tutorials/creating-a-backoffice-api) for a comprehensive guide to writing APIs for the Management API. + +* `UmbracoApiController` is obsolete in Umbraco 14 and will be removed in Umbraco 15. + +{% endhint %} + If you wish to use the UserService in a class that inherits from one of the Umbraco base classes. For example: `SurfaceController`, `UmbracoApiController`, or `UmbracoAuthorizedApiController`). You can access the service through a local `Services` property: ```csharp diff --git a/14/umbraco-cms/reference/querying/imembermanager.md b/14/umbraco-cms/reference/querying/imembermanager.md index cc21bcfd108..ad7d58f0e74 100644 --- a/14/umbraco-cms/reference/querying/imembermanager.md +++ b/14/umbraco-cms/reference/querying/imembermanager.md @@ -23,6 +23,16 @@ _memberManager.IsLoggedIn() ### Dependency Injection +{% hint style="warning" %} + +* `UmbracoAuthorizedApiController` has been removed from Umbraco 14. Use`ManagementApiControllerBase` class instead. + +Read the [Creating a Backoffice API article](https://docs.umbraco.com/umbraco-cms/tutorials/creating-a-backoffice-api) for a comprehensive guide to writing APIs for the Management API. + +* `UmbracoApiController` is obsolete in Umbraco 14 and will be removed in Umbraco 15. + +{% endhint %} + If you wish to use the `IMemberManager` in a class that inherits from one of the Umbraco base classes (eg. `SurfaceController`, `UmbracoApiController`, or `UmbracoAuthorizedApiController`), you can use Dependency Injection. For instance, if you have registered your own class in Umbraco's dependency injection, you can specify the `IMemberManager` interface in your constructor: ```csharp diff --git a/14/umbraco-cms/reference/routing/authorized.md b/14/umbraco-cms/reference/routing/authorized.md index 1857c1e5ab5..5c37af6c936 100644 --- a/14/umbraco-cms/reference/routing/authorized.md +++ b/14/umbraco-cms/reference/routing/authorized.md @@ -4,6 +4,12 @@ description: "Requirements for authenticating requests for the backoffice" # Backoffice authentication +{% hint style="warning" %} +`UmbracoAuthorizedApiController` and `UmbracoAuthorizedJsonController` have been removed from Umbraco 14. Use `ManagementApiControllerBase` class instead. + +Read the [Creating a Backoffice API article](../../tutorials/creating-a-backoffice-api/README.md) for a comprehensive guide to writing APIs for the Management API. +{% endhint %} + In order for Umbraco to authenticate a request for the backoffice, the routing needs to be specific. Any URL that routes to: > /umbraco/backoffice/* @@ -100,10 +106,10 @@ public class MyController : UmbracoAuthorizedController } ``` - {% hint style="info" %} The route must be prefixed with the Umbraco path, which is configurable and resolved with `GetUmbracoMvcArea()` from `IGlobalSettings`. Then, it should be followed by "/backoffice" in order for Umbraco to check user authentication. {% endhint %} ### What about Surface Controllers? + Surface Controllers should not be used in the backoffice. Surface Controllers are not designed to work with the backoffice. They are not meant to be used there and will not be supported being used there. diff --git a/14/umbraco-cms/reference/routing/umbraco-api-controllers/README.md b/14/umbraco-cms/reference/routing/umbraco-api-controllers/README.md index a6a4cd46bef..4c1adecaaa6 100644 --- a/14/umbraco-cms/reference/routing/umbraco-api-controllers/README.md +++ b/14/umbraco-cms/reference/routing/umbraco-api-controllers/README.md @@ -101,6 +101,12 @@ For more information about areas, Urls and routing see the [routing section](rou ## Backoffice controllers +{% hint style="warning" %} +`UmbracoAuthorizedApiController` and `UmbracoAuthorizedJsonController` have been removed from Umbraco 14. Use`ManagementApiControllerBase` class instead. + +Read the [Creating a Backoffice API article](../../../tutorials/creating-a-backoffice-api/README.md) for a comprehensive guide to writing APIs for the Management API. +{% endhint %} + If you are creating a controller to work within the Umbraco backoffice then you will need to ensure that it is secured properly by inheriting from: `UmbracoAuthorizedApiController` or `UmbracoAuthorizedJsonController`. This controller type will auto-route your controller like the above examples except that it will add another segment to the path: 'backoffice'. `~/Umbraco/backoffice/Api/[YourControllerName]` diff --git a/14/umbraco-cms/reference/routing/umbraco-api-controllers/authorization.md b/14/umbraco-cms/reference/routing/umbraco-api-controllers/authorization.md index 4dec3db44ca..a5731d1d3b6 100644 --- a/14/umbraco-cms/reference/routing/umbraco-api-controllers/authorization.md +++ b/14/umbraco-cms/reference/routing/umbraco-api-controllers/authorization.md @@ -14,6 +14,12 @@ UmbracoApiController is obsolete in Umbraco 14 and will be removed in Umbraco 15 ### Inheriting from UmbracoAuthorizedApiController +{% hint style="warning" %} +`UmbracoAuthorizedApiController` has been removed from Umbraco 14. Use`ManagementApiControllerBase` class instead. + +Read the [Creating a Backoffice API article](../tutorials/creating-a-backoffice-api/README.md) for a comprehensive guide to writing APIs for the Management API. +{% endhint %} + Probably the easiest way to ensure your controller is secured for only backoffice users is to inherit from `Umbraco.Cms.Web.BackOffice.Controllers.UmbracoAuthorizedApiController`. This is essentially the same as applying `[Authorize(Policy = AuthorizationPolicies.BackOfficeAccess)]` to your controller (see below). The `UmbracoAuthorizedApiController` is automatically routed. Check out the [routing documentation](../authorized.md) for more information on this topic. diff --git a/14/umbraco-commerce/upgrading/version-specific-upgrades.md b/14/umbraco-commerce/upgrading/version-specific-upgrades.md index 622af7b3004..9990240f121 100644 --- a/14/umbraco-commerce/upgrading/version-specific-upgrades.md +++ b/14/umbraco-commerce/upgrading/version-specific-upgrades.md @@ -5,7 +5,7 @@ description: >- # Version Specific Upgrade Notes -This page covers specific upgrade documentation for when migrating to major 13 of Umbraco Commerce. +This page covers specific upgrade documentation for when migrating to major 14 of Umbraco Commerce. {% hint style="info" %} If you are upgrading to a new minor or patch version, you can find information about the breaking changes in the [Release Notes](../release-notes.md) article. @@ -13,7 +13,7 @@ If you are upgrading to a new minor or patch version, you can find information a ## Version Specific Upgrade Notes History -Version 13 contains a number of breaking changes from the previous, Vendr product. +Version 14 contains a number of breaking changes from the previous, Vendr product. See the [Migrate from Vendr to Umbraco Commerce guide](migrate-from-vendr-to-umbraco-commerce/) for full details.