9

SPListItem.Versionsコレクションを繰り返し処理して、承認された最新のリストアイテムを見つけようとしています。

私のリストアイテムには3つのバージョンがあります。最初の2つは承認され、最後はドラフトです。しかし、私のコードは、それらがすべてドラフトであると言っています!助けてください!

// 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;
    }
}
4

3 に答える 3

10

Mattiasが推奨し、実装した方法が、それを行うための最良の方法です。少し厄介ですが、アイテムは最新のものから古いものへと並べられているため、効率的です。これは、公開されたバージョンとすぐに一致する可能性が高いことを意味します。

MSDN SPListItemVersionCollectionの記事(具体的にはSebastian Wojciechowskiの追加)を拡張します。

// 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]
于 2009-09-02T09:43:04.010 に答える
9

item.Versions [index]はSPListItemVersionインスタンスを返し、SPListItemVersion.ListItemは親SPListItemを返します。したがって、versionedItemはアイテムと同じオブジェクトを参照することになり、同じバージョンを何度もチェックします。

実際にチェックしたいと思います

if (item.Versions[index].Level == SPFileLevel.Published) {
  // check item.Versions[index].VersionLabel
}
于 2009-09-02T07:37:13.700 に答える
6

私のコードは次のようになりました:

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

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

かなりきちんとしていて、顧客に展開したときにうまくいくことを本当に望んでいます!

于 2009-09-02T08:52:23.113 に答える