SPListItemの最新の承認済みバージョンを探します
-
21-09-2019 - |
質問
私は、最新の承認済みリストの項目を見つけるために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;
}
}
}
かなりきちんとしていて、私は本当に顧客に展開するとき、それは作品を願っています!
所属していません StackOverflow