在sharepoint中获取Team Discussion中每个Topic 最后回复信息

我在MSDN发的帖子:http://social.microsoft.com/Forums/zh-CN/partnercndevsharepoint/thread/fc8b39d2-fd5d-49b7-877c-ae67d87e2f6b

如图:

在图中,我们只看到了 创建者, 最后更新的时间, 等等,但是不知道谁是最后回复的人! 而一般论坛都会显示为:   最后回复 某某 11/16/2010/5:49 . 这里来我们通过代码获取最后回复的人!

方法一: 此方法循环量太大

protected void Page_Load(object sender, EventArgs e)
{
    GetDisBoard();
}

public void GetDisBoard()
{
    using (SPSite site = new SPSite("http://moss:5000"))
    using (SPWeb web = site.RootWeb)
    {
        SPList list = web.Lists["Team Discussion"];
        //获取帖子 [注意:这里list.Folders才是帖子, 而不是Items]
        foreach (SPListItem spListItem in list.Folders)
        {
            Response.Write(GetLastPost(spListItem.ID));
            Response.Write("

"
); } } } public string GetLastPost(int topicID) { List<string> replies = new List<string>(); using (SPSite site = new SPSite("http://moss:5000")) using (SPWeb web = site.RootWeb) { SPList list = web.Lists["Team Discussion"];
        //Items:包含了 帖子和回复
        foreach (SPListItem item in list.Items)
        {
            //获取帖子的回复 ParentFolderId指该回复的帖子ID
            if (item["ParentFolderId"] + "" == topicID + "")
            {
                replies.Add("Last reply by " + item.Fields["Created By"].GetFieldValueAsText(item["Created By"]) +
                      " on " + item["Modified"]);
            }
        }
    }
    string lastReply = "No one reply";
    if (replies.Count > 0)
    {
        lastReply = replies[replies.Count - 1];
    }
    return lastReply;
}

 

2. 该方法循环次数有所减少,但是SPSiteDataQuery 对象执行起来也比较耗时!

    public void GetQuery(string DiscussionLastUpdated)
    {
        using (SPSite site = new SPSite("http://moss:5000"))
        using (SPWeb web = site.RootWeb)
        {
            SPSiteDataQuery query = new SPSiteDataQuery();
            query.Webs = "
   
   
    
    "
   
   ;
            // 108 表示Discussion http://msdn.microsoft.com/en-us/library/microsoft.sharepoint.spsitedataquery.lists.aspx
            query.Lists = "
   
   ";
            //query.ViewFields =
            //  "
   
   
   
   
   
   ";
            query.ViewFields = "
   
   ";
            // 中国时间要 –8 这里出来的格式为: 2010-11-17T01:49:01Z
            DiscussionLastUpdated = SPUtility.FormatDate(web, Convert.ToDateTime(DiscussionLastUpdated).AddHours(-8), SPDateFormat.ISO8601);
            //DiscussionLastUpdated 为最后回复的时间, 即最后回复的创建时间
            query.Query =
              @"
   
   
    
    
     
     
     
     
      
      " 
     
     
    
    
   
   +
              DiscussionLastUpdated + "";
            DataTable dt = web.GetSiteData(query);
            foreach (DataRow row in dt.Rows)
            {
                Response.Write(row["Author"] + "" + row["Body"] + " Last by :" + row["DiscussionLastUpdated"] +
                       "
"
); Response.Write("
"
); } } } public void GetDisBoard() { using (SPSite site = new SPSite("http://moss:5000")) using (SPWeb web = site.RootWeb) { SPList list = web.Lists["Team Discussion"]; //获取帖子 foreach (SPListItem spListItem in list.Folders) { GetQuery(spListItem["DiscussionLastUpdated"] + ""); } } }
期待更好的方法出来! 这个功能也许意义不大, 但是通过代码可以了解到一些对象的使用!
 
今天在帖子:http://social.microsoft.com/Forums/zh-CN/sharepointwebpartzhchs/thread/afcb3aab-0238-47bd-968a-125cf85dacf3
MVP Erucy 回复了我, 感谢Erucy提供的帮助.
你可以使用SPQuery对象,这个对象有一个Folder属性,会限制查询的范围 当你找某一个主题最新帖子的时候(主题本质上是一个文件夹) 你就可以把这个文件夹作为参数设置到SPQuery上面 然后: query.Query = "
  
  
   
   
  
  "; // 按创建时间逆序排序 query.RowLimit = 1; // 只取最新的一个 然后再list.GetItems(query) 就可以了,如果有回复的话就会取到最新一个回复的item,后面的你应该就会了
 
code: 已通过测试
using (SPSite site = new SPSite("http://jianghao:5000"))
        using (SPWeb web = site.RootWeb)
        {
            SPList list = web.Lists["Team Discussion"];
            
            //获取帖子
            SPQuery query;
            foreach (SPListItem spListItem in list.Folders)
            {
                query = new SPQuery();
                query.Query = "
   
   
    
    
   
   "; //倒序
                query.RowLimit = 1;//取一个
                query.Folder = spListItem.Folder; //关键代码,设置Folder属性
                SPListItemCollection replies = list.GetItems(query);
                Response.Write(replies.Count == 0
                                   ? "No reply 
"
: replies[0].Fields["Created By"].GetFieldValueAsText(replies[0]["Created By"]) + "
"
); } }
 
 
相关文章:Sharepoint中用编码的方式实现Discussions的创建、删除、回复
 
Technorati 标签: ,
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值