65.9K
CodeProject 正在变化。 阅读更多。
Home

Ghosting 不可 Ghost 的内容

starIconstarIconstarIconstarIconstarIcon

5.00/5 (1投票)

2009年12月3日

CPOL

2分钟阅读

viewsIcon

25446

downloadIcon

95

本示例展示了如何在 SharePoint 中幽灵化不可幽灵化的文件,以及如何重新定位现有的幽灵化内容。

引言

本文展示了一种将幽灵化文件重新映射到新位置的方法,并展示了如何幽灵化不可幽灵化的文件,例如通过 SharePoint 设计器最初创建的文件。这假定您对 SharePoint 以及幽灵化和非幽灵化文件的概念有基本的了解。

这实际上是一种技巧,它用新的幽灵化版本覆盖现有文件。实际上修改不可幽灵化的文件使其变为可幽灵化几乎是不可能的,除非直接修改内容数据库,这是不可饶恕的罪过。另一种方法是删除原始文件并部署幽灵化版本来代替;但是,对于可能仍然被现有内容引用的布局(例如),会出现问题。我发现以下技术可以克服这些问题,并允许无缝地用幽灵化版本替换文件。

注意:如果您的目标仅仅是重新幽灵化现有文件,那么我建议使用许多现有的工具,例如 gl-reghostfile

解决方案

在本示例中,我们将从 SharePoint 发布模板中重新映射 ArticleLeft 布局,到通过我们的示例功能部署的更新版本。这将幽灵化文件的位置更改为我们功能的位置,并允许我们通过升级新的解决方案来部署 ArticleLeft 布局的后续更改。该示例在模板的页面标题中添加了已修改字样。

第一步是使用 SharePoint 设计器从 SharePoint 数据库中保存现有文件。然后将其添加到功能中,就像您第一次配置它一样。对于布局,请务必同时配置原始文件中的属性;否则,新的布局将无法正常工作。

<?xml version="1.0" encoding="utf-8" ?>
<Elements xmlns="http://schemas.microsoft.com/sharepoint/">
  <Module Url="_catalogs/masterpage" Path="Layouts">
    <File Url="ArticleLeft_Ghosted.aspx" 
         Type="GhostableInLibrary" IgnoreIfAlreadyExists="true">
      <Property Name="Title" 
         Value="Modified Article page with image on left" />
      <Property Name="MasterPageDescription" 
         Value="The modified article page with image on left contains 
                an image field and a rich text field." />
      <Property Name="ContentType" 
         Value="Page Layout" />
      <Property Name="PublishingPreviewImage" 
         Value="/_catalogs/masterpage/en-US/Preview Images/ArticleLeft.png, 
                /_catalogs/masterpage/en-US/Preview Images/ArticleLeft.png" />
      <Property Name="PublishingAssociatedContentType" 
         Value=";#Article Page;#0x010100C568DB52D9D0A14D9B2FDCC96666E9F2007
                948130EC3DB064584E219954237AF3900242457EFB8B24247815D688C526CD44D;#" />
    </File>
  </Module>
</Elements>

下一步是重命名文件,以便最初可以将其与现有的布局一起部署。在包含的示例中,我将文件命名为 ArticleLeft_Ghosted.aspx

最后,我们添加一个功能接收器,其中包含以下代码,以用新的幽灵化版本覆盖目标文件。注意:此代码已为简洁起见进行了简化;有关完整代码,请参阅示例。

public override void FeatureActivated(SPFeatureReceiverProperties properties)
{
    SPSite site = properties.Feature.Parent as SPSite;

    PublishingWeb pubweb = PublishingWeb.GetPublishingWeb(site.RootWeb);

    // get reference to newly provisioned file
    SPFile file = site.RootWeb.GetFile("/_catalogs/masterpage/ArticleLeft_Ghosted.aspx");
    if (file != null)
    {
        // overwrite the old layout with the ghosted version
        file.MoveTo("/_catalogs/masterpage/ArticleLeft.aspx", true);
        file.Update();
    }
}

覆盖后,文件的新的版本将保持幽灵化状态。对于布局和母版页,所有现有内容都将开始使用幽灵化版本。该技术的关键在于 MoveTo 命令,它允许覆盖任何引用的布局,而不会破坏对现有内容的引用。

© . All rights reserved.