2007年9月9日,星期日

在SharePoint中混合发布/协作功能

在创建SharePoint解决方案时,大多数情况下,需求通常会很好地映射到可用于创建新网站的现成网站定义之一。如果要创建品牌重磅的Internet / Intranet网站(WCM网站),我们可能会从“发布网站”模板开始。如果要在文档管理/协作方案中部署SharePoint,则可能会从“团队网站”模板开始,依此类推。当项目需求有效地结合了此功能时,它会变得有趣。这种站点的特征可能包括:

  • 网站具有完全定制的外观/导航
  • 用户将使用存储在文档库中的文件
  • 网站模板或定义用于创建具有相同内容/功能的多个网站
  • 自定义工作流可能用于支持业务流程(标准内容发布除外),可能还支持InfoPath表单

这样的要求带来了一些挑战,目前的我的项目就属于此类。在高层次上, 考虑到的是,在许多情况下,网站用户还将使用SharePoint提供的“系统”页面(例如, 使用文档库/列表, workflow etc.) and this doesn't happen in most WCM sites. This can lead to situations where there is a 差距 between the 网站“发布视图”的外观和感觉以及 'system' areas. 我无意在此提供所有问题的答案,但我确实想讨论一些可以作为思考的内容。我可能会在项目结束时重新审阅这篇文章,并提供对问题和解决方案的更好的见解,但现在让我们介绍一些高层决策:

 

母版页开发方法

在这里开始开发的选项包括:

  • 使用“最小主页面” MSDN 要么 希瑟·所罗门
  • 修改default.master的副本(自定义团队网站的良好起点)
  • 修改blueband.master的副本(WCM站点的良好起点)

这个决定部分取决于您要去的地方。由于我项目的目标是格式化  由CSS而不是布局表控制,以最小的母版页开始更有意义(出厂的页面布局使用表)。这是一个有趣的领域,因为要消除混合发布/协作网站中的表格,需要做很多工作(事实上,通常无法完全消除它们) 好处是有争议的。当然,网站用户将接触到的所有“系统”页面都使用布局表,因此我不确定会获得多少 by only having some 使用CSS进行布局的页面。

这里还要考虑的其他问题是如何在母版页和页面布局之间考虑内容项责任的常见问题, 如何定义内容类型等, 但是这些是WCM网站开发中的标准决策,因此在此不做介绍。

 

Use of Content Editor 网页部分 vs publishing RichHtmlField controls

WCM开发的大多数人都知道,内容编辑器Web部件和Microsoft.SharePoint.Publishing.WebControls命名空间中的RichHtmlField控件提供的功能存在重叠,即它们都可以用于输入页面内容,例如文本/图像。但是,重要的是要考虑差异-RichHtmlField控件将其内容存储在列表项的列中, 页面,而CEWP是Web部件,因此将内容存储在Web部件中 storage 建筑。这很重要,因为如果要部署到其他环境 in your project plan 或正在进行的架构, 如果您使用字段控件,事情可能会更简单,因为此内容将随页面一起正确传播。

此外,使用CEWP还存在一些URL修复问题 跨不同的环境,如 HawaiianAir.com撰写.

总之,我建议 考虑将CEWP仅作为在非发布SharePoint网站中输入内容的一种方式。 

 

Use of collaboration 网页部分 - in layouts 要么 in WebPartZones?

同样,由于我们将协作功能混合到我们的网站中,因此我们可能需要使用某些Web部件 我们不会在直接的WCM网站中使用。 在我们的情况下,ListViewWebPart是某些区域的关键,并且用作允许用户从一个页面处理不同列表的一种方式。这里的第一个决定是 页面布局应包括 web parts 直接(通过在SharePoint Designer中添加它们)或 各个零件将位于的Web零件区域 稍后通过浏览器添加。 In 我更喜欢添加Web的大多数WCM方案 零件直接放置到页面布局中,因为最终用户将不会自定义/个性化它们(主要 Web部件区域的使用场景),并且当使用Web部件区域时,Web部件配置再次未存储在页面中,这会使部署更加复杂。 Using the other 直接从SPD添加的方法,配置存储在页面的实际HTML标记中, 因此会随页面布局本身一起移动。

然而! ListViewWebPart有一些怪癖,这意味着并非总是可以直接从页面布局中使用。具体来说,仅可以将零件配置为使用当前Web的列表,并且 对于发布页面布局,这意味着 根网 因为这是母版页库的存储位置。由于我们的列表存储在子网站中,因此存在问题-使用DataView的其他解决方案也存在问题。另外,ListViewWebPart配置存储特定于其位置的值,这意味着配置XML不太便于移植(即,导出Web部件定义,修改,使用)。我想认为有可能随着时间的推移准确地确定哪些ID确实需要更改,但是a,我们没有时间在这个项目上。

结果,在Web部件区域中使用ListViewWebPart实际上是这些中的最佳解决方案。 circumstances 据我所知。我们将在部署过程中多做几步,但这将比出现的替代方案花费更少的时间。

 

系统页面的外观

如前面提到的, 对于WCM /协作站点,可能会有一个 disparity 网站主页面和用户将看到的“系统”页面的外观,即“ _layouts”目录中的页面。请注意,即使将站点和系统母版页都设置为指向您的自定义母版页,也会发生这种情况,因为这些页被设置为使用“ application.master”(也在“ _layouts”中的文件系统上),而这两个属性均不会影响。当然可以用您自己的版本替换'application.master',但这不是一个很好的解决方案,并且可能不受支持。 不幸的是,该体系结构似乎没有提供更改母版页的简便方法 used by “ _layouts”页面-您必须更深入地探讨实现方法。 许多.Net 2.0开发人员会知道 可以动态切换母版页 in .Net, and 公平地说,这就是SharePoint对存储在母版页中的主页面的处理 gallery anyway. 我不知道该问题的真正解决方案,但是 Serge van den Oever博客上的讨论 提出了使用这种技术的可行方法。 

 

因此,这些是要考虑的一些问题。当然还有其他内容,包括导航, CSS customization 标准样式(到 ensure collaboration 网页部分 与您的外观完美融合), 以及可能选择的身份验证机制。我将在以后的文章中介绍这些内容以及所有其他内容。

8条评论:

匿名 said...

回复:系统页面的外观-大约6个月后,我进行了一次查看,最终使用HTTP模块修改了使用application.master页面的页面。它工作得很好,尽管很不幸,我的博客是前不久失去的。

无论如何,我发现其他人也发布了类似的技术...

http://www.novolocus.com/display.php?id=452

需要注意的一件事-我确实发现,与“普通”母版页相比,应用程序母版页具有几个额外的所需占位符。

埃里克·穆里格兹(Eric Murriguez)说过...

很棒的帖子!我正在管理一个基于MOSS 2007的大型外部网,最近我遇到了这种情况/问题。我们将网站大致分为使用自定义发布网站模板的“公共”网站和使用团队网站模板的私人团队网站。

我最近决定从团队网站模板开始创建一个混合对象,但要激活发布功能并使用具有不同痕迹样式的自定义母版页。

乍一看似乎可以正常工作,但是当我将其另存为网站模板,然后从该模板创建新网站时,不在“网站集管理员”组中的每个人都会收到以下错误:

“列表不存在

您选择的页面包含一个不存在的列表。它可能已被其他用户删除。 ”

有趣的是,当前导航也仅以“错误”作为唯一链接显示,但是一旦您第一次单击它,似乎就可以“修复”自身。

因此,我注意到如果回滚自定义母版页,它似乎可以正常工作,并且我认为这可能是母版页问题。但是看完您的帖子后,听起来可能会比这复杂一些。

我会一直关注您的博客,自然,如果我所描述的听起来像是一个明显的问题/解决方案,请告诉我!

干杯,

埃里克

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

埃里克

嗯,那是一个有趣的话题。我首先想知道的是,“站点模板”是否真的意味着站点模板而不是站点定义?如果您愿意,我也想知道这是否可能与官方不支持发布网站的网站模板有关。您可能已经注意到,启用发布功能后,“将网站另存为模板”链接消失了,我相信这是因为某些发布功能当前无法保存到.stp文件中。

好奇的是,对于网站集管理员来说还可以。您是否尝试过使用列表的权限来查看是否有所不同?

干杯,

克里斯。

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

埃里克

嗯,那是一个有趣的话题。我首先想知道的是,“站点模板”是否真的意味着站点模板而不是站点定义?如果您愿意,我也想知道这是否可能与官方不支持发布网站的网站模板有关。您可能已经注意到,启用发布功能后,“将网站另存为模板”链接消失了,我相信这是因为某些发布功能当前无法保存到.stp文件中。

好奇的是,对于网站集管理员来说还可以。您是否尝试过使用列表的权限来查看是否有所不同?

干杯,

克里斯。

埃里克·穆里格兹(Eric Murriguez)说过...

克里斯,谢谢你这么快回来。对于这种语言的草率性,我深表歉意-我对MOSS还是很陌生(自今年5月左右开始使用它!),并且只是触犯了自定义选项的表面。我有C#.NET背景,但是对ASP.NET来说还很陌生,当然还要学习SharePoint对象模型...赶紧赶上时间吧!换句话说,一个被迫成为网络人的台式机人:)

无论如何,我实际上发现了这个特殊的问题-母版页正在等待批准,并且尚未发布。知道了!我羞愧地垂下头...

但是,您是对的-没有选择将站点另存为模板的选项,但是我只是将“ _layouts / savetmpl.aspx”添加到我想另存为模板的站点中。

因此,我所做的基本上是:1)从发布站点开始,2)激活协作功能,3)应用自定义母版页,以及4)如上所述保存为模板。

但是,正如您所说,我通过添加savetmpl.aspx来欺骗系统-这样做是在“创建站点”(/newsbweb.aspx)页面上创建一个自定义选项卡,其中显示“ PublishingSiteTemplate”。而且,当我从此模板创建网站时,当前的导航最初已损坏(例如“错误”),但是当我进入母版页设置并重置母版页时,它可以解决问题,并且该站点看起来还不错。

这使我进入下一个任务-如何编辑选项卡或xml,以在该/newsbweb.aspx页面上生成选项卡。

未知说过...

我将BlueTabs转换为所需外观的主要问题是Microsoft在其MasterPages中包含的所有“开销”。从最低母版开始的重建提供了更加整洁,精简的母版页进行维护。

我还通过在发布站点中使用站点模板“作弊”,这曾经起作用了一段时间,但是随后创建了奇怪的错误,所有新站点的默认“欢迎”页面的“内容类型”都设置为“页面”,其他奇怪的地方创建新网站时需要额外的工作。

马修·库克(Matthieu Couque)说过...

对此发表评论可能为时已晚,但我正在发布母版页上。
我无法显示richHtmlField,可以使用htmlEditor和InputFormTextBox,但都可以在编辑模式下进行编辑。
因此,我现在想知道是否有解决方案,或者是否需要开发自己的WebPart / Control。

谢谢

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

@Potzi,

您无需开发自定义Web部件/控件-RichHtmlField是用于SharePoint中Web内容管理模板的控件。但是,您需要确保页面使用的内容类型具有适当的字段来存储数据。如果编辑页面布局,SharePoint Designer可以通过将控件添加到工具箱中来帮助您,这些控件可以简单地拖到模板HTML上-这将确保您正确地进行标记。

HTH,

克里斯。