Validation

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:

EntityValidationBO.PNG 

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'
    }
}