2015-11-04 51 views
3

我尝试使用以下url提供的工具删除我的主数据库上已损坏的链接。 http://mysite/sitecore/admin/RemoveBrokenLinks.aspxSitecore 8:删除损坏的链接时出现应用程序错误

经过一段时间的过程中断,我在Sitecore日志上得到以下错误。

6220 10:56:26 INFO Removing broken link- Database: master, Item: /sitecore/content/Home/blog/2012/January/13/totaljobs-group-benefit-from-expert-sitecore-consultancy-delivered-by-codehouse, Field: __Renderings, Target item database: master, Target item path: /sitecore/content/global/Codehouse Widgets/Mini Form Widgets/newsletter-subscription 
6220 10:56:26 INFO Done 
6220 10:56:26 INFO Removing broken link- Database: master, Item: /sitecore/content/Home/blog/2012/January/13/totaljobs-group-benefit-from-expert-sitecore-consultancy-delivered-by-codehouse, Field: __Renderings, Target item database: master, Target item path: /sitecore/content/global/Codehouse Widgets/Mini Form Widgets/sitecore-demo-text-only 
6220 10:56:26 INFO Done 
6220 10:56:26 ERROR Error looking up template field. Field id: {00000000-0000-0000-0000-000000000000}. Template id: {0437FEE2-44C9-46A6-ABE9-28858D9FEE8C} 
Exception: System.ArgumentOutOfRangeException 
Message: Null ID is not allowed. 
Parameter name: fieldID. 
Actual value was {00000000-0000-0000-0000-000000000000}. 
Source: Sitecore.Kernel 
    at Sitecore.Data.Templates.TemplateSection.GetField(ID fieldID) 
    at Sitecore.Data.Templates.Template.DoGetField(ID fieldID, String fieldName, Stack`1 stack) 
    at Sitecore.Data.Templates.Template.DoGetField(ID fieldID, String fieldName, Stack`1 stack) 
    at Sitecore.Data.Templates.Template.DoGetField(ID fieldID, String fieldName, Stack`1 stack) 
    at Sitecore.Data.Templates.Template.GetField(ID fieldID) 

6220 10:56:26 ERROR Application error. 
Exception: System.Web.HttpUnhandledException 
Message: Exception of type 'System.Web.HttpUnhandledException' was thrown. 
Source: System.Web 
    at System.Web.UI.Page.HandleError(Exception e) 
    at System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) 
    at System.Web.UI.Page.ProcessRequest(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) 
    at System.Web.UI.Page.ProcessRequest() 
    at System.Web.UI.Page.ProcessRequest(HttpContext context) 
    at System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() 
    at System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) 

Nested Exception 

Exception: System.ArgumentOutOfRangeException 
Message: Null ID is not allowed. 
Parameter name: fieldID. 
Actual value was {00000000-0000-0000-0000-000000000000}. 
Source: Sitecore.Kernel 
    at Sitecore.Data.Templates.TemplateSection.GetField(ID fieldID) 
    at Sitecore.Data.Templates.Template.DoGetField(ID fieldID, String fieldName, Stack`1 stack) 
    at Sitecore.Data.Templates.Template.DoGetField(ID fieldID, String fieldName, Stack`1 stack) 
    at Sitecore.Data.Templates.Template.DoGetField(ID fieldID, String fieldName, Stack`1 stack) 
    at Sitecore.Data.Templates.Template.GetField(ID fieldID) 
    at Sitecore.Data.Fields.Field.GetTemplateField() 
    at Sitecore.Data.Fields.FieldTypeManager.GetField(Field field, String runtimeValue) 
    at Sitecore.sitecore.admin.RemoveBrokenLinks.FixBrokenLinksInDatabase(Database database, Boolean serializeItem) 
    at Sitecore.sitecore.admin.RemoveBrokenLinks.FixBrokenLinksOnClick(Object sender, EventArgs e) 
    at System.Web.UI.WebControls.Button.RaisePostBackEvent(String eventArgument) 
    at System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) 

回答

0

可以在做RemoveBrokenLinks之前制作清理数据库吗? 涂清理数据库进入 - >控制面板 - >数据库 - >清理数据库 我猜你有一些孤立的项目(项目无模板) 当你正在做一个清理数据库下面的任务执行:

  1. 删除有父母的物品,但父母不在 树中。
  2. 删除无效的语言数据。

  3. 删除不存在项目的字段。

  4. 删除孤立的项目。
  5. 删除未使用的斑点记录。
  6. 删除步骤4中删除的孤立项的字段。
  7. 重建Descendants表(存储父/子关系)。
  8. 清除所有缓存。
+0

我试过了。我清理了数据库并重建了链接数据库。但我仍然收到上述错误。有没有办法手动删除这些链接? –

0

这是相当奇怪的是,它并没有使用清理数据库重建链接数据库解决问题。

几个问题:

  1. 在清理和重建过程中,你有没有发现你的Sitecore的日志与此问题相关的任何 相关条目?如果是的话,你能不能把它粘贴在这里。
  2. 阅读您提供的堆栈跟踪,它看起来像是存在孤立的模板,这就是它抛出Exception: System.ArgumentOutOfRangeException的原因。您能否重复相同的重建和清理过程,并让我们知道第二次运行的结果?

另外,如果发现重复这个过程非常耗时和性能重,那么你可能需要考虑创建一个LinkDatabaseRefreshTool.aspx文件,把它放在\网站\ admin文件夹里面用下面的代码您的处理器:

foreach (var specificItem in itemList) 
{ 
    specificItem.Editing.BeginEdit(); 
    Sitecore.Globals.LinkDatabase.UpdateReferences(specificItem); 
    specificItem.Editing.EndEdit(); 
} 

创建一个asp:文本框和一个提交按钮调用该方法的OnClick。通过访问http:\\YOUR_WEBSITE\admin\LinkDatabaseRefreshTool.aspx

打开工具我以前遇到过同样的问题,我只是重新构建它并解决了问题。也许只是你的结局相同的解决方案,仍然值得一试。