我们正在使用Sitecore 6.5,我们的网站设置为使用this guide自动发布媒体项目。所有媒体项目都使用自定义工作流程,该工作流程设置为默认为“发布”状态,即最终工作流程步骤,并设置为自动发布。它工作得很好,它确实减轻了我们网页编辑的困惑。
问题:如果编辑器覆盖媒体项目(比如过时的pdf),则新项目不会自动发布。网络编辑必须记住发布被覆盖的项目。我们有500多名具有不同经验的编辑,所以这个问题经常出现。有谁知道这方面的解决方案?
答案 0 :(得分:1)
如果通过计划任务或代理自动发布整个媒体库,则可以考虑挂钩Sitecore的item:saved
事件(有关事件here的更多信息)。
当此事件触发时,您可以使用item.Paths.IsMediaItem
确定正在保存的项目是否为媒体项目,如果是,则以编程方式发布项目(或)触发所需的工作流程状态。
答案 1 :(得分:0)
根据Derek的回答,这就是我提出的问题,但由于我是Sitecore开发的新手,我能做到这一点吗?
将处理事件添加到web.config
<event name="item:saved">
<handler type="SomeNamespace.MediaOverwritePublisher, SomeAssembly" method="OnItemSaved" />
</event>
然后在我们的自定义文件夹中的程序集中,我将添加:
namespace SomeNamespace
{
public class MediaOverwritePublisher
{
public void OnItemSaved(Object sender, EventArgs args)
{
var item = Event.ExtractParameter(args, 0) as Item;
using (new SecurityDisabler())
{
if (item != null)
{
if (item.Paths.IsMediaItem)
{
var source = Factory.GetDatabase("master");;
var target = Factory.GetDatabase("web");;
var options = new PublishOptions(source, target, PublishMode.SingleItem, item.Language, DateTime.Now)
{
RootItem = item,
Deep = true,
};
var publisher = new Publisher(options);
publisher.PublishAsync();
}
}
}
}
}
}
答案 2 :(得分:0)
这是我根据Derek的回答提出的
我建议您使用Derek的第二个建议选项来触发工作流程。 由于您已经设置了工作流程,因此您只需将项目置于具有自动发布操作的状态。
这应该让你开始: Sitecore: Assign workflow to an item programmatically
如果您仍想发布,那么我建议您从sitecore获取目标数据库,以防您拥有多个“web”或名称重命名。
Item itemNotNull = Client.GetItemNotNull("/sitecore/system/publishing targets");
ArrayList arrayList = new ArrayList();
ChildList children = itemNotNull.Children;
foreach (Item item in children)
{
string name = item["Target database"];
Database database = Factory.GetDatabase(name, false);
if (database != null)
…
}