Frage

Wir verfügen über einen benutzerdefinierten Code, damit Benutzer Webteile auf einer Seite in ihrer persönlichen Ansicht entfernen, hinzufügen oder neu anordnen können.Es ist eine Publishing-Web-Teilenseite, die von einem Modul mithilfe von Vorlagen erstellt wurde.

Wie können wir Updates auf diese Seite erstellen, um ein Web-Teil zu entfernen?(Anscheinend, wenn ich ignoreifalreadyexists setze= echte Webteile werden zur Seite hinzugefügt.) Bislang haben wir die Seite gelöscht und neu erstellt.Dies zerstört alle Webparts-Personalisierungen, die ein Benutzer möglicherweise getan hat, und das ist nicht mehr akzeptabel, da wir jetzt in der Produktion sind.

Gibt es eine Möglichkeit, die persönliche Ansicht der Benutzer nach dem Löschen und Wiederherstellen einer Seite wiederherzustellen und wiederherzustellen?

War es hilfreich?

Lösung

In simple terms doing something like (important here is of course PersonalizationScope.User):

        SPLimitedWebPartManager webPartManager = SPContext.Current.Web.GetLimitedWebPartManager(this.Request.Url.ToString(), PersonalizationScope.User);
        int wpCounter = webPartManager.WebParts.Count; //get counter
        /*either start looping or for a single web part use*/        
WebPart webPart = webPartManager.WebParts[wpId];
         /*do something with the web part*/

But this has 1 important limitation - it only works for Web parts placed in Web part zone. In addition there is a method (actually part of the ASP.NET Web part infrastructure) called SavePersonalizationState via the Personalization property on each Web part, see more here (http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.webparts.personalizationprovider.savepersonalizationstate(v=vs.90).aspx). I haven't really been in a situation to try myself!

The biggest challenge would be maybe to collect personalization data for all users. Maybe the fact that it uses the Provider pattern could help, by using the FindState method (http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.webparts.personalizationprovider.findstate(v=vs.90).aspx) to extract all data.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit sharepoint.stackexchange
scroll top