C# 如何返回已更改的版本和访问属性之间的差异?

C# 如何返回已更改的版本和访问属性之间的差异?,c#,sharepoint-2010,csom,splistitem,C#,Sharepoint 2010,Csom,Splistitem,我在SharePoint 2010中有一个列表,其中包含字段“title,count”。其中一个字段(count)可能会更改 我想访问此属性的最新版本。作者:但目前还没有公认的答案 File file; FileVersionCollection versions; ClientContext clientContext; IEnumerable<Microsoft.SharePoint.Cli

我在SharePoint 2010中有一个列表,其中包含字段“title,count”。其中一个字段(count)可能会更改

我想访问此属性的最新版本。作者:但目前还没有公认的答案

            File file;
            FileVersionCollection versions;
            ClientContext clientContext;
            IEnumerable<Microsoft.SharePoint.Client.FileVersion> oldVersions;

            clientContext = new ClientContext(siteUrl);
            clientContext.Credentials = new NetworkCredential(user, password, shp.domainname);
            Web web = clientContext.Web;
            clientContext.Load(web);
            clientContext.ExecuteQuery();

            string path = web.ServerRelativeUrl + "/Lists/" + listname + "/" + id1 + "_.000";  // it represet list id 7
            file = web.GetFileByServerRelativeUrl(path);

            ListItem versionListItem = file.ListItemAllFields;

            clientContext.Load(versionListItem);
            clientContext.ExecuteQuery();

            versions = file.Versions;
            clientContext.Load(versions);
            oldVersions = clientContext.LoadQuery(versions.Where(v => v != null));
            clientContext.ExecuteQuery();

            if (oldVersions != null)
            {
                foreach (Microsoft.SharePoint.Client.FileVersion _version in oldVersions)
                {
                     DateTime date = new DateTime();
                     date = _version.Created.Date;
文件;
FileVersionCollection版本;
ClientContext;
i可数旧版本;
clientContext=新的clientContext(siteUrl);
clientContext.Credentials=新的网络凭据(用户、密码、shp.domainname);
Web=clientContext.Web;
clientContext.Load(web);
clientContext.ExecuteQuery();
字符串路径=web.ServerRelativeUrl+“/Lists/”+listname+“/”+id1+“uu0.000”;//it代表列表id 7
file=web.GetFileByServerRelativeUrl(路径);
ListItem versionListItem=file.ListItemAllFields;
加载(versionListItem);
clientContext.ExecuteQuery();
versions=file.versions;
clientContext.Load(版本);
oldVersions=clientContext.LoadQuery(versions.Where(v=>v!=null));
clientContext.ExecuteQuery();
如果(旧版本!=null)
{
foreach(Microsoft.SharePoint.Client.FileVersion\u旧版本)
{
DateTime日期=新的日期时间();
日期=_version.Created.date;
在这里我可以访问属性,但这里不存在“计数”

我希望与SharePoint等最新版本有所不同

我有另一个方法(find it)为我返回最后的属性值

  ClientContext clientContext = new ClientContext("http://basesmc2008");
  Web site = clientContext.Web;
  clientContext.Load(site);
  clientContext.ExecuteQuery();

  File file = site.GetFileByServerRelativeUrl("/Shared Documents/test.tif");
  clientContext.Load(file);
  clientContext.ExecuteQuery();

  ListItem currentItem = file.ListItemAllFields;
  clientContext.Load(currentItem);
  clientContext.ExecuteQuery();


  FileVersionCollection versions = file.Versions;
  IEnumerable<FileVersion> oldVersions = clientContext.LoadQuery(versions.Where(v => v.VersionLabel == "1.0"));
  clientContext.ExecuteQuery();


  if (oldVersions != null)
  {
  foreach (FileVersion oldFileVersion in oldVersions)
  {


     File oldFile = site.GetFileByServerRelativeUrl("/" + oldFileVersion.Url);
     clientContext.Load(oldFile);
     clientContext.ExecuteQuery();

     ListItem oldItem = oldFile.ListItemAllFields;
     clientContext.Load(oldItem);
     clientContext.ExecuteQuery();         
     //error here
  }
ClientContext ClientContext=newclientcontext(“http://basesmc2008");
网站=clientContext.Web;
clientContext.Load(站点);
clientContext.ExecuteQuery();
File File=site.GetFileByServerRelativeUrl(“/Shared Documents/test.tif”);
加载(文件);
clientContext.ExecuteQuery();
ListItem currentItem=file.ListItemAllFields;
clientContext.Load(currentItem);
clientContext.ExecuteQuery();
FileVersionCollection versions=file.versions;
IEnumerable oldVersions=clientContext.LoadQuery(versions.Where(v=>v.VersionLabel==“1.0”);
clientContext.ExecuteQuery();
如果(旧版本!=null)
{
foreach(旧版本中的文件版本oldFileVersion)
{
File oldFile=site.GetFileByServerRelativeUrl(“/”+oldFileVersion.Url);
加载(旧文件);
clientContext.ExecuteQuery();
ListItem oldItem=oldFile.ListItemAllFields;
clientContext.Load(oldItem);
clientContext.ExecuteQuery();
//这里出错
}
这里出错

出现错误。“,“ExceptionMessage”:“值不在 预期范围


对于检索特定字段的所有最后值,是否有比此更短的解决方案?

遗憾的是,CSOM无法提供实际版本数据。您可以从/\u layouts/Versions.aspx?list={[list ID]}&ID=[ITEMID]&IsDlg=1提取数据

我使用HTMLAgilityPack解析出我正在寻找的数据(特定字段的过去值)


我怎么能相信微软没有任何工具,也没有任何通过编程实现的方法呢?感谢这个解决方案。智能方法。
HtmlDocument doc = new HtmlDocument();
doc.LoadHtml(DownloadedPageContent);

HtmlNodeCollection n = doc.DocumentNode.SelectNodes("//tr[@id='vv" + VersionId + FieldName +"']/td");

String value = n[1].InnerText.Trim();