Как установить setuppath неправильно подготовленного файла? - PullRequest
2 голосов
/ 27 ноября 2009

У меня есть функция, которая обеспечивает кучу файлов, включая макеты и изображения, на сайт MOSS. За время существования этого сайта мы несколько раз изменяли файл обеспечения, манифест элементов: добавление файлов, удаление файлов и изменение структуры файлов в папке компонентов. К сожалению, мы обнаружили, что если вы удалите файл из подготовительного документа, а затем снова включите функцию, SPFile удаленного файла останется в базе данных контента.

Поскольку эти файлы являются ghostable, у них есть свойство в базе данных контента sharepoint, называемое «SetupPath», которое по сути является относительным путем к папке «Шаблон» относительно исходного файла. Предполагается, что этот файл используется, когда файл находится в свободном состоянии. Поскольку я изменил свою функцию, этот путь установки относится к файлу, который не существует.

Последствия таковы: я больше не могу обновить файл в API, он не отображается через графический интерфейс, и когда я запускаю развертывание контента, полное развертывание контента, я получаю файл не найден. Хуже того, учитывая, что было удалено около 1000 таких файлов, при каждом полном развертывании контента возникают ошибки размером около 3,5 тыс. Толчок не прекращается, но многие ошибки приводят в замешательство и скрывают любые реальные катастрофические ошибки, если они возникают.

Наконец, если я обновлю файл, указав ему новый путь, то при ссылке на этот файл в sharepoint выдается 404. Очень плохо, если файл оказался макетом (все страницы, использующие его, не работают).

Я закодировал код для удаления SPF-файлов, которые больше не предоставляются, проблема решена. Однако файлы, которые все еще используются, но имеют неправильный путь установки, я в растерянности.

Я могу зайти в SPFile.Properties ["vti_setuppath"] и увидеть неправильный путь установки. Однако, хотя я могу установить это свойство, я не могу заставить его придерживаться. SPFile.Update () не работает, а также не проверяет вход и выход файла.

Любая помощь будет оценена.

Ответы [ 3 ]

0 голосов
/ 28 января 2010

Исправление состоит в том, чтобы загрузить / подготовить новый файл, а затем использовать SPFile.MoveTo для переопределения исходного файла. Это сохраняет инициализацию и сохраняет все ссылки на этот макет без необходимости изменять какую-либо структуру, кроме самого макета. Это также, вероятно, так элегантно, как я могу надеяться.

0 голосов
/ 05 декабря 2012

Вы можете использовать это быстрое и грязное решение, которое полагается на исправление содержимого базы данных на низком уровне:

Add-PSSnapin Microsoft.SharePoint.PowerShell -EA 0
Add-PSSnapin SqlServerCmdletSnapin100 -EA 0

$dbsToFix = @(
    "spcontentdb1",
    "spcontentdb2"
    )
$correctPath = "Features\newfeature\ModuleCSTheme\cs.master"
$wrongPath = "Features\oldfeature\ModuleCSTheme\CS.master"

foreach($db in $dbsTofix){

    $spdb = Get-SPContentDatabase $db
    $server = $spdb.Server
    $command = "UPDATE AllDocs Set SetupPath=N'$correctPath' where SetupPath like N'$wrongPath'; Select @@rowcount as NumberFixed"

    $result = Invoke-Sqlcmd -Database $db -ServerInstance $server -Query $command -Verbose

    new-object PsObject -Property @{
        Database = $db
        "Number of files fixed" = $result[0]
        }
}
0 голосов
/ 29 ноября 2009

Есть обходной путь, который вы можете попробовать. Теперь, когда вы завершили путь страниц макета. Вы можете создать новый макет страницы с нужным путем и назвать его версией 2, развернуть его, а в SharePoint вы можете изменить макет страницы страниц экземпляра. Теперь вы можете удалить все старые макеты страниц.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...