SharePoint 2010 统计本月内文档修改的数量

本文介绍了一种统计SharePoint中本月被修改但非新建文档数量的方法。通过两步查询实现目标:第一步使用CAML查询获取本月内修改的所有文档;第二步对结果进行筛选,排除创建时间与修改时间相同的记录。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

客户要求统计出当前月内SharePoint 内修改文档的数量。

这里需要先说明一点,新上传的文档的创建时间和修改时间是相同的,只有文档本修改后,修改时间才会变化。

那么根据上面的内容,查询条件也就出来:1,修改时间在本月内;2.修改时间不等于创建时间(事实上修改时间只会大于或等于创建时间).

根据这个条件写caml查询是做不到的,因为CAML中至少要保证value是个范围或常量的。我们第二个条件查询都是变量。下面是我的解决方案:

1.写caml查询获取修改时间在本月内的文档。

首先提供两个获取当前月份第一天和最后一天日期的方法:

private string GetFirstDay()
        {
            DateTime dtdd = DateTime.Now;
            DateTime start = new DateTime(dtdd.Year, dtdd.Month, 1);     //月初日期

            return start.ToString("yyyy-MM-dd");
        }
        private string GetEndDay()
        {
            DateTime time = DateTime.Now;
            DateTime start = new DateTime(time.Year, time.Month, 1);
            DateTime end = start.AddMonths(1).AddDays(-1);//月末日期

            return end.ToString("yyyy-MM-dd");
        }

下面是查询相关代码片段:如何获取列表相关代码就略去了。

            SPQuery query = new SPQuery();
            query.ViewFields = "<FieldRef Name='Modified' /><FieldRef Name='Created' />";//这里只查询包含创建时间和修改时间的栏
            query.ViewFieldsOnly = true;
            string sql = "<Where>" + "<And>" + "<Geq>" + "<FieldRef Name='Modified' />"
                + "<Value Type='DateTime'>" + "{0}" + "</Value>" + "</Geq>"
                + "<Leq>" + "<FieldRef Name='Modified' />" + "<Value Type='DateTime'>"
                + "{1}" + "</Value>" + "</Leq>" + "</And>" + "</Where>";
            query.Query = string.Format(sql, GetFirstDay(), GetEndDay());

            SPListItemCollection listItems = list.GetItems(query);
            DataTable dt = listItems.GetDataTable();//将其转换成datatable,然后再对datatable进行第二次查询
            if (dt != null)
            {
                // Presuming the DataTable has a column named Date.
                string expression = "Modified <> Created";//查询条件是创建时间不等于修改时间

                string sortOrder = "Created DESC";
                DataRow[] foundRows;

                // Use the Select method to find all rows matching the filter.
                foundRows = dt.Select(expression, sortOrder);

                Label1.Text = foundRows.Length.ToString();//显示符合条件的文档数量
            }

总结:

如果用caml查询创建时间不等于修改时间的记录是做不到的,所以这里分步进行:

首先利用caml查询修改时间在当前月内的记录,并将结果转换成datatable

然后对datatable进行第二次查询,获取创建时间不等于修改时间的行数。

 感谢网友大连的TG哥提供思路:

他的思路:step1:CAML查询出本月修改的文档;
               step2:对查询出的数据进行筛选,重构数据源
               step3:根据新的数据源绑定数据

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值