7

Tôi có một kịch bản mà tôi phải di chuyển tất cả dữ liệu của mình trong danh sách SharePoint 2010 (name = "VersionTestList") sang cơ sở dữ liệu máy chủ SQL. Vì phiên bản được bật trong danh sách, tôi cũng muốn di chuyển chi tiết phiên bản trước đó. Dù sao tôi đã có thể di chuyển mục mới nhất, nhưng tiếc là tôi không thể nhận được dữ liệu phiên bản trước đó. Tôi đã thử điều này bằng cách sử dụng mô hình đối tượng khách hàng và có thể nhận được các phiên bản, nhưng không thể có được ListItem của phiên bản tương ứng. Xin vui lòng tìm bên dưới mã mà tôi đã thử cho đến bây giờ và cho tôi một bàn tay trong việc giải quyết điều này.Lập trình ListItemVersion bằng cách sử dụng mô hình đối tượng khách hàng SharePoint 2010

Ngoài ra, tôi đang dùng phiên bản của ListItem như thế này:

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

toàn bộ mã của tôi là như thế này:

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

    } 
} 

Trả lời

-1

Bạn sẽ có thể để có được những dữ liệu mục danh sách sử dụng SPFileVersion.Properties sẽ cung cấp cho bạn khả năng kết nối của metedata của tệp, xem MSDN - SPFileVersion.Properties Property.

Bên trong bạn foreach thử

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

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

lớp mô hình đối tượng Server không cung cấp quá nhiều trợ giúp khi cố gắng sử dụng mô hình đối tượng khách hàng. –

0

Bạn phải khởi tạo web.ServerRelativeUrl như thế này

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

Không may mắn, tôi nhận được 'Đối tượng được chỉ định không thuộc danh sách.' – PeterX

+0

Nếu tôi sử dụng' var oldFile = web.GetFileByServerRelativeUrl ("/" + _version.Url); clientContext.Load (tệp, item => item.ListItemAllFields); clientContext.ExecuteQuery(); 'Tôi nhận được một giá trị' Giá trị không nằm trong phạm vi dự kiến.'. – PeterX

0

bạn có thể nhận được tập tin phiên bản cũ như thế này

string versionItemUrl = file.ServerRelativeUrl.Replace(Path.GetFileName(file.ServerRelativeUrl),"") + _version.Url;
File oldFile = web.GetFileByServerRelativeUrl(versionItemUrl); clientContext.Load(oldFile, f=>f.ListItemAllFields);
clientContext.ExecuteQuery();
Các vấn đề liên quan