2007年8月5日,星期日

创建,部署和更新自定义网站定义

这是三篇系列文章中的第一篇,我们将讨论自定义网站定义,尤其是如何在网站创建过程中运行自己的自定义代码。如果您需要使用API​​进行任何自定义(超出站点定义通常可以完成的范围),则此技术很有用。在我的系列文章中(有关完整系列文章的内容,请参见 http://sharepointnutsandbolts.blogspot.com/2007/07/article-series-custom-permissions-with.html),我以创建带有“附加”特定安全权限的网站定义为例-这样,当使用该定义创建任何网站时,都会应用特定权限, 不同 到父站点的权限(这与默认值不同,默认值是默认值,新站点将继承父站点的权限)。可以在链接到前面的介绍性文章中找到更多背景信息。

在本文中,我们将从网站定义基础知识开始- 我还将在最后的链接中提供本文中使用的文件集。。从根本上讲,自定义网站定义是可以从中创建新SharePoint网站的模板。可以将自定义内容打包到定义中,以便自定义内容自动出现在通过模板创建的站点中。考虑以下有关网站定义的信息:

  • 它们是通过复制现有的(例如,即用的)网站定义并添加自定义项来创建的
  • XML文件(尤其是onet.xml文件)指定网站定义的内容(即.aspx页,图像,Web部件,功能[以SharePoint功能的形式])
  • 它们提供了与网站模板(.stp文件)类似的功能-有关网站定义和网站模板之间差异的讨论,请参见 http://msdn2.microsoft.com/en-us/library/aa979683.aspx
  • 可以使用SharePoint解决方案包(.wsp文件)部署网站定义,因此不需要将文件手动复制到SharePoint场中的每个Web服务器。

WSS 3.0 SDK中详细记录了创建站点定义的过程,网址为 http://msdn2.microsoft.com/en-us/library/ms454677.aspx,因此我实际上不在这里介绍,但会鼓励您关注该链接。但是,我将快速浏览onet.xml文件中的一些关键元素,以复习可以使用网站定义进行的操作。例如,让我们提取一个onet.xml文件用于发布(为清楚起见,请注意,这仅是一个提取-完整版本可在本文结尾的链接中找到):

<组态 ID="0" 名称="空白互联网">

  <网站功能>

    <特征 ID="A392DA98-270B-4e85-9769-04C0FDE267AA">

      <!-- 发布先决条件 -->

    </特征>

    <特征 ID="7C637B23-06C4-472d-9A9A-7C175762C5C4">

      <!-- ViewFormPagesLockDown -->

    </特征>

    <特征 ID="F6924D36-2FA8-4f0b-B16D-06B7250180FA">

      <!-- Office SharePoint Server发布 -->

    </特征>

  </网站功能>

  <Web功能>

    <特征 ID="00BFEA71-4EA5-48D4-A4AD-305CF7030140" > </特征>

    <特征 ID="22A9EF51-737B-4ff2-9346-694633FE4416">

      <!-- 出版 -->

      <物产 xmlns="http://schemas.microsoft.com/sharepoint/">

        <属性 ="ChromeMasterUrl" ="〜SiteCollection / _catalogs / masterpage / BlueBand.master"/>

        <属性 ="WelcomePageUrl" ="$ Resources:cmscore,List_Pages_UrlName; /default.aspx"/>

        <属性 ="PagesListUrl" =/>

        <属性 ="AvailableWebTemplates" ="* -ProjectX#0"/>

        <属性 ="AvailablePageLayouts" ="ThreeColumnLayout.aspx"/>

        <属性 ="AlternateCssUrl" = />

        <属性 ="简易出版" ="" />

      </物产>

    </特征>

  </Web功能>

  <模组>

    <模组 名称="登录页面" />

    <模组 名称="图片" />

    <模组 名称="首页" />

  </模组>

</组态>


  • 组态元素表示要与所选定义一起使用的设置,从而允许在定义之间重用一组设置,以提高灵活性
  • 网站功能 / Web功能-指定当定义分别用于创建网站集或子网站时应自动激活哪些功能。 这是我们创建网站定义系列的总体目标的关键,该网站定义将自定义的唯一权限应用于由此创建的网站。
  • 发布功能的AvailableWebTemplates属性-可用于限制可用于从该定义创建的网站内创建子网站的网站定义。例如,这有助于防止内容创建者将团队网站添加到面向公众的.com网站上。在这里,我指定只能将配置为'0'的'ProjectX'定义用于子站点。
  • 发布功能的AvailablePageLayouts属性-可用于限制可以在根据此定义创建的网站中使用哪些页面布局。同样,这对于控制网站的外观很有用。
  • 模块-模块是在创建网站时自动添加的一组文件。请注意,也可以使用来指定默认情况下应将哪些Web部件添加到Web部件页面。 AllUsersWebPart 元件。


部署网站定义


但是,我真正要关注的是如何将网站定义打包到解决方案中以简化部署。当部署到多个环境(例如,测试,分段,生产)和/或部署到包含多个SharePoint Web服务器的服务器场时,这通常最有用。如果您没有此要求,则可能需要考虑更简单的手动复制XML文件的过程,如WSS SDK中所述。

在开始之前,让我强调一下 Windows SharePoint Services(VSeWSS)的Visual Studio扩展 是用于创建和部署自定义网站定义的有用工具,如果您尚未满足此要求,我建议您对其进行研究。但是,我在这里说明“手动”方式以期希望对螺母和螺栓有所了解。

因此,要手动将这些文件打包为解决方案,我们按照SDK的说明获取自定义的onet.xml和webtemp * .xml文件,然后将这些文件放置在与第12章中找到的现有站点定义文件类似的文件夹结构中夹。我建议创建一个Visual Studio项目作为对这些文件进行分组的最佳方法(VSeWSS也遵循这种方法)。这意味着您应该以如下形式结束:



请注意,我们还有一个.ddf文件,该文件与makecab.exe一起用于构建解决方案包-请参阅有关 构建和部署解决方案包 有关完整过程的详细信息,请点击此处。有效地,我们需要通过将.ddf文件作为参数传递给makecab.exe来构建解决方案,然后运行STSADM -o addsolution和STSADM -o deploysolution命令以部署到目标SharePoint网站。

完成此操作后,在“创建站点”屏幕上,我们应该看到新模板出现:



用户现在可以使用此定义来创建站点,这些站点将自动具有我们预先指定的所有功能和外观。如果随后需要将定义部署到其他环境,则是在其中复制.wsp文件并运行STSADM命令的简单情况。现在,我们可以很好地创建具有与之关联的自定义权限的网站定义。

本文中使用的文件集位于 http://sharepointchris.googlepages.com/creatinganddeployingcustomsitedefinition

更新现有的网站定义


最后,简要介绍一下更新定义。这里需要格外小心,因为您经常会想要更新已使用该定义创建的网站正在使用的文件-这可能会破坏事情!通常 定义是可以的,但是修改/删除内容可能会导致问题。

因此,一种好的技术是复制现有定义,添加更新并部署以供新站点使用,而且 隐藏早期版本 因此无法继续使用。这是通过从TEMPLATE \删除webtemp * .xml文件来完成的\ XML目录。由于已经在TEMPLATE \ SiteTemplates中保留了实际的定义(onet.xml等),因此从早期版本的定义中提供的所有站点都将继续正常运行。

还请记住,可以将新功能装订到现有站点定义(仅影响已创建的新站点,而不影响现有站点),这对于避免必须更新站点定义本身很有用。看到我的文章 特征装订 更多细节。

这就是网站定义的基础知识。本系列的下一步-如何超越简单的网站定义:添加自定义代码,这些代码将在创建网站时执行!

10条评论:

匿名 said...

我正在为此进行工作。我正在尝试自定义网站定义中的权限。我知道您可以通过UI中断对父项的继承,但是我正在寻找一种方法,并在创建时为我的网站创建自定义组和权限。我已经有了一个处理网站创建事件的功能,它会自动生成多个列表,我只需要找到用于创建权限的正确API即可。

克里斯·奥'Brien说过...

嗨,兰迪,

是的,听起来您正在尝试解决与我解决的问题完全相同的问题。恐怕您将不得不等待其他文章!

或者,如果您想进行离线交流,请给我另一个带有您的电子邮件地址的评论(我不会将其发布到博客上-所有评论都是经过审核的),我们将通过解决方案直接与您联系。节省您等​​待文章等的几天时间。

干杯,

克里斯。

匿名 said...

克里斯,你好

我正在研究类似的东西。我想为我的网站修改MOSS搜索页面的外观。让我知道执行此操作的最佳方法是什么。

谢谢,
约翰

克里斯·奥'Brien说过...

嗨,约翰,

恐怕我没有在这个领域工作过,尽管据我所知,可以将搜索Web部件放到您自己的自定义页面上。

也许检查一下是否有效。

祝你好运

克里斯。

匿名 said...

克里斯,你好

我正在使用“发布”网站定义来创建自定义网站定义,但是在创建网站集时出现以下错误:

“必须先在网站集级别激活Office SharePoint Server发布基础结构功能,然后才能激活发布功能。”


然后,我使用了具有发布功能的解决方案中的“ webtempProjectX.xml”和“ onet.xml”,但出现了同样的错误。
请帮忙。

谢谢,
法鲁克

克里斯·奥'Brien说过...

嗨,法鲁克,

嗯,我不确定为什么会出现此错误。关键线告诉SharePoint激活 网站集 发布功能是这样的:

<功能ID =“ F6924D36-2FA8-4f0b-B16D-06B7250180FA”>

只要在XML中具有此名称,就应该在根据定义创建网站集时自动将其激活。不过请记住,此功能可能需要先在网站集上激活才能创建任何功能。 从定义。

HTH,

克里斯。

匿名 said...

关于Elements.xml模式是否有任何信息。我不确定需要哪些标签或每个标签是做什么用的。您能否阐明Elements.xml的结构?谢谢。

克里斯·奥'Brien说过...

当然。此信息分布在多个MSDN页面上,但可以在以下位置找到 http://msdn.microsoft.com/en-us/library/ms414322.aspx.

HTH,

克里斯。

匿名 said...

我的目标是创建一个使用XML文件从现有模板自动创建共享点站点的应用程序(我认为onet.XML是正确的选择)。
我将模板制作为stp文件,但是现在我认为我需要使用站点定义来回滚我的工作。
对我来说,事情仍然很模糊。
我在正确的道路上吗?
您能帮我找到一些窍门或建议吗?

克里斯·奥'Brien说过...

@匿名,

是的,这正是SharePoint中网站定义所提供的-模板(使用XML定义网站功能/功能/页面布局等)。因此,您在寻找正确的位置-如果我的文章没有为您很好地说明网站定义,建议您查看 有关站点定义的MSDN文档.

HTH,

克里斯。