Sharepoint 2010 比较启用主要版本控制的SharePoint 2010库中的InfoPath版本

Sharepoint 2010 比较启用主要版本控制的SharePoint 2010库中的InfoPath版本,sharepoint-2010,infopath,Sharepoint 2010,Infopath,我有一个作为内容类型发布的InfoPath 2010表单。 我有一个启用了此内容类型的SharePoint库。SharePoint库还启用了主版本控制 假设我在库中保存了表单的一个实例,并对其进行了多次编辑,以便创建多个版本 我需要将两个版本进行比较,以查看确切的变化。SharePoint是否支持这一点,或者我应该为此使用代码(我现在正在检查SPDiffUtility)?否,SharePoint不允许您比较版本及其差异 据我所知,SPDiffUtility只是告诉您,但不支持这样的版本。比较版本

我有一个作为内容类型发布的InfoPath 2010表单。 我有一个启用了此内容类型的SharePoint库。SharePoint库还启用了主版本控制

假设我在库中保存了表单的一个实例,并对其进行了多次编辑,以便创建多个版本


我需要将两个版本进行比较,以查看确切的变化。SharePoint是否支持这一点,或者我应该为此使用代码(我现在正在检查SPDiffUtility)?

否,SharePoint不允许您比较版本及其差异

据我所知,
SPDiffUtility
只是告诉您,但不支持这样的版本。比较版本仍然很容易:

using (SPWeb web = new SPSite("http://sharepoint").OpenWeb())
{
    SPList list= web.Lists["Shared Documents"];

    SPFile file = list.Files["mydoc.doc"];

    //Get all the versions
    SPFileVersionCollection fileVersionCollection = file.Versions;

    //Get the first version
    SPFileVersion fileVersion= fileVersionCollection[3];

    //Get the data
    byte [] fileBytes = version.OpenBinary();
}
基本上,您必须查看
SPFile.Versions
并比较您拥有的版本


问题是InfoPath将其文档存储为XML,因此您必须解析收到的XML以提取所有字段并查看它们之间的差异-解析XML的一个良好开端是创建一个类文件,以便通过
xsd.exe
等在代码中更容易访问。

否,SharePoint不允许您比较版本及其差异

据我所知,
SPDiffUtility
只是告诉您,但不支持这样的版本。比较版本仍然很容易:

using (SPWeb web = new SPSite("http://sharepoint").OpenWeb())
{
    SPList list= web.Lists["Shared Documents"];

    SPFile file = list.Files["mydoc.doc"];

    //Get all the versions
    SPFileVersionCollection fileVersionCollection = file.Versions;

    //Get the first version
    SPFileVersion fileVersion= fileVersionCollection[3];

    //Get the data
    byte [] fileBytes = version.OpenBinary();
}
基本上,您必须查看
SPFile.Versions
并比较您拥有的版本


问题是InfoPath将其文档存储为XML,因此您必须解析收到的XML以提取所有字段并查看它们之间的差异-解析XML的一个良好开端是创建一个类文件,以便通过
xsd.exe
等在代码中更容易访问。

供参考,下面是我用来比较InfoPath表单的两个版本的完整代码

private static void CompareVersions()
{
    using (SPWeb web = new SPSite("http://<website_name>").OpenWeb())
    {
        SPList lib = web.Lists["<library_name>"];

        // Assuming that the file has at least 2 versions
        var v1 = lib.RootFolder.Files[0].Versions[0];
        myFields i1 = GetInstanceFromVersion(v1);
        var v2 = lib.RootFolder.Files[0].Versions[1];
        myFields i2 = GetInstanceFromVersion(v2);

        Console.WriteLine(string.Format("{0,-20} | {1,-20} | {2,-20}", "Version", v1.VersionLabel, v2.VersionLabel));
        // List the properties of both versions
        Console.WriteLine(string.Format("{0,-20} | {1,-20} | {2,-20}", "Name", i1.Name, i2.Name));
    }
}

private static myFields GetInstanceFromVersion(SPFileVersion version)
{
    XmlTextReader reader = new XmlTextReader(version.OpenBinaryStream());
    myFields fields = (myFields)new XmlSerializer(typeof(myFields)).Deserialize(reader);
    return fields;
}
private静态无效比较()
{
使用(SPWeb=newspsite(“http://”).OpenWeb()
{
SPList lib=web.Lists[“”;
//假设该文件至少有两个版本
var v1=lib.RootFolder.Files[0]。版本[0];
myFields i1=GetInstanceFromVersion(v1);
var v2=lib.RootFolder.Files[0]。版本[1];
myFields i2=GetInstanceFromVersion(v2);
WriteLine(string.Format(“{0,-20}{1,-20}{2,-20}”,“Version”,v1.VersionLabel,v2.VersionLabel));
//列出两个版本的属性
WriteLine(string.Format(“{0,-20}{1,-20}{2,-20}”,“Name”,i1.Name,i2.Name));
}
}
私有静态myFields GetInstanceFromVersion(SPFileVersion版本)
{
XmlTextReader=新的XmlTextReader(version.OpenBinaryStream());
myFields=(myFields)新的XmlSerializer(typeof(myFields))。反序列化(reader);
返回字段;
}

以下是我用来比较两个版本的InfoPath表单的完整代码,仅供参考

private static void CompareVersions()
{
    using (SPWeb web = new SPSite("http://<website_name>").OpenWeb())
    {
        SPList lib = web.Lists["<library_name>"];

        // Assuming that the file has at least 2 versions
        var v1 = lib.RootFolder.Files[0].Versions[0];
        myFields i1 = GetInstanceFromVersion(v1);
        var v2 = lib.RootFolder.Files[0].Versions[1];
        myFields i2 = GetInstanceFromVersion(v2);

        Console.WriteLine(string.Format("{0,-20} | {1,-20} | {2,-20}", "Version", v1.VersionLabel, v2.VersionLabel));
        // List the properties of both versions
        Console.WriteLine(string.Format("{0,-20} | {1,-20} | {2,-20}", "Name", i1.Name, i2.Name));
    }
}

private static myFields GetInstanceFromVersion(SPFileVersion version)
{
    XmlTextReader reader = new XmlTextReader(version.OpenBinaryStream());
    myFields fields = (myFields)new XmlSerializer(typeof(myFields)).Deserialize(reader);
    return fields;
}
private静态无效比较()
{
使用(SPWeb=newspsite(“http://”).OpenWeb()
{
SPList lib=web.Lists[“”;
//假设该文件至少有两个版本
var v1=lib.RootFolder.Files[0]。版本[0];
myFields i1=GetInstanceFromVersion(v1);
var v2=lib.RootFolder.Files[0]。版本[1];
myFields i2=GetInstanceFromVersion(v2);
WriteLine(string.Format(“{0,-20}{1,-20}{2,-20}”,“Version”,v1.VersionLabel,v2.VersionLabel));
//列出两个版本的属性
WriteLine(string.Format(“{0,-20}{1,-20}{2,-20}”,“Name”,i1.Name,i2.Name));
}
}
私有静态myFields GetInstanceFromVersion(SPFileVersion版本)
{
XmlTextReader=新的XmlTextReader(version.OpenBinaryStream());
myFields=(myFields)新的XmlSerializer(typeof(myFields))。反序列化(reader);
返回字段;
}