【问题标题】:Document Version History via CSOM通过 CSOM 记录版本历史
【发布时间】:2013-08-21 20:26:10
【问题描述】:

我目前正在尝试通过 CSOM 提取 SharePoint 2010 网站集的文档历史记录。

我用来完成此操作的代码在这里:

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 也不能解决问题。

【问题讨论】:

    标签: c# sharepoint sharepoint-2010 csom


    【解决方案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;
        }
    

    【讨论】:

    • 好的,这适用于文档库。如果我们想为最新版本的 listItems 获取特定列的特定值,怎么样?我可以用哪个语句替换“.File”,或者我们想从任务列表中的嵌套摘要任务中获取任务?
    • 有什么方法可以获取与正在处理的 FileVersion 关联的文件的 FileVersion 文件对象或批准级别属性?
    • @sabertababaeyazdi 你找到解决方案了吗?我检查了所有互联网以找到一种从旧版本中获取列值的方法,但没有运气。是否可以在托管的提供商中进行?
    猜你喜欢
    • 1970-01-01
    • 2011-10-18
    • 1970-01-01
    • 2012-12-11
    • 2011-04-02
    • 2011-09-07
    • 1970-01-01
    • 2016-08-24
    • 1970-01-01
    相关资源
    最近更新 更多