Today I faced a Sitecore website rollout problem I’ve never thought of before. When doing a multi language/multi market solution, it’s common to use cloning or other kinds of fallback techniques. This is typically very good, but sometimes it brings some new problems as well.
The scenario I faced was that I wanted to make sure that certain fields did not inherit any value from standard values, default values or via cloning. In my particular case, I wanted to ensure that certain integration settings where defined for each website, even if the sites were cloned. Maybe not a very common requirement, but here’s another example:
Let’s say you have a field that stores a Google Analytics UA code, maybe that code should be defined on each locations where it’s used. Not inherited between sites. (Depending on how you’ve configured GA of course.)
A simple way of solving this is to create a Field Validator that tests this. Here’s some sample code on how to implement such validator:
public class FieldDoesNotInheritValueValidator : StandardValidator
{
protected override ValidatorResult Evaluate()
{
var field = GetField();
if (field == null)
return ValidatorResult.Valid;
// Get field value without resolving fallbacks
if (field.GetValue(false, false) != null)
return ValidatorResult.Valid;
Text = GetText("The field \"{0}\" does not contain a value.", GetFieldDisplayName());
return GetFailedResult(ValidatorResult.Warning);
}
protected override ValidatorResult GetMaxValidatorResult()
{
return ValidatorResult.Warning;
}
public override string Name
{
get { return "Field does not inherit value"; }
}
}
Just add a new Validation Rule item among the master:/sitecore/system/Settings/Validation Rules/Field Rules and define the class above Your.Namespace.FieldDoesNotInheritValueValidator, Your.Assembly as any other Field validation rule
http://www.sitecore.net/learn/blogs/technical-blogs/john-west-sitecore-blog/posts/2011/05/all-about-validation-with-the-sitecore-aspnet-cms.aspx
Cool idea. You can also use this setting: ItemCloning.NonInheritedFields