Импорт SP 2007 Wiki в SP 2010 для удаления «Страница была настроена из своего шаблона»
-
16-10-2019 - |
Вопрос
Мы перенесли очень необычный SP2007 на SP2010 (прикрепление DB) и выполнили визуальное обновление для всех сайтов.
Теперь, когда я открываю несколько страниц вики, я получаю уведомление: «Текущая страница была настроена из его шаблона. Возвращайтесь к шаблону». Вернуть на самом деле не работает. Сообщение все еще остается, и сайт выглядит так же. Похоже, что сообщение распространяется только на страницах вики, которые были отредактированы пользователем в SP Designer An, которые были отключены от исходного шаблона сайта (они добавили веб -части и прочее).
Чтобы избавиться от сообщения, я где -то прочитал, что вы можете экспортировать сайт, удалить вики, создать новое и импортировать его обратно.
Я не знаю, действительно ли это работает, и это лучшее решение, но я подумал попробовать.
Я попытался переопределить сайт, но я получаю сообщение, что шаблоны не совпадают, поэтому импорт сбой. Старый шаблон, кажется, вики#0 и новый Enterwiki#0. Поэтому я попытался создать другой сайт с не «шаблоном вики предприятия», а только «шаблоном вики» - но я не могу его найти. Никакой другой шаблон вики не доступен в галерее шаблонов.
Я искал в Интернете и увидел, что Wiki#0 все еще каким -то образом указан в качестве шаблона в 2010 году, но я не знаю, является ли это только для некоторых проблем совместимости, и сам шаблон не выбирается.
Может быть, кто -то из вас знает, как получить шаблон или как решить первоначальную проблему (сообщение уведомления и страница, не редактируемая в браузере, потому что он отключен от шаблона)?
Решение
В SP 2007 иногда были проблемы с файлами, связанными с шаблоном). Приведенный ниже код работал для меня (не уверен в SP 2010). Мой код был построен на основе других работ, расположенных здесь: http://sjoere.blogspot.com/2008/05/Reghosting-fearure-files.htmlи тут: http://stsadm.blogspot.com/2007/09/re-ghosting-pages.html
try
{
file.RevertContentStream();
file = web.GetFile(url);
if (file.CustomizedPageStatus == SPCustomizedPageStatus.Customized)
{
// Still unsuccessful so take measures further
PropertyInfo requestProp = web.GetType().GetProperty("Request", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.InvokeMethod | BindingFlags.GetProperty);
object request = requestProp.GetValue(web, null);
MethodInfo revertContentStreams = request.GetType().GetMethod("RevertContentStreams", BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Instance | BindingFlags.InvokeMethod);
// I found some cases where calling this directly was the only way to force the re-ghosting of the file.
// I think the trick is that it's not updating the file properties after doing the revert (the
// RevertContentStream method will call SPRequest.UpdateFileOrFolderProperties() immediately after the
// RevertContentStreams call but ommitting the update call seems to make a difference.
revertContentStreams.Invoke(request, new object[]
{
web.Url, file.Url, file.CheckOutStatus != SPFile.SPCheckOutStatus.None
}
);
MethodInfo dirtyThisFileObject = file.GetType().GetMethod("DirtyThisFileObject", BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Instance | BindingFlags.InvokeMethod);
dirtyThisFileObject.Invoke(file, new object[] { });
file = web.GetFile(url);
if (file.CustomizedPageStatus == SPCustomizedPageStatus.Customized)
{
output.Add("FAILURE: " + file.ServerRelativeUrl);
return false;
}
}
}
catch (Exception ex)
{
output.Add("FAILURE: " + file.ServerRelativeUrl + " Reason: " + ex.Message);
return false;
}
Другие советы
Правильно, он все еще интерпретируется как другая главная страница.
Я побежал следующим образом:
$web = Get-SPWeb <SiteURL>
$list = $web.Lists["Wiki"]
$spQuery = New-Object Microsoft.SharePoint.SPQuery
$spQuery.ViewAttributes = "Scope='Recursive'";
$spQuery.RowLimit = 2000
$caml = '<OrderBy Override="TRUE"><FieldRef Name="ID"/></OrderBy>'
$spQuery.Query = $caml
do
{
$listItems = $list.GetItems($spQuery)
$spQuery.ListItemCollectionPosition = $listItems.ListItemCollectionPosition
foreach($item in $listItems)
{
$DebugPreferences = “Continue“
Write-host “Resetting wiki page in site.“
$item.File.RevertContentStream()
}
}
while ($spQuery.ListItemCollectionPosition -ne $null)
$web.Dispose()
Использованная литература:http://msdn.microsoft.com/en-us/library/microsoft.sharepoint.spfile.revertcontentstream(v=office.14).aspx