none
SharePoint Server 2010 - Mit Visual Studio code behind the page (listview.aspx) einlesen, um Webpart Properties zu ändern

    Allgemeine Diskussion

  • Hallo,

    Zunächst zur Ausgangssituation:
    Meine Aufgabe ist es, einen Webpart den ich bereits via C# Visual Studio Anwendung auf einer Listview.aspx hinzugefügt habe  auch über dieselbe Anwendung einzurichten und zu konfigurieren.
    Da es ein nicht von mir entwickelter Custom Webpart ist, besitzt dieser auch Eigenschaften, die nicht im Microsoft SharePoint Webpart typ vorhanden sind, demnach kann ich diesen vorm hinzufügen des Webparts nicht einfach in einem Schritt setzen.
    Daher habe ich überprüft was die unterschiede der aspx Seite zwischen einem noch nicht eingerichteten Webpart und einem fertig eingerichteten Webpart sind und wollte diese, wirklich überschaubaren Änderungen von Hand in Visual Studio vornehmen.

    Dazu benötige ich allerdings den Code, der in der .aspx Seite der View steht in einer Variable - und genau das bekomme ich nicht hin.

    Ich komme nicht an den XML Code, der Hinter der Seite steht, sondern lediglich an das vom Browser gerenderte HTML der Seite. Weder der Versuch, die ASPX als eine SPFile einzulesen und über die Properties Eigenschaften zu ändern, noch ein Stream + Streamreader machen es mir möglich, an das XML zu kommen.
    Hier ein Ausschnitt meines Codes:

    SPFile wp = web.GetFile("_catalogs/wp/meinWebpart.webpart");
    XmlTextReader reader = new XmlTextReader(wp.OpenBinaryStream());
    var Webpart = manager.ImportWebPart(reader, out errMsg);

    Wenn ich mir hier das Webpart objekt im Breakpoint ansehe, kann ich die benötigten Eigenschaften (quasi den XML Code der Listview) zwar im WebBrowsableObject sehen, versuche ich aber über Properties oder Attributes etwas zu ändern, kommt die Meldung die Eigenschaften wären schreibgeschützt.

    Ich sehe wirklich keine Möglichkeit die Eigenschaften der Webparts zu ändern, außer die .aspx Datei vorher herunterzuladen und lokal zu bearbeiten und anschließend wieder hochzuladen. Diesen Lösungsweg möchte ich allerdings vermeiden, daher meine frage:
    Habt ihr eventuell eine Lösung für dieses Problem?

    MFG

    Donnerstag, 9. März 2017 12:44

Alle Antworten

  • Hallo ytmfb,

    versuche ich aber über Properties oder Attributes etwas zu ändern, kommt die Meldung die Eigenschaften wären schreibgeschützt.

    Wie lautet der genaue Text der Fehlermeldung?

    Schau mal, ob die GetManifestResourceStream-Methode aus dem Beispielcode in folgendem Blogeintrag Dir weiterhelfen wird:
    How to read an XML file from a Web Part in SharePoint

    Ein anderes Verfahren wäre, System.IO.File.ReadAllText mit dem .webpart als Parameter aufzurufen. Ich verweise Dich auf diesen Thread:
    How to get webpart xml for a webpart usinig client object model

    Gruß,
    Dimitar


    Bitte haben Sie Verständnis dafür, dass im Rahmen dieses Forums, welches auf dem Community-Prinzip „IT-Pros helfen IT-Pros“ beruht, kein technischer Support geleistet werden kann oder sonst welche garantierten Maßnahmen seitens Microsoft zugesichert werden können.

    Freitag, 10. März 2017 12:34
    Moderator
  • Zunächst einmal entschuldigung für das Doppelposting, ich hatte den Text nur leicht abgeändert und in ein anderes Forum geschrieben, da ich rückblickend vermutet habe, das erste mal ins falsche Forum gepostet zu haben(und auch deswegen keine Antwort darauf kam).

    Ich bin nun etwas weiter gekommen als zuvor, habe aber immernoch keine endgültige Lösung gefunden.
    Mit folgendem Code habe ich es geschafft, die Beschreibung meines gewünschten Webparts an genau erwünschter Stelle zu verändern.(das Objekt ist demnach schonmal genau das Richtige)
    Die auskommentierte Zeile stellt jedoch den nicht funktionierenden Teil dar.

    SPFile WebPart = web.GetFile("_catalogs/wp/meinWebpart.webpart");
    XmlTextReader read = new XmlTextReader(WebPart.OpenBinaryStream());
    var meinWebPart = webpartmanager.ImportWebPart(read, out errMsg);
    //meinWebPart.Attributes["customAttribute"] = "Testwert";
    orgChartWebPart.Description = "Eigene Beschreibung";
    wpm.AddWebPart(meinWebPart, "Main", 1);
    wpm.SaveChanges(meinWebPart);

    Bei diesem Lösungsansatz wirft mein Visual Studio an der Stelle mit den Attributes auch keine Fehlermeldung aus, allerdings passiert auch nichts, egal welches meiner Custom Attribute ich versuche dort zu setzen.

    In mein Projekt einbinden würde ich das webpart nur ungern, da ich letztendlich eine .wsp Datei (TimerJob) machen werde und diese auf mehreren Rechnern hier verteile. Da die eigentliche Lösung allerdings nicht von mir stammt, würde ich diese ungerne einbinden.
    Der XML Reader Lösungsansatz hat mir ebenfalls nicht die Werte zurückgeliefert, die ich setzen muss.

    Hoffe ich finde noch eine Lösung dafür..

    mfg

    ytmfb

    Montag, 13. März 2017 14:05