7

Ich habe ein Szenario, in dem ich alle meine Daten in einer SharePoint 2010-Liste (name = "VersionTestList") in eine SQL Server-Datenbank verschieben muss. Da die Versionsverwaltung in der Liste aktiviert ist, möchte ich auch die vorherigen Versionsdetails verschieben. Wie auch immer, ich konnte den letzten Artikel verschieben, aber leider kann ich die Daten der vorherigen Version nicht abrufen. Ich habe versucht, dies mit Client-Objekt-Modell und in der Lage, die Versionen zu bekommen, aber nicht in der Lage, das ListItem der entsprechenden Version zu erhalten. Bitte finden Sie unten den Code, den ich bis jetzt versucht habe, und helfen Sie mir bei der Lösung dieses Problems.Programmgesteuertes Abrufen von ListItemVersion mithilfe des Clientobjektmodells SharePoint 2010

Auch ich nehme die Version des ListItem wie folgt aus:

string path = web.ServerRelativeUrl + "/Lists/VersionTestTable/1_.000"; 
File file = web.GetFileByServerRelativeUrl(path); 
clientContext.Load(file, item=>item.ListItemAllFields); 
FileVersionCollection versions = file.Versions; 
clientContext.Load(versions); 
oldVersions = clientContext.LoadQuery(versions.Where(v => v != null)); 
clientContext.ExecuteQuery(); 

Mein ganzer Code ist wie folgt:

class Program 
{ 
    static void Main(string[] args) 
    { 
     GetVersionsUsingCOM(); 
    } 
    public static void GetVersionsUsingCOM() 
    { 
     File file; 
     FileVersionCollection versions; 
     IEnumerable<Microsoft.SharePoint.Client.FileVersion> oldVersions; 
     ClientContext clientContext = new ClientContex("http://server:1200/test/Poc"); 
     Web web = clientContext.Web; 
     clientContext.Load(web); 
     clientContext.ExecuteQuery(); 

     string path = web.ServerRelativeUrl + "/Lists/VersionTestTable/1_.000"; 
     file = web.GetFileByServerRelativeUrl(path); 
     clientContext.Load(file, item=>item.ListItemAllFields); 
     //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) 
      { 
       int count=0; 
       Console.WriteLine(_version.CheckInComment); 
       Console.WriteLine("Version : {0}", _version.VersionLabel); 

      //// Working fine till here but unable to get the version details from version.Url 
       string versionItemUrl = web.ServerRelativeUrl +"/" + _version.Url; 
       File oldFile = web.GetFileByServerRelativeUrl(versionItemUrl); 
       clientContext.Load(oldFile, f=>f.ListItemAllFields); 
       clientContext.ExecuteQuery(); 

       Console.WriteLine(oldFile.ListItemAllFields["Name"]); 
       count++; 
      } 
      oldVersions = null; 
     } 
     Console.ReadLine(); 

    } 
} 

Antwort

-1

sollten Sie in der Lage sein, die Liste Positionsdaten zu erhalten SPFileVersion.Properties mit Dies gibt Ihnen eine Hashtabelle für die Metadaten der Datei, siehe MSDN - SPFileVersion.Properties Property.

In Ihrem foreach versuchen

Hashtable oHash = oFileVersion.Properties; 
ICollection collKeys = oHash.Keys; 

foreach (object oKey in collKeys) 
{ 
    Console.WriteLine(oKey.ToString() + " :: " + oHash[oKey.ToString()].ToString()); 
} 
+1

Server-Objektmodell-Klassen bieten nicht bekommen können zu viel Hilfe beim Versuch, das Clientobjektmodell zu verwenden. –

0

Sie haben web.ServerRelativeUrl zu initialisieren wie diese

oldVersions = clientContext.LoadQuery(versions.Where(v => v != null)); 
clientContext.Load(web, w => w.ServerRelativeUrl); 
clientContext.ExecuteQuery(); 
+0

Kein Glück, ich bekomme 'Das angegebene Objekt gehört nicht zu einer Liste.' – PeterX

+0

Wenn ich' var oldFile = web.GetFileByServerRelativeUrl ("/" + _version.Url); clientContext.Load (Datei, Element => Element.ListItemAllFields); clientContext.ExecuteQuery(); 'Ich bekomme einen' Wert fällt nicht in den erwarteten Bereich.' Fehler. – PeterX

0

Sie ältere Version Datei wie folgt

string versionItemUrl = file.ServerRelativeUrl.Replace(Path.GetFileName(file.ServerRelativeUrl),"") + _version.Url;
File oldFile = web.GetFileByServerRelativeUrl(versionItemUrl); clientContext.Load(oldFile, f=>f.ListItemAllFields);
clientContext.ExecuteQuery();