В нашем приложении мы храним две копии файла - утвержденную и неутвержденную. Оба отслеживают свои версии отдельно. Когда неутвержденное затем утверждается, все его версии добавляются как новые версии в утвержденный файл. Чтобы сделать это правильно, мой код должен загружать каждую версию отдельно в утвержденную папку и обновлять элемент каждый раз информацией об этой версии.
По какой-то причине, это не всегда работает должным образом. В моем последнем сценарии сначала была загружена последняя версия, а затем все остальные версии. Тем не менее, мой код явно должен загружать другие версии в первую очередь, это порядок, в котором я его написал. Почему это происходит? И если это возможно, как я могу обеспечить загрузку версий в правильном порядке?
Пояснение - Это не проблема с перечислением - я получаю предыдущие версии в правильном порядке. Происходит то, что окончательная версия, которая написана после цикла, загружается до цикла. Что на самом деле не имеет никакого смысла для меня.
Вот сокращенная версия соответствующего кода.
//These three are initialized earlier in the code.
SPList list; //The document library
SPListItem item; //The list item in the Unapproved folder
int AID; //The item id of the corresponding item in the Approved folder.
byte[] contents; //Not initialized.
/* These uploads are happening second when they should happen first. */
if (item.File.Versions.Count > 0)
{
//This loop is actually a separate method call if that matters.
//For simplicity I expanded it here.
foreach (SPFileVersion fVer in item.File.Versions)
{
if (!fVer.IsCurrentVersion)
{
contents = fVer.OpenBinary();
SPFile fSub = aFolder.Files.Add(fVer.File.Name, contents, u1, fVer.CreatedBy, dt1, fVer.Created);
SPListItem subItem = list.GetItemById(AID);
//This method updates the newly uploaded version with the field data of that version.
UpdateFields(item.Versions.GetVersionFromLabel(fVer.VersionLabel), subItem);
}
}
}
/* This upload happens first when it should happen last. */
//Does the same as earlier loop, but for the final version.
contents = item.File.OpenBinary();
SPFile f = aFolder.Files.Add(item.File.Name, contents, u1, u2, dt1, dt2);
SPListItem finalItem = list.GetItemById(AID);
UpdateFields(item.Versions[0], finalItem);
item.Delete();