Обновлять списки при изменении пользовательского шаблона списка - PullRequest
0 голосов
/ 10 января 2011

Я создал функцию, сайт публикации, в Visual Studio для MOSS - эта функция содержит некоторые пользовательские шаблоны списков и некоторые списки, использующие определения шаблонов.Теперь мне нужно обновить шаблоны списков, что не является проблемой, так как это всего лишь добавление нескольких строк в мой schema.xml, но мне также нужен способ отразить обновление также в существующих списках.Насколько я знаю, эта функция не является стандартной Sharepoint, но как я могу программно обойти эту проблему, например, в моем OnActivation, прокрутить список и обновить (удалить / добавить) поля на основе шаблона списка?

1 Ответ

0 голосов
/ 10 января 2011

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

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

Для расширяемости и гибкости обратите внимание, что этот код должен быть максимально безопасным.Например, когда вы снова активируете функцию снова в будущем, она не должна вносить изменения снова, что приведет к потере или дублированию изменений.Сначала следует проверить, а затем только внести изменения.

Та же схема может использоваться для типов контента.При необходимости я могу опубликовать фрагмент кода для вас.

 public override void FeatureActivated(SPFeatureReceiverProperties properties)
    {
        try
        {
            // Fix the Article Date column
            if (properties != null)
            {
                FixArticleDate(properties);
            }

            // Fix Metadata Tagging site columns by setting CustomField "MetadataType" to the Default value set in the field definition manifest file.
            if (properties != null && properties.Feature.Properties["FixMetadataTagging"] != null)
            {
                RepairMetadataTaggingSiteColumns(properties);
            }

            // Fix Lookup site columns by retrieving lookup list GUID from List="url". 
            if (properties != null && properties.Feature.Properties["FixListTagging"] != null)
            {
                RepairListTaggingSiteColumns(properties);
            }

            // Fixing Site Columns
            if (properties != null && properties.Feature.Properties["FixSiteColumns"] != null)
            {
                RepairSiteColumns(properties);
            }
        }
        catch (SPException sharepointEx)
        {
            ExceptionManager.LogError(ULSTracerCategoriesEnum.FeatureReceivers, sharepointEx);
        }
    }

XML:

<?xml version="1.0" encoding="utf-8" ?>
<Feature Id="A23990CF-C35D-4771-BF5A-916C304C9EF9"
   Title="Content Types"
   Description="This Feature Creates all the Required Content Types and site columns"
   Version="1.0.0.0" Scope="Site" Hidden="FALSE"
   ReceiverAssembly="xxxx, Version=1.0.0.0, Culture=neutral, PublicKeyToken=86597c5d57921943"
   ReceiverClass="xxxx.SharePoint.UI.Core.FeatureReceivers.CoreFeatureReceiver"        
   xmlns="http://schemas.microsoft.com/sharepoint/">
  <ElementManifests>
    <ElementManifest Location="SiteColumns\SiteColumns.xml" />
    <ElementManifest Location="ContentTypes\ContentTypes.xml" />
  </ElementManifests>
  <Properties>
    <Property Key="FixMetadataTagging" Value="SiteColumns\MetadataTaggingSiteColumnsManifest.xml"/>
    <Property Key="FixListTagging" Value="SiteColumns\ListTaggingSiteColumnsManifest.xml"/>
    <Property Key="FixSiteColumns" Value="ContentTypeFixes\SiteColumnAdditions.xml"/>
  </Properties>
</Feature>
...