diff --git a/src/Altinn.App.Core/Internal/Data/InstanceDataUnitOfWork.cs b/src/Altinn.App.Core/Internal/Data/InstanceDataUnitOfWork.cs
index aed0c5481..6c58d47d1 100644
--- a/src/Altinn.App.Core/Internal/Data/InstanceDataUnitOfWork.cs
+++ b/src/Altinn.App.Core/Internal/Data/InstanceDataUnitOfWork.cs
@@ -478,6 +478,14 @@ DataElementChange change
new MemoryAsStream(bytes),
authenticationMethod: GetAuthenticationMethod(change.DataType)
);
+
+ if (change.Metadata is not null)
+ {
+ dataElement.Metadata = [.. change.Metadata];
+ await _dataClient.Update(Instance, dataElement);
+ change.Lock = true;
+ }
+
// Update caches
_binaryCache.Set(dataElement, bytes);
change.DataElement = dataElement; // Set the data element so that it can be referenced later in the save process
diff --git a/src/Altinn.App.Core/Models/DataElementChanges.cs b/src/Altinn.App.Core/Models/DataElementChanges.cs
index bdf4b9edc..d049bc886 100644
--- a/src/Altinn.App.Core/Models/DataElementChanges.cs
+++ b/src/Altinn.App.Core/Models/DataElementChanges.cs
@@ -47,6 +47,11 @@ private protected DataElementChange(
ContentType = contentType;
}
+ ///
+ /// The metadata of the data element
+ ///
+ private List? _metadata;
+
///
/// The type of update: Create, Update or Delete
///
@@ -72,6 +77,37 @@ private protected DataElementChange(
/// The contentType of an element in storage
///
public string ContentType { get; }
+
+ ///
+ /// The metadata of the data element
+ ///
+ internal IReadOnlyCollection? Metadata => _metadata;
+
+ ///
+ /// If true, no more metadata can be added
+ ///
+ internal bool Lock { get; set; }
+
+ ///
+ /// Add metadata to a created data element
+ ///
+ public void AddMetadata(string key, string value)
+ {
+ ArgumentException.ThrowIfNullOrWhiteSpace(key);
+ ArgumentException.ThrowIfNullOrWhiteSpace(value);
+
+ if (Type != ChangeType.Created)
+ {
+ throw new InvalidOperationException("Metadata can only be added to created data elements");
+ }
+
+ if (Lock)
+ {
+ throw new InvalidOperationException("Metadata already locked");
+ }
+ _metadata ??= [];
+ _metadata.Add(new KeyValueEntry { Key = key, Value = value });
+ }
}
///
diff --git a/test/Altinn.App.Core.Tests/PublicApiTests.PublicApi_ShouldNotChange_Unintentionally.verified.txt b/test/Altinn.App.Core.Tests/PublicApiTests.PublicApi_ShouldNotChange_Unintentionally.verified.txt
index 6a1fc4d04..ab1a61b11 100644
--- a/test/Altinn.App.Core.Tests/PublicApiTests.PublicApi_ShouldNotChange_Unintentionally.verified.txt
+++ b/test/Altinn.App.Core.Tests/PublicApiTests.PublicApi_ShouldNotChange_Unintentionally.verified.txt
@@ -4157,6 +4157,7 @@ namespace Altinn.App.Core.Models
public Altinn.App.Core.Models.DataElementIdentifier DataElementIdentifier { get; }
public Altinn.Platform.Storage.Interface.Models.DataType DataType { get; }
public Altinn.App.Core.Models.ChangeType Type { get; }
+ public void AddMetadata(string key, string value) { }
}
public sealed class DataElementChanges
{