停止发布验证错误项

时间:2014-08-10 05:14:20

标签: validation sitecore sitecore7 sitecore7.2

我们正在使用Sitecore 7.2并且已经为字段数量实现了“必需”字段验证器。

但是,用户仍然可以保存或创建包含验证错误的项目。

我知道我们可以阻止使用工作流发布此验证错误项目。

我们不想实施任何工作流程,因此有人可以建议如何阻止验证错误项目能够发布吗?

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;在问题解决之前阻止用户保存项目。这样,用户必须先解决问题,然后才能保存。