显示带有标签的帖子 虚拟服务. 显示所有帖子
显示带有标签的帖子 虚拟服务. 显示所有帖子

2007年9月3日,星期一

虚拟服务 1.1。 CTP-简要介绍一下

该博客的普通读者会知道,我一直是某些Windows 的SharePoint Services的Microsoft Windows 的SharePoint Services的Visual Studio扩展(VSeWSS)的忠实拥护者。如果您阅读了多个SharePoint博客,那么您将无法避免MS刚刚发布了此工具的1.1版的消息, 正如Alex Malek在SharePoint Designer博客上宣布的。在撰写本文时,这是一个CTP(社区技术预览),表示它是beta版,因此可能会出现bug。因此,今天我想经历这些更改,以便对工具不熟悉或没有机会亲自看一下的人可以快速了解其中的内容。

本质上,VSeWSS通过简化为SharePoint开发功能的过程来提供帮助-这种方法通常被认为是进行SharePoint开发的方式,可以更轻松地将资产部署到其他环境。在之前的文章中,我详细介绍了如何 创建和部署列表如何创建和部署Web部件 使用VSeWSS。对我来说,这些可能是VSeWSS最有用的情况,尽管肯定还有其他情况取决于您的工作方式。但是,使用该工具的开发人员最普遍的抱怨是,由于VSeWSS 1.0每次更改都会重新生成功能文件,因此无法手动修改文件。通常需要添加工具不直接支持的功能,例如功能接收器。

因此,让我们遍历改进工具的不同领域。


WSP视图

The big change with this release 是 that it 是 now possible to amend 特征 files in the development process. Instead of hiding the generation of these files behind the scenes, the tool now makes these bona fide VS project items which 能够 be edited before the Solution package 是 built. Certainly auto-generation of 决赛 files still happens (that's the point) 和 there are some files lurking which are needed to support the tool, but 虚拟服务 now does a good job in presenting to you what you 能够 通过修改 WSP视图 (视图> Other windows >WSP视图)。下面显示了具有一些不同工件的项目:



这里可以做的一些很好的事情是,只需单击一下即可删除整个功能(将删除所有文件),并且可以更改功能激活顺序。提供的工具栏按钮可修改 特征Manifest manifest.xml文件中的元素。


功能文件编辑

因此,WSP View在可编辑文件上提供了遮罩,但是我想深入研究为什么这很有用。一些示例是:

  • 将功能接收器添加到特定功能的能力
  • 能够重命名Solution程序包的属性,例如使VSeWSS生成的解决方案符合命名约定
  • 将要素元素重构为单个要素的能力。这很有用,因为默认情况下,每次您使用Project时,该工具都会创建一个新功能。> Add new item > 一些SharePoint项目(例如,内容类型)。 通常,您会希望多个Feature元素组成一个功能,而不是将其拆分为几个Feature。

活动接收者

虚拟服务 1.1还围绕事件接收器(列表引发的事件的处理程序)提供了一些增强功能。 1.0版在这方面也提供了一些支持,但是主要方案是在创建列表时添加列表/项目接收器(即“使用接收器创建列表”)。 1.1版现在可以轻松地将事件接收器添加到 现有 列表,从而简化了这些方案。

但是,我在这方面最喜欢的改进是必须在 内容类型。 这实际上意味着事件处理程序代码与内容类型一起传播-因此,您的代码将在与该内容类型相关联的所有列表上运行。这很有趣,因为我不知道这在WSS 3.0平台中是可能的!所以我做了一些挖掘。我尚未对结果进行任何测试,但是VSeWSS支持此操作的是在标准列表事件接收器中添加了一些自定义属性。对于那些感兴趣的人,这些定义在 SPDev工具 该工具将文件中的名称空间添加到您的项目中(该名称空间与AssemblyInfo.cs一起位于Properties文件夹中)。我还没有弄清楚究竟是什么在功能激活过程中选择了这些标志,但是很明显,由于生成的类是从中派生的,因此实际上正在使用标准列表事件接收器 SPListEventReceiver。下图(单击放大)突出显示了所应用的新属性,它支持所有这些功能:




网页部分

这就是我认为VSeWSS获胜的地方,很高兴看到对Web部件部署的支持得到了进一步扩展。使用1.1,现在将生成一个默认的Web部件定义文件(.webpart),供您在部署前进行编辑以添加自定义属性设置。这很有用,因为这意味着开发人员可以避免“ Web部件部署,添加到页面,配置,导出Web部件”过程,否则该过程将无法获得已配置的定义。


性能

虚拟服务 1.0用户首先注意到的一件事是,不再对每个部署执行完整的IISReset。对于1.0版,这有点痛苦,因为这意味着“编辑,部署,获取反馈”周期 花费了比必要时间更长的时间。 因此,我已经习惯了IISResets,在第一次部署期间,我很高兴在Visual Studio状态栏中看到以下消息!



 
有什么更好的
 

因此,这些都是不错的选择,这是朝正确方向迈出的重要一步。但是,我仍然希望看到以下内容:

  • 功能齐全的解决方案生成器。我没有时间详细研究这个,但是 下载页面指定某些项目仍未被覆盖。 这与什么有关 I remember Alex Malek saying 在 今年的Tech Ed 这仍然不是“完全忠实”。
  • 轻松将功能接收器添加到正在使用的功能的功能。我只想右键单击>添加接收器-这应生成类并将属性添加到 具有默认值的特征定义,或推断生成的类型。
  • 能够轻松重构Feature中的Feature元素的能力,因为我通常不希望每个元素的Feature为默认值
  • 功能名称中没有GUID(尽管显然这将按最终版本排序)
  • 部署_layouts文件的能力(同样,最终版本中应该存在该文件)

在“更大的图片”注释中,让我想起了SharePoint社区中的一个普通视图,当我第一次听到它时,这完全有意义 泰德·帕蒂森。与.Net不同,Microsoft 为了确保工具与平台同步(同一个团队[Scott Guthrie],相同的开发阶段时间表,相同的交付日期),我们竭尽全力,SharePoint正在发生另一件事。实际上,这些工具比该平台落后18个月,因此,SharePoint开发目前可​​能非常痛苦- 但是,这不应被视为平台的反映。

但是,此版本的VSeWSS应该会有所帮助,并且很有趣,看看将来会发生什么。

下载链接是 http://www.microsoft.com/downloads/details.aspx?FamilyID=3e1dcccd-1cca-433a-bb4d-97b96bf7ab63&displaylang=en.

2007年8月12日,星期日

网站定义-网站创建过程中的自定义代码

这是三篇文章系列中的第二篇,我的目的是展示如何使用您自己的API代码自定义网站创建过程(称为网站配置)。完整的介绍和系列内容可以在以下位置找到: http://sharepointnutsandbolts.blogspot.com/2007/07/article-series-custom-permissions-with.html。我正在使用的示例自定义如下: any 使用定义创建的网站 应该使用一组特定的权限,而不是简单地遵循继承父网站权限的默认行为。由于无法使用标准的网站定义来完成此操作(就像您可能要执行的许多其他操作一样),因此需要使用API​​。

但是,今天 重点不是我的示例的权限细节,而是更多 how generally to 添加您自己的代码,该代码将在网站配置过程中运行。最好的是,如果您了解SharePoint功能,则实际上非常简单。

有许多原因可能导致您有理由在网站配置过程中使用API​​。本质上,如果你 在onet.xml文件中找不到使用CAML模式进行操作的方法,可能是您不得不 write code. Hence, 想想你几乎容易 能够 在onet.xml文件中执行 and reverse the list in order to work out scenarios which require code, but some examples which spring to mind 任何how are:

  • 更改网站的自定义母版页
  • 创建一个站点列以从列表中获取数据(请参阅我的功能接收器上的文章,该文章位于 在Codeplex上创建查找字段的功能)
  • 向网站添加定制的唯一权限(本系列文章中的示例)
  • 设置网站属性 from 任何 kind of dynamic lookup

简而言之,有很多方案。


使用VSeWSS创建网站定义

如果您曾经用以下方法创建网站定义 Windows 的SharePoint Services的Visual Studio扩展,您会注意到它给您的VS项目包含一个名为SiteProvisioning.cs的文件。内部是一个事件处理程序方法,您可以在其中添加自定义代码,该代码将在根据定义创建站点时执行。该类如下所示:

命名空间 COB.Demos.SiteDefinition

{

    上市 部分的 ProjectXSiteDefinition

    {

        /// <summary>

        /// 在此处定义您自己的功能激活操作代码

        /// </summary>

        上市 虚空 激活(SPFeatureReceiverProperties 属性)

        {

            //我的代码在这里。

        }

    }

}

 

所有这些背后的管道都很有趣。乍一看,方法签名看起来像功能接收者,但实际上不是。但是,检查VS项目(您至少需要用F5生成一个项目才能生成文件)表明,VSeWSS实际上已经在后台创建了一些功能。这些文件可以在VS项目的bin \ Debug \ solution文件夹下找到(默认情况下是隐藏的-您需要在Visual Studio Solution Explorer中执行“显示所​​有文件”)。如果您进一步研究以确切了解VSeWSS的功能,则会发现以下内容:

  • 2 已创建功能-1部署了'default.aspx'文件,另一个没有'elements'文件,但已连接到功能接收器-这是 与VS项目相同的程序集中的类。如果您检查GAC,您的确会在此找到该程序集。
  • 在“ Web功能”元素下的onet.xml文件中添加了类似于以下内容的行:

    <特征 ID="67b2507c-8822-41dc-b939-3d8f34b5ad13" />


    值得注意的是,这是连接到功能接收者的功能的ID。
  • 在包含功能接收器的程序集上使用Reflector显示,主事件处理程序方法执行了一些处理,然后调用 激活 上面显示的方法,即VSeWSS为您提供的位置,以添加您自己的代码以在创建网站时执行。该代码实际上包含在VS项目中的SiteProvisioning.Internal.cs文件中。 (如果您对这里的所有代码到底在做什么感到好奇,就我所知,答案是,当使用VSeWSS项目模板创建网站定义时,没有任何答案。但是,在Solution Generator时也可以找到此代码用于提取网站定义-在这种情况下,需要完成一些修正,这就是所使用的代码。)

因此,总而言之,VSeWSS将创建一个隐藏的功能添加到onet.xml的“ Web功能”部分,以便在 定义用于创建网站*。 Feature连接到Feature接收器,该接收器调用您的自定义代码所在的OnActivated方法。

*(注意 如果该定义用于创建网站定义, 根网站也被创建 自动执行,因此功能也会 然后被激活。另请注意,该功能必须已经 已安装 在服务器场中以这种方式激活它)。

我们可以从中得出的结论是,在站点供应过程中没有“特殊位置”可注入自定义代码,但这可以通过使用功能接收器来完成。因此,如果您不想使用VSeWSS创建网站定义,则可以使用这种技术将自定义代码添加到网站创建过程中。

就该代码的外观而言,“ Hello World”示例可能是:

上市 虚空 激活(SPFeatureReceiverProperties 属性)

{

     网页 currentWeb = 空值;

     网站 currentSite = 空值;

     目的 oParent = properties.Feature.Parent;

 

     如果 (properties.Feature.Parent 网页)

     {

         currentWeb = (网页家长

        currentSite = currentWeb.Site;

     }

     其他

     {

         currentSite = (网站家长

        currentWeb = currentSite.RootWeb;

     }

 

     currentWeb.Title = “在以下位置设置供应代码” +  DateTime.Now.ToString();

    currentWeb.Update();

}


希望这可以说明编写在定义中创建的站点上设置属性的代码非常简单。一般而言 网页 目的 是 the entry point, 和 任何 property which 能够 be modified 能够 be modified using the API. So, this 是 a pretty powerful technique which 能够 be used in many scenarios.

如果您有这种要求,我绝对建议您使用VSeWSS简化流程。当然,也可以手动将所有内容打包并打包到解决方案中,但是该工具确实节省了大量麻烦。但是,与VSeWSS一样, 这个价格是有一定灵活性的。作为我的示例代码 the final 文章将显示,有时将数据传递到 Features by using 功能属性,很遗憾,VSeWSS不支持此功能。因此,在有用的情况下,以下链接提供了一个zip文件,其中包含使用上述技术的解决方案/功能, 没有 使用VSeWSS:

http://sharepointchris.googlepages.com/customcodewithsitedefinitions

在下一篇也是最后一篇文章中,我将介绍在创建网站时使用API​​修改网站权限的细节。希望明确的是,这是 结合此处详细介绍的技术,最终结果是可以根据功能自动激活特定功能,从而自动设置特定权限 创建网站时。

2007年8月5日,星期日

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

这是三篇系列文章中的第一篇,我们将讨论自定义网站定义,尤其是如何在网站创建过程中运行自己的自定义代码。如果您需要使用API​​进行任何自定义(超出站点定义通常可以完成的范围),则此技术很有用。在我的系列文章中(有关完整系列文章的内容,请参见 http://sharepointnutsandbolts.blogspot.com/2007/07/article-series-custom-permissions-with.html), I use the example of creating a site definition with specific security permissions 'attached' - so that when 任何 sites are created using the definition, specific permissions are applied which are 不同 到父站点的权限(这与默认值不同,默认值是默认值,新站点将继承父站点的权限)。可以在链接到前面的介绍性文章中找到更多背景信息。

在本文中,我们将从网站定义基础知识开始- 我还将在最后的链接中提供本文中使用的文件集。。从根本上讲,自定义网站定义是可以从中创建新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等),因此从早期版本的定义中提供的所有站点都将继续正常运行。

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

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

2007年3月2日,星期五

使用VSeWSS创建列表

这是本系列的第一篇文章,旨在说明使用SharePoint功能创建MOSS网站的过程。有关完整系列的内容,请参见 我的介绍.

在这里,我们将研究创建SharePoint列表。对于SharePoint如此简单和核心的内容,很难将它们创建为功能。幸运的是,用于WSS的Visual Studio扩展极大地简化了该过程。如果您还没有遇到这种情况,我建议您尝试一下-WseWSS对于某些SharePoint开发方案基本上是一个巨大的帮助。以下文章是有良好背景的:

简而言之,在VSeWSS中创建列表的过程如下:

  1. 创建一个空白的Visual Studio项目。 N.B.如果您实际上是在创建SharePoint网站定义,则应选择“团队网站定义”或“空白网站定义”,因为WSeWSS将为您设置配置代码,该代码将在根据该定义创建网站时执行。

  2. 在“项目”菜单上选择“添加新项”,然后从“ 的SharePoint”部分中选择“列表定义”。

  3. 通常,您应该从下拉列表中选择“自定义列表”作为基本列表定义。如果您实际上是在扩展该列表类型并希望保留原始的列,请仅选择其他选择。假设除了列表模板之外,您还想创建实际的列表(稍后将对此进行详细介绍),请选中“创建此列表的实例”框。另请注意“使用事件接收器添加”选项-这将设置代码,该代码可用于处理列表中的事件,例如,在添加/编辑/删除列表项时。



  4. 在对话框中单击“确定”后,适当命名您的列表。我的建议是避免空格或其他可能在某处编码的字符-该列表将具有一个显示名称,您可以自由使用它。

    WSeWSS现在已经在VS项目中创建了几个文件。




    我们可以看到以下内容:


    • 一些aspx文件,用户将用来处理列表的页面。请注意,如果您想偏离标准行为,可以对它们进行自定义。

    • 实例.xml-这是要编辑以将初始数据添加到列表中的文件。由于此文件会自动链接到适当的架构,因此编辑起来非常简单,因为VS会在您键入时告诉您有效的节点(如下所示)。

    • 两个.cs文件,其中包含事件处理程序的方法存根。这些已经准备好,您可以执行了。

    • schema.xml - this contains the CAML which dictates which content types the list stores, 任何 custom views 和 also has references to the .aspx files we mentioned
  5. 如果要将默认项添加到列表中(如果创建了它的实例,则可能要这样做),则可以编辑instance.xml文件。这很简单,因为VSeWSS已将instance.xml连接到适当的XML模式(C:\ Program Files \ Common Files \ Microsoft Shared \ Web服务器扩展\ 12 \ TEMPLATE \ XML \ wss.xsd),然后您可以VS的Intellisense的优势,该优势是在您键入时从架构推断的:



  6. 进行任何自定义(例如,编辑instance.xml以添加列表项)后,转到VS项目的属性并检查“ 的SharePoint解决方案”选项卡。在这里,您将看到VSeWSS为每个列表生成了两个功能。一个用于列表实例,另一个用于列表模板。用户可以使用它使用您定义的列在网站上创建新列表。

  7. 转到项目属性上的“调试”选项卡,然后输入SharePoint开发站点的URL。解决方案将部署到此URL,因此输入此值很重要。

  8. 按F5键,WSeWSS将创建并部署解决方案。请注意,.wsp文件是在项目的bin \ Debug或bin \ Release目录中生成的。密切注意左下方的VS状态栏,以监视进度。如果部署成功,您的列表现在应该在“调试”选项卡上指定的站点中可见。


To 任何one who has created 的SharePoint solutions/features by hand, 虚拟服务 offers a compelling alternative. No messing around with ddf files 和 makecab.exe, just hit F5. However, there are a couple of irritations:-

  • 由于VSeWSS在每次部署时都会重写feature.xml文件,因此无法自定义此文件以添加无法在项目属性的“ 的SharePoint Solutions”区域中输入的内容。主要的示例是功能接收器类,用于指定在激活/停用功能时应该运行的代码,如果您想在此处进行操作。当然,您可以在开发周期结束时编辑文件,但是您知道该死的总是会有进一步的调整,然后将XML重新粘贴到feature.xml中变得很烦人。

  • 虚拟服务在每个部署上重新创建功能GUID。这对开发非常有用,但是这意味着您不能具有其他功能 功能依赖 在您的清单功能上。如果您尝试创建功能部件层次结构或合理化功能部件,以便激活一个功能部件将激活解决方案中给定部分的所有必需功能部件,则可能会很痛苦。

不过,您现在可以为您添加的每个列表提供一个功能。好吧,实际上,您为添加的每个列表都有2个功能。为什么?因为一个是列表 实例 另一个是列表 模板。请注意,如果您不希望用户能够从此模板中创建列表,则可以停用列表模板的功能。


本系列的下一步-如何创建从列表中获取其数据的站点列(字段)。

张贴者 Chris O'Brien 14:49 15 comments 链接到这篇文章  

标签: , ,