Hallo,
ich habe einen selbst entwickelten Webpart auf meiner Website (testhalber auf einer blank site) hinzugefügt. Diesem stehen neben den Standardeinstellungen wie Layout, Darstellung etc noch benutzerdefinierte Reiter mit Eigenschaften zur Verfügung. Auf der Website kann ich diese logischerweise Problemlos setzen, wie mache ich dies aber in C#? Ich habe zunächst meinen Webpart im Programm eingelesen
string errMsg = string.Empty; SPFile myWebPartFile = web.GetFile("_catalogs/wp/myWebpart.webpart"); XmlTextReader read = new XmlTextReader(myWebPartFile.OpenBinaryStream()); var myWebPart = manager.ImportWebPart(read, out errMsg);
//nach den änderungen manager.AddWebPart(myWebPart,"Main", 1); manager.SaveChanges(myWebPart);
Mit myWebPart.Hidden = true; könnte ich zum Beispiel die Sichtbarkeit meines benutzerdefinierten Webparts auf unsichtbar setzen. Wie setze ich aber meine eigenen Eigenschaften? Ich habe zum Beispiel einen Reiter Datenquellen unter dem man eine Lookup Spalte angeben muss, ist diese nicht gesetzt wird der Webpart nicht korrekt angezeigt. Diese wird in C# logischerweise nicht angezeigt.
Da ich diesen Webpart allerdings auf vielen Seiten via C# Programm hinzufügen und regelmäßig updaten muss, ist eine Lösung via Website für mich leider undenkbar. Als ich das ganze durchdebuggt habe ist mir aufgefallen, dass unter WebBrowsableObject des Webparts alle Eigenschaften stehen, diese konnte ich jedoch nicht setzen. Weder mit ["Spaltenname"] = Wert noch mit direkter Zuweisung..
Habt ihr eine Idee wie man an die Attribute kommt bzw. diese setzt? MFG Mstel
Ich hab sowas schon ewig nicht mehr gemacht, weshalb ich Dir höchstens die grobe Richtung zeigen kann. Wobei es zwei Möglichkeiten gibt.
1. Der Webpartmanager gibt Dir ein Objekt vom Typ Webpart. Das kannst Du in Deinen eigenen Typ casten und dann ganz normal auf die Properties zugreifen.
2. Wenn Du Dein Webpart aus einer Seite exportierst und dann die exportierte Datei öffnest (es ist XML), siehst Du, daß sich Deine Properties dort nach diesem Schema finden (oder zumndest so ähnlich):<Property Name="NameOfProperty">value</Property>Dieses XML kann man natürlich ebenfalls manipulieren.
Hi,
ich habe mir mal die exportierte .aspx Datei vorher und nachher angesehen (so wie in Methode 2 beschrieben) und festgestellt, dass ich dort nur eine Textersetzung an der entsprechenden Stelle vornehmen müsste um dieselbe Funktionalität zu erzeugen, wie mit der Weboberfläche. Kann ich eine .aspx Datei vom SharePointServer als Text zur Verarbeitung in C# (Visual Studio) einlesen und von dort aus verändern und anschließend wieder abspeichern? Wenn ja, geht das direkt in einem Schritt oder muss ich diese Datei erst lokal ablegen, auschecken/löschen und anschließend hinzufügen/aktualisieren? Wenn nicht muss ich auf Methode1 zurückschreiben. MFG Mstel
Die ganze aspx solltest Du nicht auf diese Art manipulieren. Das schafft nur Probleme. Aber das Webpart an sich kannst Du damit bearbeiten. Ich würde das tun bevor ich es in die Seite einsetze.
Mir ist auch aufgefallen, dass das gar nicht möglich wäre. Denn, wenn ich versuche eine .aspx Seite als Datei von einer Website abzurufen, ist das ja lediglich der HTML Output der Seite, den ich erhalte. Dort stehen ja nicht Property-Values drin. Bearbeiten bevor ich es in die Seite einsetze ist ja demnach nur in Variante 1 deiner Lösungsvorschläge machbar, hab ich das richtig verstanden? Desweiteren nochmal vielen dank! MFG MStel
MStel:wenn ich versuche eine .aspx Seite als Datei von einer Website abzurufen, ist das ja lediglich der HTML Output der Seite
Das passiert, wenn Du es mit WebClient und über die http-Adresse machst. Ansonsten kannst Du Seiten wie jedes andere Dokument in SharePoint problemlos als SPFile öffnen. Nur bei Webpartseiten bringt das nichts, weil sie beim Wieder-Speichern kaputtgehen - meistens jedenfalls.
Du setzt doch das Webpart mit diesem Code in die Seite:
SPFile myWebPartFile = web.GetFile("_catalogs/wp/myWebpart.webpart");XmlTextReader read = new XmlTextReader(myWebPartFile.OpenBinaryStream());var myWebPart = manager.ImportWebPart(read, out errMsg);
In Zeile 2 hast Du doch einen XmlTextReader, der genau das XML des Webparts liefert und das kann man jetzt auch manipulieren. Oder eben Du nimmst das Webpart aus Zeile 3 und castest es in Deinen Typ, damit Du das Property direkt setzen kannst.
Andi Fandrich: Nur bei Webpartseiten bringt das nichts, weil sie beim Wieder-Speichern kaputtgehen - meistens jedenfalls.
Nur bei Webpartseiten bringt das nichts, weil sie beim Wieder-Speichern kaputtgehen - meistens jedenfalls.
Andi Fandrich: In Zeile 2 hast Du doch einen XmlTextReader, der genau das XML des Webparts liefert und das kann man jetzt auch manipulieren.
In Zeile 2 hast Du doch einen XmlTextReader, der genau das XML des Webparts liefert und das kann man jetzt auch manipulieren.
Andi Fandrich: Oder eben Du nimmst das Webpart aus Zeile 3 und castest es in Deinen Typ, damit Du das Property direkt setzen kannst. Wird wohl drauf hinauslaufen, hab so etwas zwar noch nie gemacht aber da gibt's im Internet ja mit Sicherheit genug zu. Vielen Dank dass du dich so mit meiner Problematik befasst hast, du hast mir auf jeden Fall weiter geholfen. MFG Mstel
Oder eben Du nimmst das Webpart aus Zeile 3 und castest es in Deinen Typ, damit Du das Property direkt setzen kannst.