您的位置:首页 > 其它

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:根据新的数据源绑定数据
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: