7

Mam scenariusz, w którym muszę przenieść wszystkie moje dane na liście programu SharePoint 2010 (name = "VersionTestList") do bazy danych serwera SQL. Ponieważ na liście włączono obsługę wersji, chcę również przenieść szczegóły poprzedniej wersji. W każdym razie udało mi się przenieść najnowszy przedmiot, ale niestety nie jestem w stanie uzyskać danych poprzedniej wersji. Próbowałem tego przy użyciu Client Object Model i mogłem uzyskać wersje, ale nie mogłem uzyskać ListItem tej odpowiadającej wersji. Poniżej znajduje się kod, który próbowałem do tej pory i proszę mi pomóc w rozwiązaniu tego problemu.Programowo uzyskać ListItemVersion przy użyciu modelu obiektu klienta SharePoint 2010

Również Biorę wersji ListItem tak:

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

Cały mój kod jest tak:

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

    } 
} 

Odpowiedz

-1

powinny być w stanie uzyskać dane elementu listy za pomocą SPFileVersion.Properties który da ci hashtable metedata pliku zobacz MSDN - SPFileVersion.Properties Property.

TWOJEJ Wewnątrz foreach spróbować

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

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

klasy model obiektowy Server nie zapewniają zbyt duża pomoc przy próbie wykorzystania modelu obiektu klienta. –

0

Trzeba zainicjować web.ServerRelativeUrl jak ten

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

Bez powodzenia, otrzymuję komunikat "Podany obiekt nie należy do listy." – PeterX

+0

Jeśli używam 'var oldFile = web.GetFileByServerRelativeUrl ("/"+ _version.Url); clientContext.Load (file, item => item.ListItemAllFields); clientContext.ExecuteQuery(); 'Otrzymuję komunikat" Wartość nie mieści się w oczekiwanym zakresie. "Błąd. – PeterX

0

można dostać starszą wersję pliku takiego

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