Entity validation
With the new API introduced in Litium 5 it is possible to validate entity modifications by inheriting the abstract class ValidationRuleBase.
The example validation below is triggered on every modification of a BaseProduct-entity.
using Litium.Products;
using Litium.Validations;
namespace Litium.Accelerator.Validations.EntityValidations
{
public class ProductSpecificationLength : ValidationRuleBase<BaseProduct>
{
public override ValidationResult Validate(BaseProduct entity, ValidationMode validationMode)
{
var result = new ValidationResult();
foreach (var localization in entity.Localizations)
{
var specification = entity.Fields.GetValue<string>("Specification", localization.Key);
var specificationIsTooLong = !string.IsNullOrEmpty(specification) && specification.Length > 50;
if (specificationIsTooLong)
{
// Add an error message to the ValidationResult to fail validation
// First parameter defines where the errormessage should be displayed on edit-page,
// in this case the message will display next to the specification field.
result.AddError("Specification", "Specification can only be 50 characters long");
}
}
return result;
}
}
}
On save:
Catch as ValidationException when updating entities in code, example:
private void SaveBaseProduct(string longText)
{
var baseProduct = _baseProductService.Get("636488389283921171-0001");
var writeableBaseProduct = baseProduct.MakeWritableClone();
writeableBaseProduct.Fields.AddOrUpdateValue("Specification", CultureInfo.CurrentCulture, longText);
try
{
_baseProductService.Update(writeableBaseProduct);
}
catch (Litium.Validations.ValidationException e)
{
// e.Message:
// Validation error for BaseProduct(SystemId: d450ff6f-95a3-4965-bb4b-f8f9510c53f4, Id: 636488389283921171-0001),
// Specification: 'Specification can only be 50 characters long'
}
}
|