【问题标题】:Sitecore workflow approval state querySitecore 工作流审批状态查询
【发布时间】:2016-06-16 06:08:58
【问题描述】:

我在我的 sitecore 项目中创建了工作流,并且在最终状态(批准)我只想自动发布到特定数据库。 那么我应该在哪里进行更改以指向数据库。

谢谢

【问题讨论】:

    标签: sitecore sitecore7


    【解决方案1】:

    为了执行自动发布,您的最终状态应该包含一个工作流操作,它会为您完成这项工作。您可以查看 Sample Workflow(Sitecore 默认提供)- 已批准 状态。它包含子项Auto Publish,有两个字段。

    输入字符串:

    Sitecore.Workflows.Simple.PublishAction, Sitecore.Kernel
    

    设置实际上发布的类。您可以从该类继承并实现自己的行为,提供额外的参数等。我建议您使用 dotPeek 或 Reflector 并查找此类实现,以便您可以调整自己的代码。

    参数:

    deep=0
    

    ..代表递归发布子项。

    更新:让我们看看来自 Sample Workflow Auto Publish 操作的反编译类:

    public class PublishAction
    {
        public void Process(WorkflowPipelineArgs args)
        {
            Item dataItem = args.DataItem;
            Item innerItem = args.ProcessorItem.InnerItem;
            Database[] targets = this.GetTargets(dataItem);
            PublishManager.PublishItem(dataItem, targets, new Language[1]
      {
        dataItem.Language
      }, (this.GetDeep(innerItem) ? 1 : 0) != 0, 0 != 0);
        }
    
        private bool GetDeep(Item actionItem)
        {
            return actionItem["deep"] == "1" || WebUtil.ParseUrlParameters(actionItem["parameters"])["deep"] == "1";
        }
    
        private Database[] GetTargets(Item item)
        {
            using (new SecurityDisabler())
            {
                Item obj = item.Database.Items["/sitecore/system/publishing targets"];
                if (obj != null)
                {
                    ArrayList arrayList = new ArrayList();
                    foreach (BaseItem baseItem in obj.Children)
                    {
                        string name = baseItem["Target database"];
                        if (name.Length > 0)
                        {
                            Database database = Factory.GetDatabase(name, false);
                            if (database != null)
                                arrayList.Add((object)database);
                            else
                                Log.Warn("Unknown database in PublishAction: " + name, (object)this);
                        }
                    }
                    return arrayList.ToArray(typeof(Database)) as Database[];
                }
            }
            return new Database[0];
        }
    }
    
    上述默认示例中的

    GetTargets() 方法会发布到在 /sitecore/system/publishing targets 路径下指定的所有目标。正如我上面提到的,您可以使用自己的实现创建自己的类,并从工作流操作定义项中引用它。

    【讨论】:

    • 但是你在哪里指出数据库或连接字符串
    • 我已经更新了答案,以便更清楚地了解它的内部工作方式和目标的定义,请参见上文。
    【解决方案2】:

    您可以查看示例工作流的自动发布操作。但一般来说,您可以创建一个类型为:Sitecore.Workflows.Simple.PublishAction, Sitecore.Kernel 的工作流操作并将参数设置为deep=1&related=1&targets=somedb,web&alllanguages=1

    【讨论】:

    • 谢谢,我们也可以在参数中指定目标数据库
    猜你喜欢
    • 2016-01-09
    • 1970-01-01
    • 2010-10-25
    • 2012-08-04
    • 1970-01-01
    • 2014-10-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多