Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/256.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 以编程方式发布媒体项目时,PublishOptions失败_C#_Sitecore_Sitecore Media Library - Fatal编程技术网

C# 以编程方式发布媒体项目时,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.

我试图以编程方式发布媒体项目,但PublishOptions对象遇到问题。在运行时,当我上载媒体项时,正在实例化PublishOptions对象的代码行中断。我收到的信息如下:

"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();
                }
            }
        }
    }