none
SP中对 Discussion Boards 操作 RRS feed

  • 问题

  • sharepoint中 Discussion Boards 中里面的Discussion 和 reply 的层次结构式怎么样的!怎么感觉他们是一个list!
    还有怎么获取 最后回复 Discussion 的 时间,回复人等属性!Boards , Discussion 和 Discussion回复信息他们的关联字段是不是ID啊!
    谢谢!
    Anything Is Possible !
    2010年2月2日 4:22

答案

  • 没错,Discussion (即Subject) 和 Reply 都是存在 Discussion Board 这样一个 List 中的,其中 Discussion 是存在 disczBoardList.Folders,而 Reply 时存在 disczBoardList.Items,注意两者的类型都是 SPListItem,Reply 有一个字段 ParentFolderId 即表示其所属的 Discussion (Discz ListItem 这个字段则为空)

    底层实现上 Discz 对应的ContentType 是 Dicussion,而 Reply 对应的 Message

    至于,Reply 与 Reply 直接哪个字段关联呈现树状,还没分析出来,分析出来告诉我哦:)

    分析这个 Discz Board 有助于我们实现类似需求的自定义 List,特别是 Master-Datail 以及树形结构

    你可以通过类似下面代码来剖析 Disc Board 的结构(下面代码存为 .aspx 并放入 Layouts 即可运行)

    <%@ Assembly Name="Microsoft.SharePoint, Version=12.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %>
    <%@ Assembly Name="Microsoft.Office.Server, Version=12.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %>
    <%@ Import Namespace="Microsoft.SharePoint" %>
    <%@ Import Namespace="Microsoft.Office.Server.UserProfiles" %>

    <%@ Page Language="C#" AutoEventWireup="true" %>

    <!-- http://social.microsoft.com/Forums/en/sharepointportalserverzhchs/thread/cb4b22a5-c649-4206-aebc-11818cf11ebb -->
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

    <script type="text/C#" runat="server">
      
        protected void btnShowFields_Click(object sender, EventArgs e)
        {
            SPWeb web = SPContext.Current.Web;
            StringBuilder sb = new StringBuilder();
            SPList lst = web.Lists[txtDisczBoard.Text.Trim()];
            sb.Append("<table border=1>");
            sb.Append("<th>").Append("InternalName").Append("</th>").Append("<th>").Append("Title").Append("</th>").Append("<th>").Append("FieldValueType").Append("</th>").Append("<th>").Append("StaticName").Append("</th>");
            foreach (SPField fld in lst.Fields)
            {
                sb.Append("<tr>");
                sb.Append("<td>").Append(fld.InternalName).Append("</td>").Append("<td>").Append(fld.Title).Append("</td>").Append("<td>").Append(fld.FieldValueType).Append("</td>").Append("<td>").Append(fld.StaticName).Append("</td>");
                sb.Append("</tr>");
            }
            sb.Append("</table>");
            divOut.InnerHtml = sb.ToString();
        }

        protected void btnShowItems_Click(object sender, EventArgs e)
        {
            SPWeb web = SPContext.Current.Web;
            StringBuilder sb = new StringBuilder();
            SPList lst = web.Lists[txtDisczBoard.Text.Trim()];

            sb.Append("<table border=1>");
            sb.Append("<tr>");
            foreach (SPField fld in lst.Fields)
            {
                sb.Append("<th>").Append(fld.InternalName);
            }
            sb.Append("</tr>");
            foreach (SPListItem subject in lst.Folders)
            {
                sb.Append("<tr style='background:green'>");
                foreach (SPField f in lst.Fields)
                {
                    sb.Append("<td>").Append(subject[f.Id]).Append("</td>");
                }
                sb.Append("</tr>");

                foreach (SPListItem reply in lst.Items)
                {
                    if (reply["ParentFolderId"].Equals(subject.ID))
                    {
                        sb.Append("<tr>");
                        foreach (SPField f in lst.Fields)
                        {
                            sb.Append("<td>").Append(reply[f.Id]).Append("</td>");
                        }
                        sb.Append("</tr>");
                    }
                }
            }
            sb.Append("</table>");
            sb.AppendLine();
            preOut.InnerHtml = sb.ToString();
        }
    </script>

    <html xmlns="http://www.w3.org/1999/xhtml">
    <head id="Head1" runat="server">
        <title>MSDN100204_DiscussionBoardAnatomy</title>
    </head>
    <body>
        <form id="form1" runat="server">
        <div>
            DisczBoard<asp:TextBox ID="txtDisczBoard" runat="server">Team Discussion</asp:TextBox>
            <asp:Button ID="btnShowItems" runat="server" OnClick="btnShowItems_Click"
                Text="Show Items" />
            <asp:Button ID="btnShowFields" runat="server" OnClick="btnShowFields_Click" Text="Show Fields" />
            <pre id="preOut" runat="server"></pre>
            <div id="divOut" runat=server></div>
        </div>
        </form>
    </body>
    </html>


    Hope Helpful | Xiaofeng Wang | http://www.leoworks.net
    2010年2月4日 2:44

全部回复

  • 没错,Discussion (即Subject) 和 Reply 都是存在 Discussion Board 这样一个 List 中的,其中 Discussion 是存在 disczBoardList.Folders,而 Reply 时存在 disczBoardList.Items,注意两者的类型都是 SPListItem,Reply 有一个字段 ParentFolderId 即表示其所属的 Discussion (Discz ListItem 这个字段则为空)

    底层实现上 Discz 对应的ContentType 是 Dicussion,而 Reply 对应的 Message

    至于,Reply 与 Reply 直接哪个字段关联呈现树状,还没分析出来,分析出来告诉我哦:)

    分析这个 Discz Board 有助于我们实现类似需求的自定义 List,特别是 Master-Datail 以及树形结构

    你可以通过类似下面代码来剖析 Disc Board 的结构(下面代码存为 .aspx 并放入 Layouts 即可运行)

    <%@ Assembly Name="Microsoft.SharePoint, Version=12.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %>
    <%@ Assembly Name="Microsoft.Office.Server, Version=12.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %>
    <%@ Import Namespace="Microsoft.SharePoint" %>
    <%@ Import Namespace="Microsoft.Office.Server.UserProfiles" %>

    <%@ Page Language="C#" AutoEventWireup="true" %>

    <!-- http://social.microsoft.com/Forums/en/sharepointportalserverzhchs/thread/cb4b22a5-c649-4206-aebc-11818cf11ebb -->
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

    <script type="text/C#" runat="server">
      
        protected void btnShowFields_Click(object sender, EventArgs e)
        {
            SPWeb web = SPContext.Current.Web;
            StringBuilder sb = new StringBuilder();
            SPList lst = web.Lists[txtDisczBoard.Text.Trim()];
            sb.Append("<table border=1>");
            sb.Append("<th>").Append("InternalName").Append("</th>").Append("<th>").Append("Title").Append("</th>").Append("<th>").Append("FieldValueType").Append("</th>").Append("<th>").Append("StaticName").Append("</th>");
            foreach (SPField fld in lst.Fields)
            {
                sb.Append("<tr>");
                sb.Append("<td>").Append(fld.InternalName).Append("</td>").Append("<td>").Append(fld.Title).Append("</td>").Append("<td>").Append(fld.FieldValueType).Append("</td>").Append("<td>").Append(fld.StaticName).Append("</td>");
                sb.Append("</tr>");
            }
            sb.Append("</table>");
            divOut.InnerHtml = sb.ToString();
        }

        protected void btnShowItems_Click(object sender, EventArgs e)
        {
            SPWeb web = SPContext.Current.Web;
            StringBuilder sb = new StringBuilder();
            SPList lst = web.Lists[txtDisczBoard.Text.Trim()];

            sb.Append("<table border=1>");
            sb.Append("<tr>");
            foreach (SPField fld in lst.Fields)
            {
                sb.Append("<th>").Append(fld.InternalName);
            }
            sb.Append("</tr>");
            foreach (SPListItem subject in lst.Folders)
            {
                sb.Append("<tr style='background:green'>");
                foreach (SPField f in lst.Fields)
                {
                    sb.Append("<td>").Append(subject[f.Id]).Append("</td>");
                }
                sb.Append("</tr>");

                foreach (SPListItem reply in lst.Items)
                {
                    if (reply["ParentFolderId"].Equals(subject.ID))
                    {
                        sb.Append("<tr>");
                        foreach (SPField f in lst.Fields)
                        {
                            sb.Append("<td>").Append(reply[f.Id]).Append("</td>");
                        }
                        sb.Append("</tr>");
                    }
                }
            }
            sb.Append("</table>");
            sb.AppendLine();
            preOut.InnerHtml = sb.ToString();
        }
    </script>

    <html xmlns="http://www.w3.org/1999/xhtml">
    <head id="Head1" runat="server">
        <title>MSDN100204_DiscussionBoardAnatomy</title>
    </head>
    <body>
        <form id="form1" runat="server">
        <div>
            DisczBoard<asp:TextBox ID="txtDisczBoard" runat="server">Team Discussion</asp:TextBox>
            <asp:Button ID="btnShowItems" runat="server" OnClick="btnShowItems_Click"
                Text="Show Items" />
            <asp:Button ID="btnShowFields" runat="server" OnClick="btnShowFields_Click" Text="Show Fields" />
            <pre id="preOut" runat="server"></pre>
            <div id="divOut" runat=server></div>
        </div>
        </form>
    </body>
    </html>


    Hope Helpful | Xiaofeng Wang | http://www.leoworks.net
    2010年2月4日 2:44
  • 以上代码我已经看到效果了!谢谢你!我在试试取我自己想要的数据!
    sharepoint里面关系感觉好复杂哦!
    Anything Is Possible !
    2010年2月4日 3:08
  • Reply 与 Reply 通过AllUserData表中tp_ThreadIndex字段关联呈现树状,通过取item["ThreadIndex"]可取得此field的值,关联关系为父子级别相差五个字节。
    2010年2月21日 2:18
  • Thread Index 0x01CC828177524D5BEA5C2D8F4704B67955347967013B

    Threading Controls 0x01CC828177524D5BEA5C2D8F4704B67955347967013B
    Indentation Level 0x01CC828177524D5BEA5C2D8F4704B67955347967013B
    Indentation 0x01CC828177524D5BEA5C2D8F4704B67955347967013B


    取到Thread index的值为:0x01CC828177524D5BEA5C2D8F4704B67955347967013B,这个怎么使用!?谢谢!


    Anything Is Possible !
    2010年2月24日 1:45