【问题标题】:How do I programmatically retrieve previous versions of master pages from a SharePoint site?如何以编程方式从 SharePoint 网站检索以前版本的母版页?
【发布时间】:2014-08-15 12:37:52
【问题描述】:

在 SharePoint 网站中,当您签出/修改/签入母版页时,以前版本的母版页会保留在 SharePoint 中,您可以在母版页库中看到以前版本的列表 .在我看来,查看以前版本的 contents 的唯一方法是恢复该版本 - 但是这会在版本历史记录中创建一个额外的条目,这并不是真的一个新版本,但只是查看以前版本的产物。

我最终找到了一种使用stsadm 实用程序查看以前版本的蛮力方法:

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

然后在cab中查找manifest.xml文件,然后在cab中找到指向相关.dat文件的指针,以查看所需的先前版本。现在这种“解决方案”对于大型网站来说显然是有问题的,因为导出操作会导出整个网站内容。

所以这是我的问题...如果stsadm -o export 可以提取以前版本的文件,我猜有某种方法可以通过 SharePoint API 以编程方式执行此操作。有谁知道这是否/如何可能。

【问题讨论】:

    标签: sharepoint wss sharepoint-2007


    【解决方案1】:

    也许你正在学习SPFileVersion 课程。来自 SPFile 对象的版本属性。

    另请参阅SPListItemVersion 类。

    您应该能够像获得任何其他列表一样获得母版页库。

    SPList masterPageGal = myWeb.Site.RootWeb.Lists["Master Page Gallery"];
    

    【讨论】:

      【解决方案2】:

      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();
          }
      

      【讨论】:

        【解决方案3】:

        如果有人感兴趣,这里是上面代码的 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()
          }
        }
        

        【讨论】:

          猜你喜欢
          • 2010-12-15
          • 1970-01-01
          • 1970-01-01
          • 2012-05-06
          • 1970-01-01
          • 2011-03-26
          • 2010-09-30
          • 2019-10-07
          • 2013-06-28
          相关资源
          最近更新 更多