Sitecore 工作流审批状态查询
Sitecore workflow approval state query
我已经在我的 sitecore 项目和最终状态(批准)中创建了工作流,我只想自动发布到特定的数据库。
那么我应该在哪里进行更改以指向数据库。
谢谢
为了执行自动发布,您的最终状态应该包含一个工作流操作,它会为您完成这项工作。您可以查看 Sample Workflow(默认情况下随 Sitecore 一起提供)- Approved 状态。它包含具有两个字段的子项 Auto Publish。
输入字符串:
Sitecore.Workflows.Simple.PublishAction, Sitecore.Kernel
设置实际发布的 class。您可以继承 class 并实现您自己的行为,提供额外的参数等。我建议您使用 dotPeek 或 Reflector 并查看此 class 实现 以便您可以调整自己的代码。
参数:
deep=0
..代表递归发布子项。
更新: 让我们来看看示例工作流自动发布操作中反编译的 class:
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 路径下指定的所有目标。正如我上面提到的,您可以使用自己的实现创建自己的 class,并从工作流操作定义项中引用它。
您可以查看示例工作流的自动发布操作。但通常您可以创建类型为 Sitecore.Workflows.Simple.PublishAction, Sitecore.Kernel
的工作流操作并将参数设置为 deep=1&related=1&targets=somedb,web&alllanguages=1
我已经在我的 sitecore 项目和最终状态(批准)中创建了工作流,我只想自动发布到特定的数据库。 那么我应该在哪里进行更改以指向数据库。
谢谢
为了执行自动发布,您的最终状态应该包含一个工作流操作,它会为您完成这项工作。您可以查看 Sample Workflow(默认情况下随 Sitecore 一起提供)- Approved 状态。它包含具有两个字段的子项 Auto Publish。
输入字符串:
Sitecore.Workflows.Simple.PublishAction, Sitecore.Kernel
设置实际发布的 class。您可以继承 class 并实现您自己的行为,提供额外的参数等。我建议您使用 dotPeek 或 Reflector 并查看此 class 实现 以便您可以调整自己的代码。
参数:
deep=0
..代表递归发布子项。
更新: 让我们来看看示例工作流自动发布操作中反编译的 class:
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 路径下指定的所有目标。正如我上面提到的,您可以使用自己的实现创建自己的 class,并从工作流操作定义项中引用它。
您可以查看示例工作流的自动发布操作。但通常您可以创建类型为 Sitecore.Workflows.Simple.PublishAction, Sitecore.Kernel
的工作流操作并将参数设置为 deep=1&related=1&targets=somedb,web&alllanguages=1