sharepoint-2010 web-parts

SharePoint 2010: la función de redistribución agrega partes web duplicadas a la página



sharepoint-2010 web-parts (3)

Puede agregar un receptor de funciones y agregar la parte web si ya no existe en lugar de agregar la parte web en XML. ¿Qué quieres decir con tag?

Estoy aprovisionando una página de publicación como parte de una función y colocando un elemento web de vista de lista en la página (ver código a continuación). Todo esto funciona perfectamente hasta ahora.

<Elements> <Module> <File Path="default.aspx" Url="BulletinBoard.aspx" Type="GhostableInLibrary" IgnoreIfAlreadyExists="TRUE"> <Property Name="Title" Value="Bulletin Board" /> <Property Name="PublishingPageLayout" Value="~SiteCollection/_catalogs/masterpage/ListNewsletterStyle.aspx" /> <Property Name="ContentType" Value="Page" /> <Property Name="PublishingPageImage" Value="" /> <View List="Lists/BulletinBoard" BaseViewID="2" WebPartZoneID="Main" WebPartOrder="1"> <![CDATA[ <webParts> <webPart xmlns="http://schemas.microsoft.com/WebPart/v3"> <metaData> <type name="Microsoft.SharePoint.WebPartPages.XsltListViewWebPart,Microsoft.SharePoint,Version=14.0.0.0,Culture=neutral,PublicKeyToken=71e9bce111e9429c" /> <importErrorMessage>Cannot import this Web Part.</importErrorMessage> </metaData> <data> <properties> <property name="Title">Active Announcements</property> <property name="ChromeType">None</property> </properties> </data> </webPart> </webParts> ]]> </View> </File> </Module> </Elements>

El único problema es que cada vez que vuelvo a desplegar mi función a través de Visual Studio, el elemento web de la vista de lista se duplica (es decir, se agrega otro a la zona de elementos web).

Este problema solo afecta las partes web con la etiqueta <Ver ...>. Los elementos web aprovisionados con la etiqueta <AllUsersWebPart ...> no se duplican.

¿Cómo evito esto?


Echa un vistazo a esta entrada del blog de Waldek Mastykarz. Tiene el siguiente código C # que debería ser similar a lo que está buscando.

using (SPSite site = new SPSite("http://sharepoint")) { SPList list = site.GetCatalog(SPListTemplateType.MasterPageCatalog); SPListItemCollection items = list.Items; List<string> webParts = new List<string>(); // find the right Page Layout foreach (SPListItem item in items) { if (item.Name.Equals("CustomPageLayout.aspx", StringComparison.CurrentCultureIgnoreCase)) { SPFile file = item.File; // get the Web Part Manager for the Page Layout SPLimitedWebPartManager wpm = file.GetLimitedWebPartManager(PersonalizationScope.Shared); // iterate through all Web Parts and remove duplicates while (wpm.WebParts.Count > 0) { StringBuilder sb = new StringBuilder(); XmlWriterSettings xws = new XmlWriterSettings(); xws.OmitXmlDeclaration = true; XmlWriter xw = XmlWriter.Create(sb, xws); System.Web.UI.WebControls.WebParts.WebPart wp = wpm.WebParts[0]; wpm.ExportWebPart(wp, xw); xw.Flush(); string md5Hash = getMd5Hash(sb.ToString()); if (webParts.Contains(md5Hash)) wpm.DeleteWebPart(wp); else webParts.Add(md5Hash); } } } }


Nota para los usuarios de SharePoint 2013. Debería agregar ReplaceContent = True a la etiqueta. El problema duplicado de la parte web será resuelto.