SharePoint 2010 统计本月内文档修改的数量
2011-10-11 08:06
417 查看
客户要求统计出当前月内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,修改时间在本月内;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:根据新的数据源绑定数据
相关文章推荐
- sharepoint 2010 修改文档库列排序
- 在SharePoint 2010中配置发送到连接可以向任意位置发送文档
- sharepoint 2010:如何修改search box的样式
- SharePoint 2010 文档管理系列
- sharepoint 2010 用timer job 实现文档下载次数
- SharePoint eventhandler 如何判断一个文档是否被人修改
- sharepoint 2010 如何给文档库或自定义列表添加评论功能
- 使用SharePoint 2010 Management Shell修改SharePoint 2010 身份认证方式的两种方法
- 用lists.asmx web service 获取文件夹中的文件数量 - SharePoint 2010
- 如何修改SharePoint 2010在浏览器选项卡上的缩略图
- SharePoint 2010文档管理的自动分发功能
- 使用 SharePoint 2010 Client Object Model 修改用户Email(邮箱) 地址
- 修改SPS2010的Search Core Results webpart, 令其显示文档被索引了的所有属性
- SharePoint 2010 修改密码 之 增强用户体验效果
- 配置并使用SharePoint 2010的文档转换功能
- Sharepoint 2010 精简面板 可以对搜索结果分类 并统计个数
- SharePoint 2010 文档管理之文档推送
- git 统计修改代码数量以及git学习总结
- SharePoint 2010 升级到2013时 保证用户能够连接但不能修改正升级的数据
- SharePoint 2010 文档管理系列