Sitecore:值不能为空。参数名称:uri

时间:2017-06-07 13:38:14

标签: sitecore uri sitecore8

Exception: System.ArgumentNullException
Message: Value cannot be null.
Parameter name: uri
Source: Sitecore.Kernel

我正在编辑本地的占位符项 当我收到此错误时,Sitecore 8.1(rev.151207)实例。现在我无法编辑,删除或重置它(或其父文件夹)。我也无法在内容编辑器中读取该项目,因为当我单击父文件夹时弹出错误。我尝试从内容编辑器,代码和PowerShell命令中删除/编辑它及其父文件夹,但始终显示相同的错误。

我还尝试用我的备份副本替换我的configs和bin文件夹,清除缓存,重新启动IIS和应用程序池,但没有任何帮助。

我完全卡住了。有谁知道如何解决这个问题?

编辑: 日志中的完整错误是:

Exception: System.ArgumentNullException
Message: Value cannot be null.
Parameter name: uri
Source: Sitecore.Kernel
   at Sitecore.Diagnostics.Assert.ArgumentNotNull(Object argument, String argumentName)
   at Sitecore.Data.ItemUri..ctor(ItemUri uri)
   at Sitecore.Data.Items.Item.GetItemUriFromSourceItem()
   at Sitecore.Data.Items.Item.get_SourceUri()
   at Sitecore.Data.Items.Item.get_Source()
   at Sitecore.Data.Fields.Field.GetSourceItem()
   at Sitecore.Data.Fields.Field.GetInheritedValue(Boolean allowStandardValue)
   at Sitecore.Pipelines.GetFieldValue.GetInheritedValue.Process(GetFieldValueArgs args)
   at (Object , Object[] )
   at Sitecore.Pipelines.CorePipeline.Run(PipelineArgs args)
   at Sitecore.Data.Fields.Field.GetValue(Boolean allowStandardValue, Boolean allowDefaultValue, Boolean allowFallbackValue, Boolean allowInheritValue, Boolean allowInnerValue)
   at Sitecore.Pipelines.ItemProvider.GetItem.GetLanguageFallbackItem.IsItemFallbackEnabled(Item item)
   at Sitecore.Pipelines.ItemProvider.GetItem.GetLanguageFallbackItem.Process(GetItemArgs args)
   at (Object , Object[] )
   at Sitecore.Pipelines.CorePipeline.Run(PipelineArgs args)
   at Sitecore.Data.Managers.PipelineBasedItemProvider.ExecuteAndReturnResult[TArgs,TResult](String pipelineName, String pipelineDomain, Func`1 pipelineArgsCreator, Func`1 fallbackResult)
   at Sitecore.Data.Managers.ItemManager.GetItem(ID itemId, Language language, Version version, Database database, SecurityCheck securityCheck)
   at Sitecore.Nexus.Data.DataCommands.GetChildrenCommand.Execute(Item )
   at Sitecore.Data.Engines.EngineCommand`2.Execute()
   at Sitecore.Data.Managers.ItemProvider.GetChildren(Item item, ChildListOptions options)
   at Sitecore.Data.Managers.ItemProvider.GetChildren(Item item, SecurityCheck securityCheck, ChildListOptions options)
   at Sitecore.Data.Managers.PipelineBasedItemProvider.ExecuteAndReturnResult[TArgs,TResult](String pipelineName, String pipelineDomain, Func`1 pipelineArgsCreator, Func`1 fallbackResult)
   at Sitecore.Data.Managers.PipelineBasedItemProvider.GetChildren(Item item, SecurityCheck securityCheck)
   at Sitecore.Collections.ChildList.Populate(ChildListOptions options)
   at Sitecore.Shell.Framework.Pipelines.DeleteItems.GetItemClones(Item item, Boolean processChildren)
   at Sitecore.Shell.Framework.Pipelines.DeleteItems.GetItemClones(Item item, Boolean processChildren)
   at Sitecore.Shell.Framework.Pipelines.DeleteItems.GetItemClones(List`1 items)
   at Sitecore.Shell.Framework.Pipelines.DeleteItems.GetCheckCloneLinksMessage(List`1 items)
   at Sitecore.Shell.Framework.Pipelines.DeleteItems.CheckCloneLinks(ClientPipelineArgs args)

2 个答案:

答案 0 :(得分:3)

您提供的例外是因为您的商品的__Source Item - {19B597D3-2EDD-4AE2-AEFE-4A94C7F10E31}字段中包含非空的无效值。 __Source Item负责存储克隆项的原始项URI。

我不知道您是如何实现这一点的,因为ValidateCloneSourceModifications管道中有一个处理器saveItem,无法保存带有无效__Source Item字段的项目。

我可以通过更改数据库中的字段值来重现您的异常。

如何解决:

  1. 在主DB中找到破碎的字段 - > SharedFields表。 FieldId'19B597D3-2EDD-4AE2-AEFE-4A94C7F10E31'
  2. 修复它。它应该类似于sitecore://master/{AE76A034-9491-4B83-99F5-39F227D6FB59},其中ID是原始项ID。您也可以将''设置为值,但它会删除与原始项目的绑定。
  3. 清除缓存。
  4. 一定有帮助。

答案 1 :(得分:0)

您可以使用此工具试用数据库浏览器/sitecore/admin/dbbrowser.aspx,也可以删除项目。

如果这个数据库浏览器管理工具失败,那么我很好奇master数据库中的内容,直接在sql中检查是什么让这个项目特殊而不是一个选项。