2015-11-04 4 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? Tu очистить базу данных перейти к -> Панель управления-> Database-> Очистка базы данных Я думаю, у вас есть какие-то потерянные элементы (элементы без шаблонов) Когда вы делаете базы данных Cleanup следующие задачи выполняются:

  1. Удаляет предметы, у которых есть родители, но родителей нет в элементе дерево.
  2. Удаляет неработающие данные на языке.

  3. Удаляет поля для не существующих элементов.

  4. Удаляет осиротевших предметов.
  5. Удаляет неиспользуемые записи blob.
  6. Удаляет поля из потерянных элементов, удаленных на этапе 4.
  7. Перестраивает таблицу потомков (в которой хранятся отношения родительские/дочерние элементы).
  8. Очищает все тайники.
+0

Я пробовал это. Я очистил базу данных и восстановил базы данных ссылок. Но все же я получаю вышеупомянутую ошибку.Есть ли способ удалить эти ссылки вручную? –

0

Это довольно странно, что не удалось решить проблему с помощью ВЫМЫТЬ базы данных или Восстановление базы данных связи.

Несколько вопросов:

  1. Во время очистки и Перестройки процесса, вы найдете любую соответствующей записи, относящейся к данному вопросу в журнале Sitecore? Если да, не могли бы вы вставить его сюда тоже.
  2. Чтение трассировки стека, которое вы предоставили, похоже, что есть/являются сиротами (-ами), и именно по этой причине он выбрасывает Exception: System.ArgumentOutOfRangeException. Не могли бы вы повторить тот же процесс восстановления и очистки, и сообщить нам результат 2-го запуска?

В качестве альтернативы, если вы обнаружите, повторяя процесс очень трудоёмкий и производительность тяжелой, то вы можете рассмотреть вопрос о создании файла LinkDatabaseRefreshTool.aspx, поместите его в папку \ Admin \ сайта с помощью следующего кода как ваш процессор:

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

Создайте asp: текстовое поле и кнопку отправки, которая вызывает этот метод OnClick. Откройте инструмент, обратившись к

У меня возникла такая же проблема раньше, и я только что перестроил его, и это решило проблему. Возможно, это же решение на вашем конце, все еще стоит попробовать.