我们正在使用Sitecore 7.2并且已经为字段数量实现了“必需”字段验证器。
但是,用户仍然可以保存或创建包含验证错误的项目。
我知道我们可以阻止使用工作流发布此验证错误项目。
我们不想实施任何工作流程,因此有人可以建议如何阻止验证错误项目能够发布吗?
答案 0 :(得分:2)
您可以像这样创建自己的验证类(下面只检查验证栏错误):
public void ValidateItem(object sender, EventArgs args)
{
ItemProcessingEventArgs theArgs = (ItemProcessingEventArgs) args;
Item currentItem = theArgs.Context.PublishHelper.GetSourceItem(theArgs.Context.ItemId);
if ((currentItem != null) && (currentItem.Paths.IsContentItem))
{
if (!IsItemValid(currentItem))
{
theArgs.Cancel = true;
}
}
}
private static bool IsItemValid(Item item)
{
item.Fields.ReadAll();
ValidatorCollection validators = ValidatorManager.GetFieldsValidators(
ValidatorsMode.ValidatorBar, item.Fields.Select(f => new FieldDescriptor(item, f.Name)), item.Database);
var options = new ValidatorOptions(true);
ValidatorManager.Validate(validators, options);
foreach (BaseValidator validator in validators)
{
if (validator.Result != ValidatorResult.Valid)
{
return false;
}
}
return true;
}
并将事件处理程序添加到publish:itemProcessing
事件:
<event name="publish:itemProcessing" help="Receives an argument of type ItemProcessingEventArgs (namespace: Sitecore.Publishing.Pipelines.PublishItem)">
<handler type="My.Assembly.Namespace.ValidateBeforePublish, My.Assembly" method="ValidateItem"/>
</event>
答案 1 :(得分:0)
您可以将验证中的参数字段设置为&#34; Result = FatalError&#34;在问题解决之前阻止用户保存项目。这样,用户必须先解决问题,然后才能保存。