none
извлечение данных из журнала версий RRS feed

  • Вопрос

  • привет !

    есть консольное приложение , которое извлекает данные из журнала версий у каждого элеемнта списка.

    почему-то записываются значения только из последней версии. ( столько раз , сколько было изменений ( версий )

    почему такое проихожит ведь я вроде прохожy по всем версиям ListItem

    foreach (SPListItemVersion objVersion in objVerisionColl)
    {
    }

     код :

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using Microsoft.SharePoint;
    namespace exportversionhistory
    {
        class test
        {
            public static void Main(string[] args)
            {
                test b = new test();
                b.method();
            }
            public void method()
            {
                using (SPSite site = new SPSite("http://sp_1/Deps/sup/"))
                using (SPWeb web = site.OpenWeb())
                {
                    SPList objList = web.Lists["Местонахождение"];
                    SPQuery objQuery = new SPQuery();
                   // objQuery.ViewFields = "<FieldRef Name=\" Расположение \"/>" + "<FieldRef Name=\"Начало\"/>" ;
                   // objQuery.ViewFields = "<FieldRef Name=\"  \"/>";
                   // objQuery.ViewFields = "<FieldRef Name=\"  \"/>";
                    objQuery.Query = "<Where><Gt><FieldRef Name=\"ID\"/><Value Type=\"Counter\">0 </Value></Gt></Where>";
                    SPListItemCollection objItemColl = objList.GetItems(objQuery); // получили все элементы 
                    foreach (SPListItem objItem in objItemColl) // в параметр objItem записиваем элементы 
                    {
                        SPListItemVersionCollection objVerisionColl = objItem.Versions;//  у каждого элемента берем версию и записываем в параметр
                        if (objVerisionColl.Count > 1)
                        {
                            foreach (SPListItemVersion objVersion in objVerisionColl)  // проход по всем версиям 
                            {
                                int versionID = objVersion.VersionId; // получаем id версий
                                DateTime timeofcreation = objVersion.Created; // получаем что-то 
                                string strVersionLabel = objVersion.VersionLabel; // 
                                SPListItem objLstItm = objVersion.ListItem; // дает текущий Listitem
                              
                                string  strFirstName = Convert.ToString(objLstItm["Имя"]);
                                string strPlace = Convert.ToString(objLstItm["Расположение"]);
                                //string str = objLstItm.Versions.GetVersionFromLabel("Version Label")["Расположение"].ToString();
                                Console.WriteLine(strFirstName);
                                //Console.WriteLine(str);
                                Console.WriteLine(strPlace);
                                Console.ReadKey();
                                  
                            }
                           
                        }
                    }
                }
            }спасибо !
        }
    }

Ответы

  • SPListItem objLstItm = objVersion.ListItem; // дает текущий Listitem
                
    

    Судя по вашему коду , вы получаете елемент списка и выводите его, а не его версии !!!

    Для получения значений версии нужно использовать следующее обращение к версии и выводить его !

    objVersion["Имя"]

    
    • Предложено в качестве ответа HeToC 14 мая 2012 г. 14:22
    • Помечено в качестве ответа Roman Zhukov 23 мая 2012 г. 14:01
  • Вот пример, который печатает измененное поле "Title" для всех элементов списка. Вы можете модифицировать код для ваших полей "Имя" и "Расположение" .

    using System;
    using System.Net;
    using Microsoft.SharePoint;
    
    namespace ListConsoleApplication
    {
        class Program
        {
            static void Main(string[] args)
            {
                using (SPSite site = new SPSite("http://perseus"))
                {
                    using (SPWeb web = site.OpenWeb())
                    {
                        string listName = "CL";
                        string fieldName = "Title";
                        SPList list = web.Lists[listName];
    
                        SPQuery oQuery = new SPQuery();
                        SPListItemCollection listItems = list.GetItems(oQuery);
    
                        foreach (SPListItem item in listItems)
                        {                        
                            for(int i = 0; i < item.Versions.Count; i++)
                            {
                                Console.WriteLine(string.Format("Field value is {0}, version number is {1}", item.Versions[i][fieldName].ToString(), item.Versions[i].VersionLabel));
                            }
                        }
                    }
                }            
            }
        }
    }



    Dmitry

    Lightning Tools LogoLightning Tools Check out our SharePoint tools and web parts | Lightning Tools Blog

    • Помечено в качестве ответа Roman Zhukov 23 мая 2012 г. 14:02
    Отвечающий

Все ответы

  • SPListItem objLstItm = objVersion.ListItem; // дает текущий Listitem
                
    

    Судя по вашему коду , вы получаете елемент списка и выводите его, а не его версии !!!

    Для получения значений версии нужно использовать следующее обращение к версии и выводить его !

    objVersion["Имя"]

    
    • Предложено в качестве ответа HeToC 14 мая 2012 г. 14:22
    • Помечено в качестве ответа Roman Zhukov 23 мая 2012 г. 14:01
  • Вот пример, который печатает измененное поле "Title" для всех элементов списка. Вы можете модифицировать код для ваших полей "Имя" и "Расположение" .

    using System;
    using System.Net;
    using Microsoft.SharePoint;
    
    namespace ListConsoleApplication
    {
        class Program
        {
            static void Main(string[] args)
            {
                using (SPSite site = new SPSite("http://perseus"))
                {
                    using (SPWeb web = site.OpenWeb())
                    {
                        string listName = "CL";
                        string fieldName = "Title";
                        SPList list = web.Lists[listName];
    
                        SPQuery oQuery = new SPQuery();
                        SPListItemCollection listItems = list.GetItems(oQuery);
    
                        foreach (SPListItem item in listItems)
                        {                        
                            for(int i = 0; i < item.Versions.Count; i++)
                            {
                                Console.WriteLine(string.Format("Field value is {0}, version number is {1}", item.Versions[i][fieldName].ToString(), item.Versions[i].VersionLabel));
                            }
                        }
                    }
                }            
            }
        }
    }



    Dmitry

    Lightning Tools LogoLightning Tools Check out our SharePoint tools and web parts | Lightning Tools Blog

    • Помечено в качестве ответа Roman Zhukov 23 мая 2012 г. 14:02
    Отвечающий