SharePoint 2010: как жестко закодировать идентификатор веб-части в AllUsersWebPart XML? - PullRequest
1 голос
/ 16 февраля 2011

У меня есть функция, которая обеспечивает пользовательский файл Default.aspx для моего сайта публикации .

В elements.xml ,У меня есть различные узлы AllUsersWebPart , которые заполняют зоны веб-частями.Мне нужно предоставить жестко запрограммированный идентификатор (guid) для каждой из этих веб-частей на данный момент - кто-нибудь знает, как это сделать?

Я знаю, что формат идентификатора веб-части: g_00000000_0000_0000_0000_000000000000 , но если я добавлю свойство идентификатора (см. Ниже) и затем активирую свою функцию, все направляющие веб-частей будут разными.

<AllUsersWebPart WebPartZoneID="TopZone" WebPartOrder="1">
<![CDATA[
    <webParts>
        <webPart xmlns="http://schemas.microsoft.com/WebPart/v3">
            <metaData>
                <type name="..." />
                <importErrorMessage>...</importErrorMessage>
            </metaData>
            <data>
                <properties>
                    <property name="ID" type="string">g_FB777184_F9AB_4747_AA71_1BF0C96E535A</property>
                </properties>
            </data>
        </webPart>
    </webParts>
]]>
</AllUsersWebPart>

К вашему сведению: мне нужно жестко закодировать идентификатор для каждого из моихвеб-частей, потому что у меня есть отдельный приемник объектов, который использует идентификатор для определения местоположения каждой веб-части на странице (у меня 6 одинаковых частей на странице с одинаковым названием), а затем он назначает аудиторию каждой части (так что только 1видим в любое время для пользователя).

Ответы [ 3 ]

4 голосов
/ 19 января 2012

Вы были так близко.Попробуйте использовать атрибут «ID» элемента «AllUsersWebPart» (или при подготовке веб-части представления списка с помощью элемента «View»):

<View List="Lists/Announcements" BaseViewID="0" WebPartZoneID="Top" ID="g_42fa735b_3cae_47d2_a773_b591b9abfd7a" />

или

  <AllUsersWebPart ID="g_21f871c5_3575_4182_a7e2_64f682877071" WebPartOrder="1" WebPartZoneID="Top">
    <![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="ListUrl" type="string">Lists/Tasks</property>
            <property name="ExportMode" type="exportmode">All</property>
          </properties>
        </data>
      </webPart>
    </webParts>
    ]]>
  </AllUsersWebPart>
0 голосов
/ 17 февраля 2011

Хорошие и плохие новости ...

Подход, который я использовал, на самом деле действителен, однако он будет работать, только если ваши веб-части не размещены в зоне веб-частей.При размещении в зоне инфраструктура веб-части автоматически устанавливает значение WebPart.ID (подтверждено на MSDN ).

Чтобы жестко закодировать идентификаторы веб-части, необходимо поместитьваши веб-части прямо в макете страницы (чтобы вы могли разместить их непосредственно в разметке страницы).

Лично я решил оставить веб-части в зонах и вместо этого использовать уникальные заголовки, которые я могуиспользуйте позже в моем приложении для идентификации деталей.

0 голосов
/ 17 февраля 2011

(Полностью альтернативное решение вашей первоначальной проблемы, не совсем ответ на вопрос):

Почему бы вам не использовать SPWebPartManager (изнутри Feature Receiver), чтобы захватить веб-части со страницы и настроить свои свойства таким образом?

Я предполагаю, что 6 одинаковых из них будут находиться в одной и той же зоне, расположенные одна за другой, так что вы можете просто перебирать WebParts в классе менеджера, где части принадлежат определенной зоне.

...