SharePoint 2010: функция повторного развертывания добавляет дубликаты веб-частей на страницу

Я готовлю страницу публикации как часть функции и размещаю на ней веб-часть с одним списком (см. Код ниже). Все это прекрасно работает.

<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>

Единственная проблема заключается в том, что каждый раз, когда я повторно внедряю свою функцию через Visual Studio, веб-часть представления списка дублируется (т. Е. Другая добавляется в зону веб-части).

Эта проблема затрагивает только веб-части с тегом . Веб-части, снабженные тегом , не дублируются.

Как мне это предотвратить?

3 ответа

Вы можете добавить приемник функций и добавить веб-часть, если она еще не существует вместо добавления веб-части в XML. Что вы подразумеваете под тегом?

Проверьте эту запись в блоге от Waldek Mastykarz. Он имеет код C# ниже, который должен быть похож на то, что вы ищете.

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);
      }
    }
  }
}

Примечание для пользователей SharePoint 2013. Вы должны добавить ReplaceContent=True к тегу. Проблема с дубликатами веб-частей будет решена.

Другие вопросы по тегам