从Sharepoint获取文件及其版本号

时间:2020-03-05 18:44:39  来源:igfitidea点击:

作为临时的权宜之计,直到所有设计人员都就位,我们目前正在手工处理大量的xml配置文件。其中一个问题是文件版本控制,因为人们在更新文件时会忘记更新版本号(这是人们普遍精打细算的结果,这是可以预料的)。

因此,我认为在将文件存储在Sharepoint中时,我应该能够编写脚本以将文件从Sharepoint中拉出,获取版本号,并自动将Sharepoint中的版本号输入/更新到文件中。这意味着当某人想要"最新"文件时,他们可以运行脚本并获取正确版本号的最新文件(其含义不只此而已,因此使用脚本的原因不仅仅是自动执行-版本控制)。

有谁知道如何从Sharepoint获取文件和版本号?

解决方案

回答

我假设我们是在谈论列表或者库中的文档,而不是12个配置单元中的源文件。如果是这样,则每个库都有内置的版本控制。我们可以通过单击每个库中可用的"表单库设置"来访问它(当然,具有适当的admin privs)。在此处,选择"版本控制设置",然后选择适合过程的设置。

至于在代码中获取版本号,如果我们从集合中提取一个" SPListItem",则每个项目都会添加一个名为" Versions"的" SPListItemVersionCollection"。

回答

有一种方法可以通过Web服务来实现,但是我在实现自定义事件处理程序方面做得更多。这里有一些代码可以满足需求。请记住,我们只能从服务器执行此操作,因此我们可能希望将其包装在Web服务中以允许从嵌入式设备进行访问。此外,我们将需要在此代码中引用Microsoft.SharePoint.dll。

using (SPSite site = new SPSite("http://yoursitename/subsite"))
{
    using (SPWeb web = site.OpenWeb())
    {
        SPListItemCollection list = web.Lists["MyDocumentLibrary"].GetItems(new SPQuery());
        foreach(SPListItem itm in list) {
            Stream inStream = itm.File.OpenBinaryStream();
            XmlTextReader reader = new XmlTextReader(inStream);
            XmlDocument xd = new XmlDocument();
            xd.Load(reader);
            //from here you can read whatever XML node that contains your version info
            reader.Close();
            inStream.Close();
        }
    }
}

using()语句是为了确保我们不会造成内存泄漏,因为SPSite和SPWeb是非托管对象。

编辑:如果版本号已提升到库字段,则可以在上面的for循环中通过以下方式访问它:

itm["FieldName"]