1

SharePoint 2010 に、フィールド "title,count" を持つリストがあります。変更可能なフィールド (カウント) の 1 つです。

このプロパティの最新バージョンにアクセスしたい。この記事による:しかし、まだ受け入れられた答えはありません。

            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;

ここではプロパティにアクセスできますが、「カウント」はここには存在しません。

SharePointのように最終バージョンごとに差分を取りたい

sharepoint 2010 は、バージョン履歴と相違点を表示します

これらの最後のプロパティ値を返す他のメソッドがあります(ここで見つけてください)

  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
  }

ここでエラー

エラーが発生しました。","ExceptionMessage":"値が期待される範囲内にありません

特定のフィールドの最後の値をすべて取得するために、これより短いソリューションはありますか?

4

1 に答える 1

2

残念ながら、実際のバージョン データは CSOM から入手できません。/_layouts/Versions.aspx?list={[THE LIST ID]}&ID=[THE 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();
于 2015-01-19T16:57:28.763 に答える