2009-08-20 4 views
1

Ich habe ein Diskussionsforum in SharePoint 2007, in dem ich alle Diskussionen und ihre Antworten auf derselben Seite anzeigen möchte. Zum Beispiel habe ich 3 Diskussionen innerhalb der Diskussionsrunde und einige Antworten. Ich möchte so etwas wie die folgende Ausgabe auf einer Seite angezeigt werden:Wie kann ich alle Diskussionen und Antworten eines Diskussionsforums zu SharePoint anzeigen?

 
(+) discussion no. 1  replies:3 

(+) discussion no. 2  replies:1 

(+) discussion no. 3  replies:0 

und dann, wenn ich auf expandieren (+), ich will für jede Diskussion alle Antworten lesen:

 
(-) discussion no. 1  replies:3 

     (+) this is the reply to discussion no. 1 

     (+) this is the 2nd reply to discussion no. 1 

(+) discussion no. 2  replies:1 

(+) discussion no. 3  replies:0 

Weiß jemand, wie man das macht?

Antwort

0

Ich habe endlich die Lösung dafür gefunden. Ich musste einige Änderungen an meiner Art vornehmen. Insbesondere muss die Konvertierung des empfangenen Wertes von hex ohne das Präfix 0x erfolgen.

Der Schlüssel ist immer noch, den gleichen ThreadingIndex-Wert zu senden, nachdem Sie einige dunkle Magie damit angewendet haben. Hier ist der Code, den ich mit einer Antwort auf eine Diskussion mit Sharepoint Web Services API hinzuzufügen:

 String trimmedBody = itemNode.Attributes.GetNamedItem("ows_BodyAndMore").Value; 
     String threadIndex = itemNode.Attributes.GetNamedItem("ows_ThreadIndex").Value; 

     StringBuilder mesBody = new StringBuilder(1024); 

     mesBody.AppendFormat("Message-ID: {0}\n", Guid.NewGuid().ToString()); 

     threadIndex = threadIndex.Substring(2); 
     byte[] byteArray = FromHex(threadIndex);       
     threadIndex = base64Encode(byteArray); 
     string encoded = threadIndex; 

     mesBody.AppendFormat("Thread-Index: {0}\n", encoded); 
     mesBody.AppendFormat("Subject: {0}\n", title); //the ows_Title of the discussion - messages don't always have titles... 
     mesBody.Append("Mime-Version: 1.0\n"); 
     mesBody.Append("Content-type: text/html; charset=UTF-8\n\n"); 
     mesBody.Append(body); 
     mesBody.Append(trimmedBody); 
     client.AddDiscussionBoardItem(ListName, Encoding.UTF8.GetBytes(mesBody.ToString())); 

    public static byte[] FromHex(string hex) 
    { 
     hex = hex.Replace("-", ""); 
     byte[] raw = new byte[hex.Length/2]; 
     for (int i = 0; i < raw.Length; i++) 
     { 
      raw[i] = Convert.ToByte(hex.Substring(i * 2, 2), 16); 
     } 
     return raw; 
    } 

    public string base64Encode(byte[] data) 
    { 
     try 
     { 
      byte[] encData_byte = data; 
      string encodedData = Convert.ToBase64String(encData_byte); 
      return encodedData; 
     } 
     catch (Exception e) 
     { 
      throw new Exception("Error in base64Encode" + e.Message); 
     } 
    } 

Hoffnung hilft diese