Five New Optimizely Certifications are Here! Validate your expertise and advance your career with our latest certification exams. Click here to find out more
AI OnAI Off
Five New Optimizely Certifications are Here! Validate your expertise and advance your career with our latest certification exams. Click here to find out more
Hi,
You can implement the IValidate<T> interface and then filter current content link in the list like this:
public class ContactBlockValidation : ValidationAttribute, IValidate<ContactBlock> { public IEnumerable<ValidationError> Validate(ContactBlock instance) { var contentTypeRepository = ServiceLocator.Current.GetInstance<IContentTypeRepository>(); var repository = ServiceLocator.Current.GetInstance<IContentRepository>(); var contentModelUsage = ServiceLocator.Current.GetInstance<IContentModelUsage>(); var blockType = contentTypeRepository.Load<ChapterBlock>(); var currentContent = instance as IContent; IEnumerable<ContentUsage> list = contentModelUsage.ListContentOfContentType(blockType); if (currentContent != null) { list = list.Where(x => !x.ContentLink.CompareToIgnoreWorkID(currentContent.ContentLink)); } IEnumerable<ContentReference> references = list.Select(x => x.ContentLink.ToReferenceWithoutVersion()).Distinct(); foreach (ContentReference cr in references) { ContactBlock cb; if (!repository.TryGet(cr, out cb)) { continue; } if (cb.Email != null && cb.Email.Equals(instance.Email, StringComparison.OrdinalIgnoreCase)) { return new[] { new ValidationError { PropertyName = "Email", ErrorMessage = "A contact block with supplied email already exists." } }; } } return Enumerable.Empty<ValidationError>(); } }
list = list.Where(x => !x.ContentLink.CompareToIgnoreWorkID(currentContent.ContentLink));
did the trick. Thanks Mattias!
Hey all
A customer of mine has a solution where they store their contacts as global blocks (a Contact block). I now need to add custom validation for a couple of fields (name, email) to ensure that they're not already published in previous contacts (ie Contact blocks).
I've tried both using ValidationAttribute and IValidate. I search for existing Contact blocks to see whether name/email exists. The problem is that I can't separate previously published Contact blocks from the one I'm currently editing, which in the end always result in a validation error (name/email already exists). So for instance, if I create a new block and type in a name that isn't used anywhere, I get a validation error which originates from the new block.
Example code:
Maybe switch ToReferenceWithoutVersion for something else?
Any help greatly appreciated.