如何下载到 XML 文件以前版本的 Infopath 表单 SharePoint
How to Download to XML files Previous Versions of Infopath form SharePoint
当我访问 Infopath 文件列表,例如 select 一个并单击版本历史记录时,有没有一种方法可以在不恢复旧版本的情况下下载以前的版本?
这仅适用于图书馆中的项目(不适用于列表)。需要记住的几点:
- 库具有称为文件的属性
- 文件具有称为版本的属性
- 版本有一个 属性 称为 Url
考虑到这三点,您可以通过执行以下操作来下载 URL InfoPath 文件的所有版本历史记录:
public static void Main(string[] args)
{
ClientContext context = new ClientContext(<sharepoint site here>);
Web site = context.Web;
List docLib = site.Lists.GetByTitle(<doc lib here>);
context.Load(docLib);
CamlQuery caml = new CamlQuery();
ListItemCollection items = docLib.GetItems(caml);
context.Load(items);
context.ExecuteQuery();
Console.WriteLine("Pulling information...");
foreach(ListItem item in items)
{
//You can change title to any internal field name that you want to use as basis
if (item.FieldValues["Title"] != null)
{
Console.WriteLine("File Name: " + item.FieldValues["Title"]);
context.Load(item);
//this gets ALL the version of the file
FileVersionCollection versions = item.File.Versions;
context.Load(versions);
context.ExecuteQuery();
if (versions != null)
{
foreach (FileVersion version in versions)
{
User usr = version.CreatedBy as User;
context.Load(usr);
context.ExecuteQuery();
//will be explained in detail
int ver = GetVersion(version.VersionLabel);
//will be explained in detail
int verLink = ver * 512;
string link = "your sharepoint site";
//Console.WriteLine("Version Info:: {0}, {1}, {2}, {3}", version.VersionLabel, version.Created, usr.LoginName, version.CheckInComment);
Console.WriteLine("Document Link: " + link + version.Url);
Console.WriteLine("Version: " + ver.ToString());
Console.WriteLine("Created: " + version.Created);
Console.WriteLine("Created By: " + usr.LoginName);
Console.WriteLine("Comments: " + version.CheckInComment);
}
}
}
}
Console.WriteLine("Pulling information complete.");
Console.Read();
}
注意到我使用了一种名为 GetVersion
的方法吗?这是一个简单的方法,它只获取文档的主要版本号。它看起来像这样:
public static int GetVersion(string itemVersion)
{
int index = itemVersion.IndexOf('.');
return int.Parse(itemVersion.Substring(0, index));
}
如果您需要次要版本,您可以创建另一种方法来提取该信息。该方法的作用是为每个文档版本生成您需要的下载link。至于为什么要将版本倍增到512,大家可以去here.
看看
希望这对您有所帮助。 :)
当我访问 Infopath 文件列表,例如 select 一个并单击版本历史记录时,有没有一种方法可以在不恢复旧版本的情况下下载以前的版本?
这仅适用于图书馆中的项目(不适用于列表)。需要记住的几点:
- 库具有称为文件的属性
- 文件具有称为版本的属性
- 版本有一个 属性 称为 Url
考虑到这三点,您可以通过执行以下操作来下载 URL InfoPath 文件的所有版本历史记录:
public static void Main(string[] args)
{
ClientContext context = new ClientContext(<sharepoint site here>);
Web site = context.Web;
List docLib = site.Lists.GetByTitle(<doc lib here>);
context.Load(docLib);
CamlQuery caml = new CamlQuery();
ListItemCollection items = docLib.GetItems(caml);
context.Load(items);
context.ExecuteQuery();
Console.WriteLine("Pulling information...");
foreach(ListItem item in items)
{
//You can change title to any internal field name that you want to use as basis
if (item.FieldValues["Title"] != null)
{
Console.WriteLine("File Name: " + item.FieldValues["Title"]);
context.Load(item);
//this gets ALL the version of the file
FileVersionCollection versions = item.File.Versions;
context.Load(versions);
context.ExecuteQuery();
if (versions != null)
{
foreach (FileVersion version in versions)
{
User usr = version.CreatedBy as User;
context.Load(usr);
context.ExecuteQuery();
//will be explained in detail
int ver = GetVersion(version.VersionLabel);
//will be explained in detail
int verLink = ver * 512;
string link = "your sharepoint site";
//Console.WriteLine("Version Info:: {0}, {1}, {2}, {3}", version.VersionLabel, version.Created, usr.LoginName, version.CheckInComment);
Console.WriteLine("Document Link: " + link + version.Url);
Console.WriteLine("Version: " + ver.ToString());
Console.WriteLine("Created: " + version.Created);
Console.WriteLine("Created By: " + usr.LoginName);
Console.WriteLine("Comments: " + version.CheckInComment);
}
}
}
}
Console.WriteLine("Pulling information complete.");
Console.Read();
}
注意到我使用了一种名为 GetVersion
的方法吗?这是一个简单的方法,它只获取文档的主要版本号。它看起来像这样:
public static int GetVersion(string itemVersion)
{
int index = itemVersion.IndexOf('.');
return int.Parse(itemVersion.Substring(0, index));
}
如果您需要次要版本,您可以创建另一种方法来提取该信息。该方法的作用是为每个文档版本生成您需要的下载link。至于为什么要将版本倍增到512,大家可以去here.
看看希望这对您有所帮助。 :)