質問

私は、最新の承認済みリストの項目を見つけるためにSPListItem.Versionsコレクションを反復処理しようとしています。

最初の二つが承認され、最後はドラフトである。

私のリスト項目は、三つのバージョンがあります。しかし、私のコードは、彼らがすべてのドラフトにしていると言います!助けてください!

// 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;
    }
}
役に立ちましたか?

解決

item.Versions [インデックス]はSPListItemVersionインスタンスを返し、SPListItemVersion.ListItem親SPListItemを返します。だからあなたのversionedItemがアイテムと同じオブジェクトへの参照のうえ終わるだろう、とあなたは何度も何度も同じバージョンをチェックしている。

私はあなたが実際に確認したいと考えています。

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

他のヒント

マティアスは推奨しています、あなたが実装されている方法は、それを行うための最善の方法です。アイテムは、最新から最古に命じているように、それは少しぎこちないが、それでも効率的です。これは、あなたがすぐに発行されたバージョンに一致するものを取得する可能性があることを意味する。

MSDN SPListItemVersionCollection記事の(特にセバスチャン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]

私のコードは次のように見終わっます:

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

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

かなりきちんとしていて、私は本当に顧客に展開するとき、それは作品を願っています!

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top