2008年9月28日,星期日

的SharePoint开发人员策略-It'并不是所有关于功能的内容!

我已经讨论了很长时间的意思是决定使用功能或其他方法开发SharePoint工件的决定。我实际上在2007年5月的帖子中对此进行了讨论 的SharePoint双色球推荐一注选项:功能还是内容双色球推荐一注?,但是我觉得这是一个值得回顾/扩展的话题,因为我经常看到团队在使用Feature进行开发时并未完全弄清楚 究竟 他们正在摆脱这种方法。您可以通过文章标题猜到,我并不是一直都在使用功能的想法(从一开始关注此博客的读者可能会发现这很奇怪,因为我写了很多 有关如何使用功能的文章),并希望在确定是否需要它们时提出一些要点。

让我们首先考虑功能的一些(选定)特征:

  • 提供一种将SharePoint工件(例如列表模板/网站栏/内容类型)双色球推荐一注到多个环境(例如,开发,测试,生产)的方法
  • 当前是跨多个网站集双色球推荐一注此类工件的唯一方法
  • 即使使用可用的社区工具也需要一些额外的开销来创建(与直接在SharePoint UI中创建工件相比)
  • 很少/不支持某些关键更新(例如,更新已双色球推荐一注且正在使用的内容类型)-更新必须通过用户界面或API完成,因为 不支持修改原始功能文件以进行更改.

鉴于上述几点,我真正看不到“功能”的好处是,解决方案仅包含一个网站集,而WCM网站通常就是这种情况。当工件只能存在于一个网站集中时,为什么还要花很多时间将工件打包到Feature中并面临管理更新的困难呢?当然,可能需要在 环境 但是我们还有其他方法可以做到这一点。

N.B.同样适用于网站定义-当只能从中创建一个网站时,为什么要创建一个自定义网站定义呢?

另类

如果您没有被迫使用功能来处理多个网站集, 使用它们可能是“最有效”的选择。在我最近的WCM项目中,我没有将功能用于任何不需要的功能 要求 功能(例如VS工作流,CustomAction等)已经很长时间了,包括我最近在 金融部门中的SharePoint WCM开发人员的经验教训-金融领域的SharePoint WCM。当然,考虑到该项目的时间紧迫,实际上我觉得如果使用功能部件,我们可能无法按时交付。

相反,我的方法是在开发环境中创建一个空白网站,并使用SharePoint UI和SPD在此处进行所有列表/网站列/内容类型/母版页开发。我的下一步(也许对普通读者并不奇怪)是使用我的 内容双色球推荐一注向导 准备就绪时将所有SharePoint工件移动到其他环境的工具。同样地,您可以选择编写自己的代码,使用已经有据可查的文档做同样的事情 内容双色球推荐一注API。您需要分别处理任何文件系统和.Net资产(通常 之前 您可以在目标上导入SharePoint内容),但在我看来,我们至少已大大简化了SharePoint方面。由于许多原因,这似乎运作良好:

  • 效率更高,因为无需花费很多时间来构建功能部件
  • 前面描述的更新问题已为您解决(通过基础的内容双色球推荐一注API)-例如,在开发人员的内容类型中添加字段,双色球推荐一注使用该字段的内容,该字段将添加到导入站点上
  • 保留了“包”的概念,因此可以将向导生成的.cmp文件移交给托管公司,以使其在末尾使用向导导入。我听说有很多人这样做。
  • 我们可以将.cmp文件存储在源代码管理中,并将其用作“软件开发生命周期”方法的一部分。我的方法(我猜想其他使用这种工具的人)是将.cmp文件与文件系统文件(例如.ascx文件)一起存储在当前“发行版”中,并将其作为双色球推荐一注过程的一部分导入将发行版移至下一个环境。

顺便说一句,当我决定编写一种简化SharePoint项目上的dev / QA / UAT /生产环境的工具时,我最初陷入了“解决内容类型更新问题”和基于内容双色球推荐一注API的问题之间。我之所以决定选择后者,是因为CD API似乎已经解决了另一个问题!

现在,我当然不是说它每次都能很好地工作(虽然在SP1和基础结构更新之后,它并没有得到很大的改进,但是并没有达到最佳效果),但是根据我的经验,在解决双色球推荐一注问题的项目过程中,我花费的时间似乎少于我会进行构建/故障排除功能。此外,如果您的解决方案依赖于预先创建的发布页面,或者您的客户使用UAT创建某些内容(如要在上线之前将其移至生产环境),则使用Content Deployment可以双色球推荐一注内容。不会在这里帮助您。但是,内容双色球推荐一注机制就是为此而设计的。

解决方案(.wsp)在哪里适合所有这些?

因此,综上所述,对于不是围绕多个网站集构建的项目,我的经验法则是 不要将功能用于绝对不需要的功能。那么,解决方案软件包(.wsp文件)将留在哪里-它们也应该被丢弃吗?好吧,绝对不,我认为。解决方案可以解决稍微不同的问题集:

  • 将文件双色球推荐一注到SharePoint Web服务器,以便服务器场中的每个服务器都是另一个的镜像。当然,确保所有Web前端具有与SharePoint相同的文件是SharePoint服务器场的一项关键要求-这适用于使用功能部件时的功能文件,还适用于程序集,12个配置单元文件等。
  • Web.config修改,例如的‘SafeControls’自定义Web部件/控件所需的条目
  • 代码访问安全性配置修改,例如非GAC运行的控件所需的控件
  • 其他一些任务,例如Web部件定义文件(.webpart)的双色球推荐一注

确实,没有什么可以阻止您手动完成所有这些操作的(特别是如果您始终将其双色球推荐一注到单个服务器上,因此可以减少同步)。但是这里的要点是,Solutions确实可以以相对较少的努力就使您的生活变得更轻松,因此“成本/收益”比可能与Features不同-关键是使用一种自动构建方法,例如 WSP生成器。因此,我的建议通常是始终将解决方案用于程序集,12个配置单元文件等,尤其是在多个服务器场环境中。

结论

我的经验法则是:

  • 考虑 如果您的网站不是基于多个网站集,请使用功能(和网站定义)-使用 巫师 或其他基于Content Deployment的解决方案可以替代
  • 如果您有多个服务器/环境,请使用解决方案,除非您乐意做更多工作来保持它们同步
  • 如果你 使用功能,计划一种处理更新的方法,例如内容类型更新

我在这里传达的信息可能与您可能会看到的其他人所建议的指导背道而驰,但是我只是在继续我使用不同方法交付项目的经验。与往常一样,关键是考虑双色球推荐一注方法 之前 您实际上来做到了!

附言还记得 使用备份和还原进行双色球推荐一注是一个坏主意 ;-)

13条评论:

泰勒·福尔摩斯 说过...

克里斯,好帖子,

给出鼓励您进行功能/解决方案开发的文档和工具,这甚至有些挑衅。话虽如此,我绝对同意功能/解决方案的开发和维护可能很困难且耗时。

我想知道在将ASP.NET代码导入SharePoint时是否愿意考虑一下。诸如SmartParts之类的东西也可以加快开发速度,但是很难在服务器场之间保持同步(尤其是如果有web.config密钥)。当涉及到ASP.NET代码时,您是否拥有适合内容双色球推荐一注的解决方案/技术?

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

泰勒

是的,我同意我在这里所说的话与许多“公认的智慧”相反。

从ASP.Net迁移到SharePoint方面,我还没有真正实现这种类型的项目。我确实发现自己将SharePoint内容用于许多“配置”类型的项目- 我的“配置存储”解决方案 属于这一类。这样做的好处是可以很容易地通过Content Deployment在环境之间传输配置,但是即使SharePoint vNext能够完全处理所有可能的.Net config / artifacts的双色球推荐一注,我也会感到惊讶。

克里斯。

杰里米·塔克(Jeremy Thake) 说过...

克里斯(Chris)的精彩文章,我一直在试图从各个方面推动标准,而不是针对不同级别的复杂性采用不同的方法。我同意构建功能和解决方案并不是最简单的,但是随着时间的流逝,我认为工具将变得更加复杂,并且可以减轻痛苦。 STSDEV和WSPBuilder已经出现。反正看看我的 帖子以获取更多信息.

里奇·芬恩 说过...

说得很好,克里斯。我的最后几个项目主要是通过这种方式完成的,这在很大程度上要归功于双色球推荐一注向导的易用性和成功。非常感谢您花费时间和精力来开发如此出色的工具。

我一直在苦苦挣扎的一个想法是,这在开发者内容数据库上具有更多的价值,因为其中包含大量的“源”。我很好奇您为确保单人SPDev团队和多人SPDev团队的数据安全所考虑或使用的发现/策略/建议。

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

杰里米

所有公平点(也请阅读您的文章),但我的想法是:

-同意工具会变得越来越好(并将继续这样做),但是肯定会 无需花任何时间在功能上 相当吸引人吗?
-对我而言,功能框架似乎仍然不完整。双色球推荐一注后,我无法通过XML更新某些工件,但是仍然存在 很多 我只能在功能接收器等中执行的操作(例如,在网络上设置属性)
-对我而言,功能就是一切 初始配置 的文物。这些平台在其生命周期中可能如何变化的概念还很少。另一方面,内容双色球推荐一注具有许多代码,每次都可将源中工件的当前状态双色球推荐一注到目标上,这意味着导入时架构更改将“自动”应用于目标。

顺便说一句,我目前正在我当前的项目中实现功能(因为我们将有100个网站集),但是我觉得这是此方案的正确选择。我们还将试用第三方工具,以帮助解决由正在使用的功能部件双色球推荐一注的工件更新问题。

将来,我仍会逐案考虑功能,尤其是在与完全不必担心功能相比,创建功能所需的工作始终处于空白时。

干杯,

C。

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

@Finnatic,

很高兴听到我并不孤单;-)

有趣的评论-我同意数据对于灾难恢复之类的情况确实变得越来越重要,但是无论如何它还是至关重要的,不是吗?

对于对站点运行至关重要的数据片段,在我看来,无论如何,相关的.cmp软件包都应在源代码控制中,因为在最初开发此功能时,该.cmp软件包将与代码更改一起双色球推荐一注,因为该“版本”的一部分。但是,可以肯定地说,这些数据会随着时间而改变,您可能需要还原到某个SharePoint列表的最新版本(但其他所有内容保持不变)。 (IMHO)最好的选择是拥有一个好的第三方备份工具,或者 DPM 2007 -我不是这两个方面的专家。

其他可能有帮助的是,我希望很快将脚本(因此调度)功能集成到向导中。然后,这将提供免费的解决方案来备份特定列表,只要可以使用向导再次导入它们即可。显然,虽然不能替代功能完备的企业备份工具。

干杯,

克里斯。

匿名 said...

克里斯(Chris)的确非常有趣,因为它是从众多“前线”经验中汲取灵感的,而使阅读更加有趣。对我来说,您的经验实际上是这里的关键因素–很少有SharePoint双色球推荐一注可以访问Chris O’Brien,即具有足够经验的人,可以在目标站点的上下文中确定每个文物的最佳双色球推荐一注模型,更重要的是,具有将内容和结构双色球推荐一注的复杂组合付诸实践并确保100%的知识和能力诚信

从那里展望未来,一旦交付了解决方案,您将如何移交给客户?您的方法会给您或您的公司带来更高的依赖性吗?是否需要更多文档?

您在回覆Tyler时碰到的另一件事’的评论是SharePoint的未来迭代。如果没有其他问题,那么遵循推荐的最佳实践应该可以确保最大程度地支持您现在所生产的产品进行迁移。

就像您一样,我经常想知道开发功能/解决方案所花费的时间是否真的可以证明是合理的,尤其是当它是一个一次性站点的站点定义时。我绝对相信Visual Studio最终会赶上来,并且90%的辩​​论将过时,但至于到底有多远–使用CD API可能会很值得您熟练掌握知识...

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

@马特

有趣的评论:-)

是的,我可能会说,了解不同工件如何协同工作并得到最佳双色球推荐一注 在当前的SharePoint环境中非常有用-有时感到遗憾的是SharePoint项目似乎需要这样做。

在使用一种方法是否意味着更多文档或对特定双色球推荐一注知识的更多依赖方面,这是一个有趣的问题。从个人的角度来看,我显然希望我是解决方案的一部分,而不是问题(;-)),但有趣的是,在我当前使用的项目中也遇到了类似情况 基瓦蒂 帮助双色球推荐一注。虽然还很早,但是功能非常强大,但它的确将您与特定于供应商的知识和方法联系在一起。

我猜想像SharePoint的其他任何领域一样,“了解的越多,了解的越多”,那只能是一件好事。

最后一点,我同意Visual Studio在SharePoint打包/双色球推荐一注中将比今天起更大的作用。我已经看到了一些东西,并且在Microsoft受到了重视。尽管我仍然很震惊 已经 在内容双色球推荐一注API中实施了许多代码来简化这种情况(“我希望该环境看起来像 环境”),它的优点是不需要了解实际的内容双色球推荐一注API本身- 如果您使用向导或标准CD会做艰苦的工作。

干杯,

C。

杰里米·塔克(Jeremy Thake) 说过...

我想我们所有人都在同一页面上 文章 在变更集上双色球推荐一注v2.0并将其双色球推荐一注到生产环境中,因为v1.0很难满足所有需求。

大多数人似乎正在创建新网站,并将旧的“内容” /工件迁移到其中。但是在v2.0开发范围之内,内容和内容之间存在一条灰线。

我将在几周内为我们公司在珀斯的Readify展示有关此内容的最佳方法时,进一步介绍您的内容双色球推荐一注向导。

保持良好的工作伙伴!拯救我们所有的痛苦!

基兰 说过...

克里斯你好

如果使用双色球推荐一注向导方法描述了如何复制现有的发布网站,例如,如果您需要创建一个几乎相同但在同一父站点下的网站,又该如何复制呢?如果不支持将站点另存为模板选项,则双色球推荐一注向导是否可以帮助您解决此问题?

非常感谢您的想法。

基兰

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

@基兰

尽管我有一个小小的疑问,但我完全不怀疑这是完全可能的。't think I'我曾经尝试过复制网站 在同一父网站集中。我认为这应该没问题,只要您告诉内容双色球推荐一注向导 to '保留对象ID和位置'.

如果您遇到任何问题,很高兴为您提供帮助!

干杯,

克里斯。

基兰 说过...

因此,如果我使用向导来创建一个现有网站的.cmp'hr',那么我想复制此文件,但在同一父站点中使用不同的名称。您认为向导将处理导入吗?还是会覆盖现有的'hr' web?

:)干杯

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

@基兰

抱歉,我以前的评论应该更清楚/提供了完整的详细信息。赢了't overwrite if you:

-离开'保留对象ID和位置' checkbox unchecked
-创建您想要的新站点'duplicate into'使用空白网站模板。在'Import web URL'导入文本框

如果您需要更多帮助,请询问..

谢谢,

克里斯。