Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions 15/umbraco-workflow/release-notes.md
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,9 @@ Check the [Version Specific Upgrade Notes](upgrading/version-specific.md) articl

This section contains the release notes for Umbraco Workflow 15 including all changes for this version.

### 15.1.5 (https://github.com/umbraco/Umbraco.Workflow.Issues/issues?q=is%3Aissue+is%3Aclosed+label%3Arelease%2F15.1.5) (June 11 2025)
* Fixes pagination offset in editor dashboards [#105](https://github.com/umbrco/Umbraco.Workflow.Issues/issues/105)

### 15.1.4 (https://github.com/umbraco/Umbraco.Workflow.Issues/issues?q=is%3Aissue+is%3Aclosed+label%3Arelease%2F15.1.4) (May 29 2025)
* Improves task summary display in notification emails [#94](https://github.com/umbraco/Umbraco.Workflow.Issues/issues/94)
* Fixes error when attempting to open the workflow detail dialog from the editor dashboard
Expand Down
50 changes: 5 additions & 45 deletions 16/umbraco-workflow/release-notes.md
Original file line number Diff line number Diff line change
Expand Up @@ -14,52 +14,12 @@ Check the [Version Specific Upgrade Notes](upgrading/version-specific.md) articl

## Release History

This section contains the release notes for Umbraco Workflow 15 including all changes for this version.
This section contains the release notes for Umbraco Workflow 16 including all changes for this version.

### 15.1.2 (April 2 2025)
* Improves culture variant handling in Advanced Search
* Ensure case-insensitive culture comparison when fetching tasks

### 15.1.1 (March 20 2025)
* Fixes an intermittent issue where fetching approval groups in a mapper resulted in a scoping error

### 15.1.0 (https://github.com/umbraco/Umbraco.Workflow.Issues/issues?q=is%3Aissue+is%3Aclosed+label%3Arelease%2F15.1.0) (March 7 2025 )
* Dependency update for Umbraco.Licenses (making this release a minor)
* Fixes pagination in assigned-to task table [#96](https://github.com/umbraco/Umbraco.Workflow.Issues/issues/91)
* Fixes off-by-one bug when calculating approval thresholds with implicit approval [#97](https://github.com/umbraco/Umbraco.Workflow.Issues/issues/97)
* Allow searching for empty fields in advanced search. For example, search for all Product documents with no SKU

### 15.0.4 (March 3, 2025)
* Fixes an issue where Workflow's content lock was always applied on documents where Workflow was not configured.
* Fixes a related issue where the content lock was never applied on invariant documents with no Workflow configuration.

### 15.0.3 (February 14, 2025)
* Fixes SQLite migration bug where async methods were causing a race condition.

### [15.0.2](https://github.com/umbraco/Umbraco.Workflow.Issues/issues?q=is%3Aissue+is%3Aclosed+label%3Arelease%2F15.0.2) (January 16 2025 )
* Fixes workflow task summary generation in email body [#91](https://github.com/umbraco/Umbraco.Workflow.Issues/issues/91)
* Fixes localization in email body
* Updates Umbraco.Licenses dependency
* Refactors migration plan naming to align with the broader DXP product suite.

### 15.0.1 (December 16th 2024)
* Fixes column type mismatch in migration
* Correctly implements delay time in History Cleanup hosted service

### 15.0.0 (November 14th, 2024)
* Compatibility with Umbraco 15
* Replaces entity action wrappers with `umbExtensionRegistry.appendCondition()`
* Adds abstraction over `UmbContentWorkspaceContext.readOnlyState` to consistently implement readonly document workspaces.
* Fixes invariant culture handling when unlocking a scheduled document.

### 15.0.0-rc3 (November 8th, 2024)
* Compatibility with Umbraco 15-rc3

### 15.0.0-rc2 (October 23rd, 2024)
* Compatibility with Umbraco 15-rc2

### 15.0.0-rc1 (October 9th, 2024)
* Compatibility with Umbraco 15-rc1
### 16.0.0 (June 12 2025)
* Compatibility with Umbraco 16
* **FEATURE** => Alternate Versions. Refer to [Alternate Versions](alternate-versions/alternate-versions) for more details.
* **FEATURE** => Release Sets. Refer to [Release Sets](release-sets/release-sets.md) for more details.

## Legacy release notes

Expand Down
105 changes: 79 additions & 26 deletions 16/umbraco-workflow/upgrading/version-specific.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,38 +6,91 @@ description: >-

# Version Specific Upgrade Notes

This page covers specific upgrade documentation for when migrating to Umbraco Workflow version 14.
This page covers specific upgrade documentation for when migrating to Umbraco Workflow version 16.

{% 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.
{% endhint %}

## Version Specific Upgrade Notes History

Version 14 of Umbraco Workflow has a minimum dependency on Umbraco CMS core of `14.1.0`. It runs on .NET 8.

#### **Breaking changes**

Version 14 contains a number of breaking changes, primarily due to the new backoffice introduced in Umbraco 14. The details are listed here:

#### **Behaviour**

* A new management API has been introduced at `umbraco/workflow/management/api`

#### Dependencies

* Umbraco CMS dependency was updated to `14.1.0`

#### **Code**

Workflow 14 includes a non-trivial number of breaking code changes, primarily related to namespace changes. The majority of these related to removing the `Implement` namespace for services, and moving appropriate models to `Umbraco.Workflow.Core.ViewModels` or `Umbraco.Workflow.Core.Interfaces`.

* The serialization library has been changed from `Newtonsoft.Json` to `System.Text.Json`.
* Approval group identifiers changes from int to Guid.
* Workflow instance author identifier changes from int to Guid.
* Workflow task indentifiers for approving user, assigned user and actioning user change from int to Guid.
* Services return `Attempt<TResult>` or `Attempt<TResult, TStatus>`, in line with similar changes in the CMS.

## Legacy version specific upgrade notes
Version 16 of Umbraco Workflow has a minimum dependency on Umbraco CMS core of `16.0.0`. It runs on .NET 9.

## Breaking changes

Version 16 contains a number of breaking changes. The details are listed here:

### Dependencies

* Umbraco CMS dependency was updated to `16.0.0`

### Code

The list below includes all changes raising validation errors `CP0001`, `CP0002` and `CP0006` between versions 15.1.5 and 16.0.0.

Of note are changes to API controller constructors to accept an `IWorkflowProcessFactory` argument and the removal of `IInstancesService.Create` (`IWorkflowInstanceGenerator.Create` should be used instead). Other changes are not typical extension or integration points, but are listed below for reference.

#### Removed Types
- `Umbraco.Workflow.Core.Models.GlobalUserVariablesModel`
- `Umbraco.Workflow.Core.Models.GlobalVariablesModel`
- `Umbraco.Workflow.Core.Models.OptionType`
- `Umbraco.Workflow.Core.Processes.ICompleteWorkflowInstances`
- `Umbraco.Workflow.Web.Api.Controllers.Settings.GetVersionSettingsController`

#### Removed Members
- `Umbraco.Workflow.Core.ApprovalGroups.Services.IGroupService.GetUserGroupWithUsers``1(System.Guid)`
- `Umbraco.Workflow.Core.ApprovalGroups.ViewModels.ApprovalGroupDetailPermissionConfigModel.get_ApprovalThreshold`
- `Umbraco.Workflow.Core.ApprovalGroups.ViewModels.DocumentTypePermissionConfigModel.get_ApprovalThreshold`
- `Umbraco.Workflow.Core.Email.Models.HtmlEmailModel.#ctor(Umbraco.Cms.Core.Services.ILocalizedTextService,Umbraco.Cms.Core.Services.IUserService,Umbraco.Workflow.Core.Configuration.ColorSettings)`
- `Umbraco.Workflow.Core.Models.Enums.WorkflowType.Both`
- `Umbraco.Workflow.Core.Models.GlobalWorkflowVariablesModel.get_DefaultApprovalThreshold`
- `Umbraco.Workflow.Core.Models.GlobalWorkflowVariablesModel.get_FlowType`
- `Umbraco.Workflow.Core.Models.ScaffoldRequestModel.get_ContentTypeKey`
- `Umbraco.Workflow.Core.Models.ScaffoldRequestModel.set_ContentTypeKey(System.Guid)`
- `Umbraco.Workflow.Core.Persistence.ITasksRepository.GetActiveByNodeId(System.Int32)`
- `Umbraco.Workflow.Core.Processes.IWorkflowProcessGenerator.GetProcess(Umbraco.Workflow.Core.Models.Enums.WorkflowType)`
- `Umbraco.Workflow.Core.Services.IInstancesService.Create(Umbraco.Workflow.Core.ViewModels.InitiateWorkflowRequestModel)`
- `Umbraco.Workflow.Core.Services.ITasksService.GetActiveTasksByNodeId(System.Int32,System.String)`
- `Umbraco.Workflow.Core.Services.ScaffoldService.#ctor(Umbraco.Workflow.Core.Services.ITasksService,Umbraco.Workflow.Core.Services.IConfigService,Umbraco.Workflow.Core.ContentReviews.Services.IContentReviewService,Umbraco.Workflow.Core.Persistence.IContentRepository,Umbraco.Workflow.Core.Services.ISettingsService,Umbraco.Cms.Core.Mapping.IUmbracoMapper,Umbraco.Cms.Core.Services.IIdKeyMap,Umbraco.Cms.Core.Services.IContentService)`
- `Umbraco.Workflow.Core.ViewModels.InstanceDetailViewModel.get_Status`
- `Umbraco.Workflow.Core.ViewModels.InstanceDetailViewModel.get_Type`
- `Umbraco.Workflow.Core.ViewModels.InstanceDetailViewModel.get_WorkflowStatus`
- `Umbraco.Workflow.Core.ViewModels.InstanceDetailViewModel.get_WorkflowType`
- `Umbraco.Workflow.Core.ViewModels.InstanceDetailViewModel.set_WorkflowStatus(Umbraco.Workflow.Core.Models.Enums.WorkflowStatus)`
- `Umbraco.Workflow.Core.ViewModels.InstanceDetailViewModel.set_WorkflowType(Umbraco.Workflow.Core.Models.Enums.WorkflowType)`
- `Umbraco.Workflow.Core.ViewModels.LanguageViewModel.get_IsDefault`
- `Umbraco.Workflow.Core.ViewModels.LanguageViewModel.set_IsDefault(System.Boolean)`
- `Umbraco.Workflow.Core.ViewModels.UserItemModel.set_Name(System.String)`
- `Umbraco.Workflow.Core.ViewModels.UserItemModel.set_Unique(System.Guid)`
- `Umbraco.Workflow.Core.ViewModels.WorkflowInstanceViewModel.get_StatusName`
- `Umbraco.Workflow.Core.ViewModels.WorkflowInstanceViewModel.get_TypeDescription`
- `Umbraco.Workflow.Core.ViewModels.WorkflowInstanceViewModel.set_StatusName(System.String)`
- `Umbraco.Workflow.Core.ViewModels.WorkflowInstanceViewModel.set_TypeDescription(System.String)`
- `Umbraco.Workflow.Core.ViewModels.WorkflowTaskCollectionViewModel.get_ApprovalsText`
- `Umbraco.Workflow.Core.ViewModels.WorkflowTaskCollectionViewModel.set_ApprovalsText(System.String)`
- `Umbraco.Workflow.Core.ViewModels.WorkflowTaskViewModel.get_Status`
- `Umbraco.Workflow.Core.ViewModels.WorkflowTaskViewModel.get_TypeDescription`
- `Umbraco.Workflow.Core.ViewModels.WorkflowTaskViewModel.get_TypeId`
- `Umbraco.Workflow.Core.ViewModels.WorkflowTaskViewModel.set_TypeDescription(System.String)`
- `Umbraco.Workflow.Core.ViewModels.WorkflowTaskViewModel.set_TypeId(System.Int32)`
- `Umbraco.Workflow.Web.Api.Controllers.Action.ApproveActionController.#ctor(Umbraco.Workflow.Core.Services.IInstancesService,Umbraco.Workflow.Core.Processes.IWorkflowProcessGenerator,Umbraco.Workflow.Core.Mapping.IWorkflowActionResponsePresentationMapper)`
- `Umbraco.Workflow.Web.Api.Controllers.Action.ApproveOrRejectActionController.#ctor(Umbraco.Workflow.Core.Services.IInstancesService,Umbraco.Workflow.Core.Processes.IWorkflowProcessGenerator,Umbraco.Workflow.Core.Mapping.IWorkflowActionResponsePresentationMapper)`
- `Umbraco.Workflow.Web.Api.Controllers.Action.CancelActionController.#ctor(Umbraco.Workflow.Core.Services.IInstancesService,Umbraco.Workflow.Core.Processes.IWorkflowProcessGenerator,Umbraco.Workflow.Core.Mapping.IWorkflowActionResponsePresentationMapper)`
- `Umbraco.Workflow.Web.Api.Controllers.Action.RejectActionController.#ctor(Umbraco.Workflow.Core.Services.IInstancesService,Umbraco.Workflow.Core.Processes.IWorkflowProcessGenerator,Umbraco.Workflow.Core.Mapping.IWorkflowActionResponsePresentationMapper)`
- `Umbraco.Workflow.Web.Api.Controllers.Action.RequiresInstanceActionController.#ctor(Umbraco.Workflow.Core.Services.IInstancesService,Umbraco.Workflow.Core.Processes.IWorkflowProcessGenerator,Umbraco.Workflow.Core.Mapping.IWorkflowActionResponsePresentationMapper)`
- `Umbraco.Workflow.Web.Api.Controllers.Action.ResubmitActionController.#ctor(Umbraco.Workflow.Core.Services.IInstancesService,Umbraco.Workflow.Core.Mapping.IWorkflowActionResponsePresentationMapper,Umbraco.Workflow.Core.Processes.IWorkflowProcessGenerator)`
- `Umbraco.Workflow.Web.Api.Controllers.ApprovalGroup.DeleteApprovalGroupController.#ctor(Umbraco.Workflow.Core.ApprovalGroups.Services.IGroupService,Umbraco.Cms.Core.Security.IBackOfficeSecurityAccessor,Umbraco.Workflow.Core.Services.IInstancesService,Umbraco.Workflow.Core.Processes.IWorkflowProcessGenerator,Umbraco.Workflow.Core.Services.INotificationsService,Umbraco.Workflow.Core.Services.IConfigService)`
- `Umbraco.Workflow.Web.Api.Controllers.Information.GetInformationController.#ctor(Umbraco.Cms.Core.PublishedCache.IDefaultCultureAccessor,Umbraco.Cms.Core.Security.IBackOfficeSecurityAccessor,Umbraco.Cms.Core.Services.ILanguageService,Microsoft.Extensions.Options.IOptions{Umbraco.Workflow.Core.HistoryCleanup.Configuration.HistoryCleanup},Umbraco.Workflow.Core.Services.ISettingsService,Umbraco.Workflow.Core.SignalR.WorkflowHubRoutes)`
- `Umbraco.Workflow.Web.Api.Controllers.Information.GetInformationController.WorkflowInformationResponseModel.get_GlobalVariables`
- `Umbraco.Workflow.Web.Api.Controllers.Scaffold.GetScaffoldController.Get(Umbraco.Workflow.Core.Models.ScaffoldRequestModel)`

#### Added Interface Members (Breaking)
- `Umbraco.Workflow.Core.Persistence.IDatabaseAccessor.Execute(NPoco.Sql)`
- `Umbraco.Workflow.Core.Persistence.IDatabaseAccessor.ExecuteScalar``1(NPoco.Sql)`
- `Umbraco.Workflow.Core.Persistence.ITasksRepository.GetActiveByNodeId(System.Int32,System.String)`
- `Umbraco.Workflow.Core.Persistence.IWorkflowRepository``1.GetIdForKey``1(System.Guid)`
- `Umbraco.Workflow.Core.Services.ITasksService.GetActiveTasksByNodeId(System.Int32,System.String,System.String)`

### Legacy version specific upgrade notes

You can find the version specific upgrade notes for versions out of support in the [Legacy documentation on GitHub](https://github.com/umbraco/UmbracoDocs/tree/umbraco-eol-versions).