【问题标题】:Sitecore custom item validatorSitecore 自定义项目验证器
【发布时间】:2012-08-30 17:45:24
【问题描述】:

我需要创建一个自定义项目验证器,用于检查工作流最终状态,了解特定项目存在的语言版本。我知道我应该继承 Sitecore.Data.Validators.StandardValidator 或 Sitecore.Data.Validators.ItemValidators.WorkFlowFinalStateValidator,但是我可以使用哪些方法呢?有什么办法可以查到吗?

更新: 我使用 StandardValidator 类创建了一个自定义验证器,并实现了 ValidatorResult 方法。然后我在系统/设置/验证规则部分注册了这个类。然后我为项目设置标准值字段,这适用于常规快速栏验证规则和验证栏。我能够看到错误。

现在我想在工作流操作规则中使用它。我需要做什么?我选择了新规则将其设置在项目标准值部分的工作流规则区域中,但是当我在工作流中执行命令时,它只是不运行......我错过了什么?

【问题讨论】:

    标签: c# content-management-system sitecore sitecore6


    【解决方案1】:

    我们的团队使用 StandardValidator 作为我们正在进行的任何字段验证的基础,例如编写一个 AlphanumericValidator 来确保文本字段值是字母数字。

    我不确定您打算如何处理语言版本,但我知道我们正在运行一些工作流操作来检查项目是否有其他语言的版本,以告知用户当前的翻译状态。当 Approve 动作发生在某个步骤中时,在 final 之前,我们添加了一个工作流动作来启动我们的代码。我们实际上没有使用验证器,而是实现并注册了一个事件处理程序。它看起来像这样:

    public void Process(WorkflowPipelineArgs args)
    {
        Item dataItemCurrentLanguage = args.DataItem;
        Item dataItemOtherLanguage = GetItemInOtherLanguage(dataItemCurrentLanguage);
    
        if (dataItemOtherLanguage != null && dataItemOtherLanguage.Versions.Count > 0)
        {
            //Insert what you want to check for here
            if(isGood)
            {
                //Do something
            }
            else
            {
                Context.ClientPage.ClientResponse.Alert("Something bad!");
                args.AbortPipeline();
            }
        }
    }
    

    【讨论】:

    • 嗯...我认为这也足以满足我的功能。我正在尝试检查项目何时进入最终工作流程状态,然后再去那里,他们至少有两种不同的语言版本......这可能吗?如果是这样,你能分享更多细节吗?
    • 嘿,MR,AbortPipeline 调用可能是您想要研究的用于停止流到最终状态的方法。上面的行是您将如何通知用户信息的方式。那时,您需要做的就是弄清楚您的 if/else 逻辑以使您到达那里。我上面提供的示例用于检查双语网站是否有两种语言。如果您有超过 2 种语言,则需要在每种语言中调用 GetItem,并检查每种语言的版本计数。然后,如果您没有找到 2 个语言版本,请使用消息中止。
    猜你喜欢
    • 2015-07-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-08
    • 1970-01-01
    相关资源
    最近更新 更多