Press Ctrl / CMD + C to copy this to your clipboard.
This post will be reported to the moderators as potential spam to be looked at
I have created a custom property and it stares a json object.
It worked initially when the propertyEditorSchemaAlias was a Umbraco.Plain.Json
But now trying to add the DataValueEditor and validation as per the my suggestions example but this is for a string.
Cant find the documentation to support other value types.
Code is as below
namespace Umbraco.Docs.PropertyEditors;
[DataEditor("IBD.Additional.Classes", ValueEditorIsReusable = true)] public class IBDAdditionalClassesDataEditor : DataEditor { public IBDAdditionalClassesDataEditor(IDataValueEditorFactory dataValueEditorFactory) : base(dataValueEditorFactory) { }
protected override IDataValueEditor CreateValueEditor() => DataValueEditorFactory.Create<IBDAdditionalClassesDataValueEditor>(Attribute!);
}
public class IBDAdditionalClassesDataValueEditor : DataValueEditor { public IBDAdditionalClassesDataValueEditor( IShortStringHelper shortStringHelper, IJsonSerializer jsonSerializer, IIOHelper ioHelper, DataEditorAttribute attribute) : base(shortStringHelper, jsonSerializer, ioHelper, attribute) => Validators.Add(new IBDAdditionalClassesValueValidator()); } public class IBDAdditionalClassesValueValidator : IValueValidator { public IEnumerable<ValidationResult> Validate(object? value, string? valueType, object? dataTypeConfiguration) { return (value is System.Text.Json.JsonDocument && dataTypeConfiguration is not Dictionary<string, object?> dataTypeConfigurationValues) ? [] : [new ValidationResult($"Not Valid value")]; } }
Not sure if the validation is correct?
Error that is logged is this when saving and publishing the document.
{"@t":"2024-10-07T14:34:07.7927704Z","@mt":"Exception ({InstanceId}).","@l":"Error","@x":"Microsoft.Data.SqlClient.SqlException (0x80131904): String or binary data would be truncated in table 'Development-u14.dbo.umbracoPropertyData', column 'varcharValue'. Truncated value: '[\r\n {\r\n \"key\": \"d4a313e4-29db-43c8-b00f-d6e0bf1d28c1\",\r\n \"heading\": \"Pod Styles\",\r\n \"type\"'.\r\nThe statement has been terminated.\r\n at Microsoft.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection, Action`1 wrapCloseInAction)\r\n at Microsoft.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection, Action`1 wrapCloseInAction)\r\n at Microsoft.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj, Boolean callerHasConnectionLock, Boolean asyncClose)\r\n at Microsoft.Data.SqlClient.TdsParser.TryRun(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj, Boolean& dataReady)\r\n at Microsoft.Data.SqlClient.SqlDataReader.TryConsumeMetaData()\r\n at Microsoft.Data.SqlClient.SqlDataReader.get_MetaData()\r\n at Microsoft.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds, RunBehavior runBehavior, String resetOptionsString, Boolean isInternal, Boolean forDescribeParameterEncryption, Boolean shouldCacheForAlwaysEncrypted)\r\n at Microsoft.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, Boolean isAsync, Int32 timeout, Task& task, Boolean asyncWrite, Boolean inRetry, SqlDataReader ds, Boolean describeParameterEncryptionRequest)\r\n at Microsoft.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, TaskCompletionSource`1 completion, Int32 timeout, Task& task, Boolean& usedCache, Boolean asyncWrite, Boolean inRetry, String method)\r\n at Microsoft.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method)\r\n at Microsoft.Data.SqlClient.SqlCommand.ExecuteScalar()\r\n at StackExchange.Profiling.Data.ProfiledDbCommand.ExecuteScalar() in C:\\projects\\dotnet\\src\\MiniProfiler.Shared\\Data\\ProfiledDbCommand.cs:line 315\r\n at Umbraco.Cms.Infrastructure.Persistence.FaultHandling.FaultHandlingDbCommand.<ExecuteScalar>b__36_0()\r\n at Umbraco.Cms.Infrastructure.Persistence.FaultHandling.RetryPolicy.ExecuteAction[TResult](Func`1 func)\r\n at Umbraco.Cms.Infrastructure.Persistence.FaultHandling.FaultHandlingDbCommand.ExecuteScalar()\r\n at NPoco.Database.<>c__DisplayClass297_0.<ExecuteScalarHelper>b__0()\r\n at NPoco.Database.ExecuteScalarHelper(DbCommand cmd)\r\n at NPoco.Database.NPoco.IDatabaseHelpers.ExecuteScalarHelper(DbCommand cmd)\r\n at NPoco.DatabaseTypes.SqlServerDatabaseType.ExecuteInsert[T](Database db, DbCommand cmd, String primaryKeyName, Boolean useOutputClause, T poco, Object[] args)\r\n at NPoco.Database.InsertAsyncImp[T](PocoData pocoData, String tableName, String primaryKeyName, Boolean autoIncrement, T poco, Boolean sync)\r\n at NPoco.AsyncHelper.RunSync[T](Task`1 task)\r\n at NPoco.Database.Insert[T](String tableName, String primaryKeyName, Boolean autoIncrement, T poco)\r\n at NPoco.Database.Insert[T](T poco)\r\n at Umbraco.Cms.Infrastructure.Persistence.Repositories.Implement.ContentRepositoryBase`3.ReplacePropertyValues(TEntity entity, Int32 versionId, Int32 publishedVersionId, Boolean& edited, HashSet`1& editedCultures)\r\n at Umbraco.Cms.Infrastructure.Persistence.Repositories.Implement.DocumentRepository.PersistUpdatedItem(IContent entity)\r\n at Umbraco.Cms.Core.Cache.DefaultRepositoryCachePolicy`2.Update(TEntity entity, Action`1 persistUpdated)\r\nClientConnectionId:2680b7c2-0a21-4af7-8681-79acab983656\r\nError Number:2628,State:1,Class:16","@tr":"218c5d12d37bb4ad26e34a029b534e72","@sp":"f2e8e742b76d6b77","InstanceId":"2a8165bc","SourceContext":"Umbraco.Cms.Infrastructure.Persistence.UmbracoDatabase","ActionId":"a170bfd8-0bff-40af-be92-a1a65928475b","ActionName":"Umbraco.Cms.Api.Management.Controllers.Document.UpdateDocumentController.Update (Umbraco.Cms.Api.Management)","RequestId":"40000023-000d-f600-b63f-84710c7967bb","RequestPath":"/umbraco/management/api/v1/document/7f14b779-20a6-4b0a-8b32-cbc4032c319e","ProcessId":25944,"ProcessName":"iisexpress","ThreadId":83,"ApplicationId":"22a156123ee2f165741f6e63316cf003dd6ac00f","MachineName":"IBD-MSI-DESKTOP","Log4NetLevel":"ERROR","HttpRequestId":"2ddc0684-fd6d-43a6-abb2-cae9fb25a1c6","HttpRequestNumber":4,"HttpSessionId":"7f001777-e3f9-10e1-afa1-f7ac956b8b9e"} {"@t":"2024-10-07T14:34:07.9135880Z","@mt":"Content save operation failed","@l":"Error","@x":"Microsoft.Data.SqlClient.SqlException (0x80131904): String or binary data would be truncated in table 'Development-u14.dbo.umbracoPropertyData', column 'varcharValue'. Truncated value: '[\r\n {\r\n \"key\": \"d4a313e4-29db-43c8-b00f-d6e0bf1d28c1\",\r\n \"heading\": \"Pod Styles\",\r\n \"type\"'.\r\nThe statement has been terminated.\r\n at Microsoft.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection, Action`1 wrapCloseInAction)\r\n at Microsoft.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection, Action`1 wrapCloseInAction)\r\n at Microsoft.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj, Boolean callerHasConnectionLock, Boolean asyncClose)\r\n at Microsoft.Data.SqlClient.TdsParser.TryRun(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj, Boolean& dataReady)\r\n at Microsoft.Data.SqlClient.SqlDataReader.TryConsumeMetaData()\r\n at Microsoft.Data.SqlClient.SqlDataReader.get_MetaData()\r\n at Microsoft.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds, RunBehavior runBehavior, String resetOptionsString, Boolean isInternal, Boolean forDescribeParameterEncryption, Boolean shouldCacheForAlwaysEncrypted)\r\n at Microsoft.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, Boolean isAsync, Int32 timeout, Task& task, Boolean asyncWrite, Boolean inRetry, SqlDataReader ds, Boolean describeParameterEncryptionRequest)\r\n at Microsoft.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, TaskCompletionSource`1 completion, Int32 timeout, Task& task, Boolean& usedCache, Boolean asyncWrite, Boolean inRetry, String method)\r\n at Microsoft.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method)\r\n at Microsoft.Data.SqlClient.SqlCommand.ExecuteScalar()\r\n at StackExchange.Profiling.Data.ProfiledDbCommand.ExecuteScalar() in C:\\projects\\dotnet\\src\\MiniProfiler.Shared\\Data\\ProfiledDbCommand.cs:line 315\r\n at Umbraco.Cms.Infrastructure.Persistence.FaultHandling.FaultHandlingDbCommand.<ExecuteScalar>b__36_0()\r\n at Umbraco.Cms.Infrastructure.Persistence.FaultHandling.RetryPolicy.ExecuteAction[TResult](Func`1 func)\r\n at Umbraco.Cms.Infrastructure.Persistence.FaultHandling.FaultHandlingDbCommand.ExecuteScalar()\r\n at NPoco.Database.<>c__DisplayClass297_0.<ExecuteScalarHelper>b__0()\r\n at NPoco.Database.ExecuteScalarHelper(DbCommand cmd)\r\n at NPoco.Database.NPoco.IDatabaseHelpers.ExecuteScalarHelper(DbCommand cmd)\r\n at NPoco.DatabaseTypes.SqlServerDatabaseType.ExecuteInsert[T](Database db, DbCommand cmd, String primaryKeyName, Boolean useOutputClause, T poco, Object[] args)\r\n at NPoco.Database.InsertAsyncImp[T](PocoData pocoData, String tableName, String primaryKeyName, Boolean autoIncrement, T poco, Boolean sync)\r\n at NPoco.AsyncHelper.RunSync[T](Task`1 task)\r\n at NPoco.Database.Insert[T](String tableName, String primaryKeyName, Boolean autoIncrement, T poco)\r\n at NPoco.Database.Insert[T](T poco)\r\n at Umbraco.Cms.Infrastructure.Persistence.Repositories.Implement.ContentRepositoryBase`3.ReplacePropertyValues(TEntity entity, Int32 versionId, Int32 publishedVersionId, Boolean& edited, HashSet`1& editedCultures)\r\n at Umbraco.Cms.Infrastructure.Persistence.Repositories.Implement.DocumentRepository.PersistUpdatedItem(IContent entity)\r\n at Umbraco.Cms.Core.Cache.DefaultRepositoryCachePolicy`2.Update(TEntity entity, Action`1 persistUpdated)\r\n at Umbraco.Cms.Infrastructure.Persistence.Repositories.Implement.EntityRepositoryBase`2.Save(TEntity entity)\r\n at Umbraco.Cms.Core.Services.ContentService.Save(IContent content, Nullable`1 userId, ContentScheduleCollection contentSchedule)\r\n at Umbraco.Cms.Core.Services.ContentEditingService.Save(IContent content, Guid userKey)\r\nClientConnectionId:2680b7c2-0a21-4af7-8681-79acab983656\r\nError Number:2628,State:1,Class:16","@tr":"218c5d12d37bb4ad26e34a029b534e72","@sp":"f2e8e742b76d6b77","SourceContext":"Umbraco.Cms.Core.Services.ContentEditingService","ActionId":"a170bfd8-0bff-40af-be92-a1a65928475b","ActionName":"Umbraco.Cms.Api.Management.Controllers.Document.UpdateDocumentController.Update (Umbraco.Cms.Api.Management)","RequestId":"40000023-000d-f600-b63f-84710c7967bb","RequestPath":"/umbraco/management/api/v1/document/7f14b779-20a6-4b0a-8b32-cbc4032c319e","ProcessId":25944,"ProcessName":"iisexpress","ThreadId":83,"ApplicationId":"22a156123ee2f165741f6e63316cf003dd6ac00f","MachineName":"IBD-MSI-DESKTOP","Log4NetLevel":"ERROR","HttpRequestId":"2ddc0684-fd6d-43a6-abb2-cae9fb25a1c6","HttpRequestNumber":4,"HttpSessionId":"7f001777-e3f9-10e1-afa1-f7ac956b8b9e"}
I think some how I need the IBD.Additional.Classes to be stored in the textValue column for the table rather than the varCharString column.
or make IBD.Additional.Classes the equivalent of Umbraco.Plain.JSon
is working on a reply...
Write your reply to:
Upload image
Image will be uploaded when post is submitted
Umrabraco 14 'String or binary data would be truncated in table 'Development-u14.dbo.umbracoPropertyData'
I have created a custom property and it stares a json object.
It worked initially when the propertyEditorSchemaAlias was a Umbraco.Plain.Json
But now trying to add the DataValueEditor and validation as per the my suggestions example but this is for a string.
Cant find the documentation to support other value types.
Code is as below
namespace Umbraco.Docs.PropertyEditors;
[DataEditor("IBD.Additional.Classes", ValueEditorIsReusable = true)] public class IBDAdditionalClassesDataEditor : DataEditor { public IBDAdditionalClassesDataEditor(IDataValueEditorFactory dataValueEditorFactory) : base(dataValueEditorFactory) { }
}
Not sure if the validation is correct?
Error that is logged is this when saving and publishing the document.
I think some how I need the IBD.Additional.Classes to be stored in the textValue column for the table rather than the varCharString column.
or make IBD.Additional.Classes the equivalent of Umbraco.Plain.JSon
is working on a reply...