C# 以编程方式发布媒体项目时,PublishOptions失败
我试图以编程方式发布媒体项目,但PublishOptions对象遇到问题。在运行时,当我上载媒体项时,正在实例化PublishOptions对象的代码行中断。我收到的信息如下:C# 以编程方式发布媒体项目时,PublishOptions失败,c#,sitecore,sitecore-media-library,C#,Sitecore,Sitecore Media Library,我试图以编程方式发布媒体项目,但PublishOptions对象遇到问题。在运行时,当我上载媒体项时,正在实例化PublishOptions对象的代码行中断。我收到的信息如下: "Value cannot be null. Parameter Name: item" stacktrace是: at Sitecore.Diagnostics.Assert.ArgumentNotNull(Object argument, String argumentName) at Sitecore.Data.
"Value cannot be null. Parameter Name: item"
stacktrace是:
at Sitecore.Diagnostics.Assert.ArgumentNotNull(Object argument, String argumentName)
at Sitecore.Data.Managers.ItemProvider.ApplySecurity(Item item, SecurityCheck securityCheck)
at Sitecore.Data.Managers.ItemProvider.GetRootItem(Language language, Version version, Database database, SecurityCheck securityCheck)
at Sitecore.Data.Managers.ItemManager.GetRootItem(Language language, Version version, Database database)
at Sitecore.Nexus.Data.DataCommands.ResolvePathCommand.(String itemPath, Database database)
at Sitecore.Nexus.Data.DataCommands.ResolvePathCommand.(String itemPath, Database database)
at Sitecore.Nexus.Data.NexusDataApi.ResolvePath(String itemPath, Database database)
at Sitecore.Data.Engines.DataCommands.ResolvePathCommand.DoExecute()
at Sitecore.Data.Engines.EngineCommand`2.Execute()
at Sitecore.Data.Engines.DataEngine.ResolvePath(String itemPath)
at Sitecore.Data.Managers.ItemProvider.ResolvePath(String itemPath, Database database)
at Sitecore.Data.Managers.ItemProvider.GetItem(String itemPath, Language language, Version version, Database database, SecurityCheck
下面是PublishOptions对象被实例化的代码(它正在中断):
我犯这个错误的原因可能是什么?我想你犯了一个典型的错误。项目:在发布项目时,保存的项目也会触发 我最初的猜测是,你应该把支票扩大到
if ( item != null && item.Database.Name == "master" )
为了防止您的代码试图发布该项目,发布过程中会在“web”上触发item:saved事件。尝试一下,看看这是否有效,我猜这与数据库有关
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();
}
}
}
}
Mark,即使在检查确保项目来自“主”数据库之后,我仍然会收到错误。请尝试Factory.GetDatabase(“主”)和(“web”)而不是新数据库(“主”);看看你是否还可以。你是否启用了工作流,如果启用了工作流,物品是否得到批准?@Shriroop谢谢。您的评论就是我问题的答案。很高兴您的评论很有帮助,并已作为答案发布。:-)
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();
}
}
}
}