Umbraco.UIBuilder.Automate
18.0.1
Prefix Reserved
dotnet add package Umbraco.UIBuilder.Automate --version 18.0.1
NuGet\Install-Package Umbraco.UIBuilder.Automate -Version 18.0.1
<PackageReference Include="Umbraco.UIBuilder.Automate" Version="18.0.1" />
<PackageVersion Include="Umbraco.UIBuilder.Automate" Version="18.0.1" />
<PackageReference Include="Umbraco.UIBuilder.Automate" />
paket add Umbraco.UIBuilder.Automate --version 18.0.1
#r "nuget: Umbraco.UIBuilder.Automate, 18.0.1"
#:package Umbraco.UIBuilder.Automate@18.0.1
#addin nuget:?package=Umbraco.UIBuilder.Automate&version=18.0.1
#tool nuget:?package=Umbraco.UIBuilder.Automate&version=18.0.1
<p align="center"> <img alt="Umbraco Automate" src="./assets/logo-128.png" width="128"> </p>
Umbraco.UIBuilder.Automate
Umbraco UI Builder triggers and actions for Umbraco Automate.
Overview
Umbraco.UIBuilder.Automate is a provider package that connects Umbraco UI Builder to Umbraco Automate, exposing UI Builder entity lifecycle events as first-class triggers and entity operations as actions in Automate flows — for example, notifying a channel when a new customer record is created, or cascading a delete to a related collection.
Key Features
- 3 triggers — react to entity created, saved, and deleted events across any registered UI Builder collection
- 2 actions — create and delete entities in a named UI Builder collection
- Rich trigger outputs — collection alias, entity ID, and the full entity serialized as JSON (encrypted properties omitted)
- Zero configuration — triggers and actions are automatically discovered by Umbraco Automate
Installation
dotnet add package Umbraco.UIBuilder.Automate
No further wiring is required — triggers and actions are auto-discovered by Umbraco Automate.
Requirements
- .NET 10.0
- Umbraco CMS 17.0.0+
- Umbraco UI Builder 17.0.0+
- Umbraco.Automate compatible version
Triggers
Fire an Automate flow when something happens in UI Builder.
| Trigger | Alias | Fires when… |
|---|---|---|
| Entity Saved | umbracoUIBuilder.entitySaved |
A UI Builder entity is created or updated in any registered collection |
| Entity Created | umbracoUIBuilder.entityCreated |
A UI Builder entity is created for the first time (not on subsequent updates) |
| Entity Deleted | umbracoUIBuilder.entityDeleted |
A UI Builder entity is deleted from any registered collection |
All three triggers support an optional Collection Alias setting to filter to a specific collection (case-insensitive); leave it blank to fire for all collections. Entity Created is derived from the same notification as Entity Saved, filtered to the case where no prior version of the entity existed.
Entity Saved / Entity Created output
| Property | Type | Description |
|---|---|---|
CollectionAlias |
string |
Alias of the collection the entity belongs to |
EntityId |
string |
Entity ID as a string (type depends on the collection's ID property) |
IsNew |
bool |
Entity Saved only — true if the entity was just created, false if it was updated |
EntityJson |
string |
Full entity serialized as JSON (encrypted properties omitted) |
Entity Deleted output
| Property | Type | Description |
|---|---|---|
CollectionAlias |
string |
Alias of the collection the entity belonged to |
EntityId |
string |
Entity ID as a string |
EntityJson |
string |
Entity state at deletion, serialized as JSON |
Note: Properties configured as encrypted on the collection are omitted from
EntityJsonso that decrypted secrets are never persisted in the outbox or exposed to automations.
Actions
Run UI Builder operations from an Automate flow.
| Action | What it does |
|---|---|
| Create Entity | Creates a new entity in a named UI Builder collection from a JSON payload |
| Delete Entity | Deletes an entity from a named UI Builder collection |
Create Entity
| Setting | Description | Supports bindings |
|---|---|---|
| Collection Alias | The alias of the collection to create in | ✅ |
| Entity JSON | The new entity serialized as JSON | ✅ |
| Output property | Type | Description |
|---|---|---|
EntityId |
string |
The new entity's ID as a string |
If the create is cancelled by an EntitySavingNotification handler or otherwise fails, the action fails with the underlying error rather than reporting a false success.
Delete Entity
| Setting | Description | Supports bindings |
|---|---|---|
| Collection Alias | The alias of the collection to delete from | ✅ |
| Entity ID | The ID of the entity to delete (as a string) | ✅ |
| Output property | Type | Description |
|---|---|---|
DeletedCount |
int |
Number of deleted records (0 if not found, 1 on success) |
Usage Examples
Notify on new entity creation
Trigger: Entity Saved (Collection Alias: customers)
→ Condition: IsNew == true
→ Action: Send Slack message
"New customer created: {EntityJson}"
Cascade delete related data
Trigger: Entity Deleted (Collection Alias: orders)
→ Action: Delete Entity on the orderLines collection
binding EntityId from the trigger output
Audit log all changes
Trigger: Entity Saved (no collection filter — fires for all collections)
→ Action: Write to an audit log system
passing CollectionAlias, EntityId, IsNew, EntityJson
How It Works
Why triggers inject IUIBuilderAdapter
UI Builder's EntitySavedNotification and EntityDeletedNotification are intentionally generic — they fire for every registered entity type across all collections and carry no collection context. Unlike Commerce or Engage notifications (which wrap a specific domain object), UI Builder notifications do not identify which collection an entity belongs to.
IUIBuilderAdapter resolves this at runtime by:
- Matching the entity's CLR type against registered collection configurations
- Extracting the entity ID using the collection's configured ID property
This is an intentional deviation from the standard Automate trigger pattern where constructor injection is limited to TriggerInfrastructure. The deviation is documented on the trigger classes.
Entities registered in multiple collections
A single CLR type can be registered in more than one UI Builder collection. Because UI Builder's notifications carry no collection context, there is no way to know which collection a saved or deleted entity actually belonged to. When a type matches multiple collections the event is attributed to a single collection deterministically (lowest alias, ordinal) and a warning is logged. If you need per-collection behaviour for a shared type, filter downstream on CollectionAlias, or register distinct CLR types per collection.
Idempotency
The Entity Created and Entity Deleted triggers set an idempotency key of {triggerAlias}:{collectionAlias}:{entityId} so that a duplicate notification for the same event is de-duplicated by the outbox. This key contains no version component, so for collections with reused natural keys (as opposed to auto-increment/GUID keys) a create-delete-recreate of the same ID within the outbox retention window could be de-duplicated. This does not affect the common case of database-generated identity or GUID keys. The Entity Saved trigger sets no idempotency key, so every save reaches the outbox.
No RequiredSections
UI Builder sections are created by the developer with custom aliases (e.g. "myShop", "crm"). There is no fixed UI Builder backoffice section alias, so RequiredSections cannot be set on triggers and actions. All Automate users can see UI Builder step types regardless of section membership.
Development
dotnet restore
dotnet build
dotnet test
Project layout
src/
Umbraco.UIBuilder.Automate/
Actions/ # Automate actions that call UI Builder operations
Internal/ # IUIBuilderAdapter and supporting collection/serialization helpers
Triggers/ # Automate triggers backed by UI Builder notifications
UIBuilderAutomateComposer.cs
tests/
Umbraco.UIBuilder.Automate.Tests.Unit/
Future Work
These UI Builder notifications exist and could be exposed as triggers in a future version:
| Notification | Event | Status |
|---|---|---|
EntitySavingNotification |
Before entity is saved (cancelable) | Not implemented |
EntityDeletingNotification |
Before entity is deleted (cancelable) | Not implemented |
Cancelable notifications are observable-only in the current Automate trigger model — they cannot veto the operation. (Entity Created is already exposed, derived from EntitySavedNotification, so it is not listed here.)
These operations could be exposed as actions in a future release:
| Action | Description |
|---|---|
| Get Entity | Retrieve a single entity by ID and collection alias |
| List Entities | Query entities from a collection with optional filtering |
| Update Entity | Update specific fields of an existing entity |
| Export Entities (CSV) | Export collection entries as CSV |
License
MIT — see LICENSE for details.
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net10.0 is compatible. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
-
net10.0
- Umbraco.Automate.Core (>= 18.0.0 && < 18.999.999)
- Umbraco.UIBuilder.Core (>= 18.0.0 && < 18.999.999)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.