我在 Visual Studio 中为 MOSS 创建了一个功能,一个发布站点 - 此功能包含一些自定义列表模板和一些使用模板定义的列表。现在我需要更新列表模板,这不是问题,因为它只是在我的 schema.xml 中添加几行,但我还需要一种方法来反映现有列表的更新。
据我所知,这个功能不是标准的 Sharepoint,但是我如何以编程方式解决这个问题,例如,在我的 OnActivated 中,循环遍历我的列表并根据列表的模板更新(删除/添加)字段?
我在 Visual Studio 中为 MOSS 创建了一个功能,一个发布站点 - 此功能包含一些自定义列表模板和一些使用模板定义的列表。现在我需要更新列表模板,这不是问题,因为它只是在我的 schema.xml 中添加几行,但我还需要一种方法来反映现有列表的更新。
据我所知,这个功能不是标准的 Sharepoint,但是我如何以编程方式解决这个问题,例如,在我的 OnActivated 中,循环遍历我的列表并根据列表的模板更新(删除/添加)字段?
是的,当您更新列表架构时,它不会反映在已创建的列表中。为此,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>