История версий документа через CSOM

В настоящее время я пытаюсь получить историю документов семейства сайтов SharePoint 2010 через CSOM.

Код, который я использую для этого, находится здесь:

using (var clientContext = new ClientContext("http://localhost/sites/mysite"))
{
    File file = clientContext.Web.GetFileByServerRelativeUrl(url);
                clientContext.Load(file, f => f.ListItemAllFields);
                clientContext.ExecuteQuery();
}

Всякий раз, когда я запускаю этот код, он выдает исключение:

Исключение сервера было вызвано кодом пользователя

Значение выходит за пределы ожидаемого диапазона

Обратите внимание, что:

  • История версий включена
  • Изменение f.ListItemAllFields на f.Versions также не исправляет ситуацию.

person GrantByrne    schedule 21.08.2013    source источник


Ответы (1)


Вот мой код для получения истории документа и сохранения в наборе данных

    public DataSet GetDoucmentHistory(string siteUrl, string listName, int id)
    {
        using (ClientContext ctx = new ClientContext(siteUrl))            {
            ctx.Credentials = new NetworkCredential(_username, _password, _domain);
            var file = ctx.Web.Lists.GetByTitle(listName).GetItemById(id).File;
            var versions = file.Versions;
            ctx.Load(file);

            ctx.Load(versions);
            ctx.Load(versions, vs=>vs.Include(v=>v.CreatedBy));

            ctx.ExecuteQuery();

            var ds = CreatHistoryDataSet();
            foreach (FileVersion fileVersion in versions)
            {
                var row = ds.Tables[0].NewRow();
                row["CreatedBy"] = fileVersion.CreatedBy.Title;
                row["Comments"] = fileVersion.CheckInComment;
                row["Created"] = fileVersion.Created.ToShortDateString() + " " +
                                 fileVersion.Created.ToShortTimeString();
                row["Title"] = file.Title;
                row["VersionLabel"] = fileVersion.VersionLabel;
                row["IsCurrentVersion"] = fileVersion.IsCurrentVersion;
                ds.Tables[0].Rows.Add(row);
            }

            return ds;
        }

    }

    private static DataSet CreatHistoryDataSet()
    {
        DataSet ds = new DataSet();
        DataTable table = new DataTable();
        table.Columns.Add("Title");
        table.Columns.Add("Created");
        table.Columns.Add("CreatedBy");
        table.Columns.Add("EncodedAbsUrl");
        table.Columns.Add("VersionLabel");
        table.Columns.Add("Comments");
        table.Columns.Add("IsCurrentVersion");
        ds.Tables.Add(table);
        return ds;
    }
person Code Mechanics    schedule 09.10.2013
comment
хорошо, это работа для библиотеки документов. как насчет того, чтобы получить конкретное значение определенного столбца для последних версий listItems? какой оператор я могу заменить для .File или если мы хотим получить задачи из вложенной сводной задачи в списках задач? - person saber tabatabaee yazdi; 11.04.2014
comment
Есть ли способ получить объект FileVersion File или свойство уровня утверждения для файла, связанного с обрабатываемой версией FileVersion? - person anairinac; 04.09.2015
comment
@sabertabaeeeyazdi ты нашел решение для этого? Я проверил весь Интернет, чтобы найти способ получить значения столбцов из старой версии, но безуспешно. Можно ли это сделать на хостинге у провайдера? - person Flezcano; 28.07.2017