Programmgesteuertes Abrufen von ListItemVersion mithilfe des Clientobjektmodells SharePoint 2010

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 Details der vorherigen Version verschieben. Trotzdem konnte ich das neueste Objekt verschieben, aber leider kann ich die vorherigen Versionsdaten nicht abrufen. Ich habe dies mit Client Object Model versucht und konnte die Versionen abrufen, aber nicht das ListItem der entsprechenden Version. Nachfolgend finden Sie den Code, den ich bis jetzt ausprobiert habe, und helfen Sie mir bei der Lösung dieses Problems.

Außerdem nehme ich die Version des ListItem wie folgt:

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 gesamter Code sieht so aus:

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();

    }
}

Antworten auf die Frage(3)

Ihre Antwort auf die Frage