Как программно получить предыдущие версии главных страниц с сайта SharePoint? - PullRequest
1 голос
/ 19 февраля 2009

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

В конце концов я нашел довольно грубый метод просмотра предыдущих версий с помощью утилиты stsadm:

stsadm -o export -url http://site -fileneme export.cab -versions 4

затем ищите файл manifest.xml в кабине, чтобы найти указатель на соответствующий файл .dat в кабине, чтобы просмотреть требуемую предыдущую версию. Теперь это «решение» явно проблематично для крупных сайтов, так как операция экспорта экспортирует весь контент сайта.

Так вот мой вопрос ... Если stsadm -o export может извлечь предыдущие версии файлов, я предполагаю, что есть какой-то способ сделать это программно через API SharePoint. Кто-нибудь знает, если / как это возможно.

Ответы [ 3 ]

2 голосов
/ 19 февраля 2009

Возможно, вы после класса SPFileVersion . Из свойства version объекта SPFile.

См. Также класс SPListItemVersion .

Вы сможете получить галерею мастер-страниц так же, как и любой другой список.

SPList masterPageGal = myWeb.Site.RootWeb.Lists["Master Page Gallery"];
0 голосов
/ 15 августа 2014

Вот приведенная выше версия PowerShell, если кому-то интересно:

function ExportVersions([string] $webUrl, [string]$spfilepath, [string]$filePath)
{
  $web = $null
  try
  {
    $web = get-spweb $webUrl
    $file = $web.GetFile($spfilepath)
    Write-host "Url: " $file.Url 
    Write-host "length: " $file.Length
    Write-host "Number of versions: " $file.Versions.Count
    Write-host
    foreach ($version in $file.Versions)
    {
        Write-Host "Version: " $version.VersionLabel
        Write-Host "Size: " $version.Size
        $content = $version.OpenBinary()
        $spFileName = [System.IO.Path]::GetFileName($spfilepath)
        $outFileName = $filePath + $version.VersionLabel + "-$spFileName"
        $fs = new-object System.IO.FileStream($outFileName,[System.IO.FileMode]::Create)
        $fs.Write($content,0,$content.Length)
        $fs.Close()
    }

    $out = "Finished exporting versions for: " + $spfilepath
    Write-Host $out
    Write-Host

  }
  catch
  {
    throw $_
  }
  finally
  {
    # Clean up
    $web.Close()
  }
}
0 голосов
/ 20 февраля 2009

Класс SPFileVersion действительно был шагом вперед. Вот фрагмент кода, который будет экспортировать предыдущие версии страницы default.master в файловую систему. Однако следует отметить, что экспорт versions[0] не работает - он вызывает исключение при попытке вызвать ver.OpenBinary. Я подозреваю, что это как-то связано со всей призрачной / неосвященной проблемой в SharePoint, что исходная версия файла хранится иначе, чем последующие версии. Запуск этого кода для других файлов, которые были добавлены в галерею главной страницы, работает при получении versions[0]. Кажется, это проблема только для файлов, которые были на исходном ненастроенном сайте SharePoint.

    SPFile file;
    SPFileVersionCollection versions;
    SPFileVersion ver;
    byte[] content;
    FileStream fs;
    SPSite site = new SPSite("http://localhost:6000");


    file = site.RootWeb.GetFile("_catalogs/masterpage/default.master");
    Console.WriteLine(file.Url + ", " + file.Length);
    versions = file.Versions;
    Console.WriteLine(versions.Count);

    for (int i = 1; i < versions.Count; i++)
    {
        ver = versions[i];
        Console.WriteLine(ver.VersionLabel + ", " + ver.Size);
        content = ver.OpenBinary();
        fs = new FileStream("c:\\temp\\" + ver.VersionLabel + "-default.master",FileMode.Create);
        fs.Write(content, 0, content.Length);
        fs.Close();
    }
...