2009-09-02 36 views
9

Tôi đang cố gắng lặp qua bộ sưu tập SPListItem.Versions để tìm mục danh sách được phê duyệt mới nhất.Tìm phiên bản mới nhất được phê duyệt của SPListItem

Mục danh sách của tôi có ba phiên bản: hai phiên bản đầu tiên được phê duyệt, mục cuối cùng là bản nháp. Nhưng mã của tôi nói rằng tất cả chúng đều ở dạng nháp! Hãy giúp tôi!

// Iterate through all versions 
for (int index = 0; index < item.Versions.Count; index++) 
{ 
    SPListItem versionedItem = item.Versions[index].ListItem; 

    // Check if moderation information is set to approved 
    if (versionedItem.ModerationInformation.Status.Equals(SPModerationStatusType.Approved)) 
    { 
     // We found an approved version! 
     itemFound = versionedItem; 
    } 
} 

Trả lời

9

item.Versions [index] trả về phiên bản SPListItemVersion và SPListItemVersion.ListItem trả về SPListItem gốc. Vì vậy, versionedItem của bạn sẽ kết thúc đề cập đến cùng một đối tượng như mục, và bạn đang kiểm tra cùng một phiên bản hơn và hơn nữa.

Tôi tin rằng bạn thực sự muốn kiểm tra

if (item.Versions[index].Level == SPFileLevel.Published) { 
    // check item.Versions[index].VersionLabel 
} 
+0

Nó làm việc, cảm ơn! Không phải là một chút khó xử để có được cha mẹ như thế? Và các điều khoản được trộn lẫn nếu bạn hỏi tôi khi nào trong SharePoint bạn gọi nó là phê duyệt tôi đoán, trong danh sách Kiểm duyệt của nó và trên danh sách mục Cấp của nó !? –

6

Mã của tôi đã kết thúc như thế này:

if (doclist.EnableVersioning) 
{ 
    SPListItemVersionCollection allVersions = item.Versions; 

    // Iterate through all versions 
    foreach (SPListItemVersion version in allVersions) 
    { 
     if (version.Level == SPFileLevel.Published) 
     { 
      itemFound = version.ListItem; 
     } 
    } 
} 

Khá gọn gàng và tôi thực sự hy vọng nó hoạt động khi triển khai tại các khách hàng!

+3

Mục cuộc gọiFound = version.ListItem; sẽ trả lại câu hỏi mới nhất có thể không phải là Bản phê duyệt mới nhất. Hãy coi chừng –

9

Cách Mattias đề xuất và bạn đã triển khai là cách tốt nhất để làm điều đó. Đó là một chút khó xử nhưng vẫn hiệu quả như các mục được đặt hàng từ mới nhất đến cũ nhất. Điều này có nghĩa là bạn có khả năng nhận được kết quả phù hợp trên phiên bản đã xuất bản một cách nhanh chóng.

Mở rộng trên MSDN SPListItemVersionCollection article (đặc biệt Ngoài Sebastian Wojciechowski của):

// Current version of the item (note: this may be a draft) 
SPListItem.Versions[0] 

// Previous version of the item 
SPListItem.Versions[1] 

// First version of the item 
SPListItem.Versions[SPListItem.Versions.Count - 1] 
+0

Cảm ơn, rất hữu ích! Và cảm ơn bạn đã chỉnh sửa chính tả cẩu thả của mình! :) –

+0

Không sao cả. Được chỉnh sửa để giúp người dùng tìm câu hỏi của bạn sau này. –

+0

Vì liên kết bạn đã bao gồm bây giờ trỏ đến SharePoint 2013 và nội dung cộng đồng mà bạn đã tham chiếu được đính kèm với phiên bản trước: http://msdn.microsoft.com/en-us/library/microsoft.sharepoint.splistitemversioncollection(v=office .12) .aspx – Chloraphil

Các vấn đề liên quan