1

SharePoint サイトでは、マスター ページをチェックアウト/変更/チェックインすると、以前のバージョンのマスター ページが SharePoint に保持され、マスター ページ ギャラリーで以前のバージョンのリストを表示できます。以前のバージョンのコンテンツを表示する唯一の方法は、そのバージョンの復元を行うことのように思えますが、これにより、バージョン履歴に追加のエントリが作成されます。これは、実際には新しいバージョンではなく、単なるアーティファクトです。以前のバージョンの表示。

stsadm最終的に、ユーティリティを使用して以前のバージョンを表示するかなり力ずくの方法を見つけました。

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

次にmanifest.xml、cab 内のファイルを調べて、cab 内の関連ファイルへのポインタを見つけ.dat、必要な以前のバージョンを表示します。この「解決策」は、エクスポート操作によってサイトのコンテンツ全体がエクスポートされるため、大規模なサイトでは明らかに問題があります。

ここに私の質問があります...stsadm -o export以前のバージョンのファイルを抽出できる場合、SharePoint API を介してプログラムでこれを行う方法があると思います。これが可能かどうか、またはその方法を知っている人はいますか。

4

3 に答える 3

2

おそらく、あなたはSPFileVersionクラスの後にいます。SPFileオブジェクトのversionsプロパティから。

SPListItemVersionクラスも参照してください。

他のリストと同じようにマスターページギャラリーを取得できるはずです。

SPList masterPageGal = myWeb.Site.RootWeb.Lists["Master Page Gallery"];
于 2009-02-19T07:16:04.833 に答える
0

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();
    }
于 2009-02-20T05:03:03.057 に答える
0

興味のある方は、上記のコードの 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()
  }
}
于 2014-08-15T04:37:52.693 に答える