RSS

Monthly Archives: 八月 2008

WSS SDK 1.4

悄悄的,Windows SharePoint Services 3.0 SDK v1.4发布了。还有Microsoft SharePoint Administration Toolkit v2.0

 

Posted by on 2008/08/29 in 未分类

38 Comments

Tags:

自定义SharePoint新网站创建过程(2)

今天IE 8 Beta2发布,第一时间安装到了自己的电脑上。感觉尚好,只是在打开新的Tab,或者关闭某个Tab时,IE8不断的Crash(不过现在IE8终于不再像IE7那样,一个Tab的Crash会搞死整个IE了。)将IE中所有的Add-on都Disable掉,终于好了。

——– 从爱枣报学来的分割线 ———–

第一篇文章中,我讲了如何使用Feature Stapling来自定义网站初始化过程,但是Feature Stapling还是有一些限制的。相比之下,虽然创建一个定制的Site Definition要更加复杂一些,但确实可定制性要更强更灵活。如果再配合上Site Provisioning Engine,那简直可以说是强大无比了。

首先澄清一个概念。在一个SharePoint网站的网站设置页面中,使用“将网站另存为模板”链接,管理员可以将整个网站保存为一个扩展名为.stp格式的模板。使用这个stp网站模板,管理员可以重复创建同样结构(和内容)的新网站。那么这种stp格式的网站模板,和我们下文所说的Site Definition有什么区别呢?简单来说,Site Definition是一种通过磁盘上的一系列文件(包括xml、页面模板文件等等)来对一个网站的结构和内容进行描述的一种方式。Site Definition可以对一个网站模板的方方面面进行非常细致的定义,基本上无所不能。而stp网站模板只是一种简单的将一个已存在网站进行转存之后,可以重复使用的网站模板格式。stp网站模板没法直接修改,没太多可控性。下文中说的“网站模板”一次,默认是指Site Definition。

接着来详细说一下Site Definition。在SharePoint服务器的“Program Files\Common Files\Microsoft Shared\web server extensions\12\TEMPLATE\2052\XML”位置,有一堆以WEBTEMP开头,扩展名是.xml的文件。这些WEBTEMP*.xml文件,就是SharePoint中用来标明Site Definition的文件。

我们在SharePoint中创建一个新网站时,有一个“工作组网站”的网站模板可以让我们选择。打开“WEBTEMP.xml”文件,就能看到这个“工作组网站”的Site Definition。

image

在WEBTEMP*.xml文件中,“<Template>”节点表示一种Site Definition,它的“Name”属性指明了这个Site Definition保存在“Program Files\Common Files\Microsoft Shared\web server extensions\12\TEMPLATE\SiteTemplates”中的哪个子目录中。一个Template可以包含多个子Configration。一个Configuration对应到一个用户所理解的网站模板。如果我们需要多个网站模板,它们大致相同,只有一些微小的地方有区别,那么我们就可以只定义一个Site Definition,然后用这个Site Definition的多个Configuration来体现这多个网站模板的不同之处。

在上图所示中,我们可以看到,其实“工作组网站”、“空白网站”、“文档工作区”这三个网站模板,都是同属于“STS”这个Site Definition的三个Configuration。“STS” Site Definition位于“C:\Program Files\Common Files\Microsoft Shared\web server extensions\12\TEMPLATE\SiteTemplates\sts”目录中。

image

当然,WEBTEMP*.xml只是让SharePoint知道有哪些Site Definition,以及每个Site Definition中有哪些网站模板(也就是Configuration)可用。但是具体每个模板中包含的内容,包括列表、文档库、页面、页面上的web part等等等等,都是定义在Site Definition中的ONET.XML文件中。比如,下图就是“STS” Site Definition的ONET.XML文件。

image

ONET.XML几乎定义了一个网站模板的方方面面。比如,为什么使用“工作组网站”模板创建的新网站的default.aspx页面,在页面右侧会显示一个SharePoint的Logo图片?这是因为在ONET.XML里面有下面的内容。

image

于是我们就看到了

image

现在你应该已经明白了Site Definition是怎么回事,以及它是如何起作用的。了解这些之后,我们就可以根据自己的需求,来创建自己所需要的Site Definitiion了。你一定要记住一点:永远不要修改SharePoint自带的Site Definition。这是因为微软可能在某些后续的Service Pack或Hotfix中,用更新的文件覆盖旧的Site Definition文件。

创建新的Site Definition的基本步骤是:

1、找一个磁盘上已有的,用来起步的Site Definition,将这个Site Definition目录复制一份;
2、创建新的WEBTEMP*.xml文件,比如WEBTEMP.MySiteTemp.xml,在里面写明新的Site Definition的名称(也就是Site Definition所在的目录名),Configuration等等;
3、修改这个新Site Definition的定义文件直到满足你的需求为止;
4、IISRESET

接着介绍Site Provisioning Engine。什么是Site Provisioning?当你在SharePoint里面,使用某个网站模板,创建了一个新SharePoint网站,这个过程就叫做Site Provisioning。(干嘛不直接叫做Site Creating?嗯,有时候用用时髦词挺Cool的,不是吗?)SharePoint内置了一个Site Provisioning Engine,来完成Site Provisioning过程。这个过程包括给站点应用模板、将所需文件“拷贝”到站点中、根据网站模板类型进行一些其他的必需操作等等。但是,这个Site Provisioning过程也是可以自定制的。

一个Site Provisioning过程,需要由一个继承自Microsoft.SharePoint.SPWebProvisioningProvider的类来完成,具体点说就是由这个类的Provision()方法来完成。所以我们如何自定制这个过程呢?

 

Posted by on 2008/08/28 in 未分类

80 Comments

Tags:

纯水帖:收集到的SharePoint书籍…

IMAGE_121

刚才把书柜里面的SharePoint书都堆在一起,用手机拍的…

 

Posted by on 2008/08/24 in 未分类

53 Comments

自定义SharePoint新网站创建过程(1)

为什么要自定义一个SharePoint新网站的创建过程呢?作用很多。其中之一就是,我们创建了一个新的SharePoint应用组件,然后希望SharePoint管理员在创建一个SharePoint新网站的时候,就可以在那个新网站中使用我们开发的新应用组件。

SharePoint Server 2007本身也利用了这种方式。比如,如果用户希望使用Records Management相关的功能,他可以使用“记录中心”这个网站模板来创建一个新网站。在新网站中,界面和内容会根据Records Management的需求做好了一些定制,用户可以直接基于新网站中的预制内容,开始自己的工作。

image 

要自定义一个SharePoint新网站创建过程有两种方式:

1、Feature Stapling
2、Custom Site Definition + Site Provisioning Engine

SharePoint产品自身大量使用了第二种做法。我们也可以模仿它那样,创建一个定制的Site Definition,然后让用户在上图所示的创建新网站的时候,选择我们创建的Site Definition即可。创建一个定制的Site Definition是一件繁琐的活儿,特别是如果还需要利用SharePoint Provisioning Engine来做一些更“高级”的调整。幸好SharePoint Solution Generator一定程度上减少了创建Site Definition的复杂度。

但我个人更建议你使用第一种方法。:) 所以今天我先介绍Feature Stapling,第二种方法在后续的文章中再介绍。

Feature Stapling,也叫Feature/Site Template Association,它的作用是将某个Feature与某个网站模板关联起来,而不需要这个网站模板定义本身包含这个Feature。比如,在系统中有“工作组网站”这样一个Site Definition,我们希望这个模板能包含我们自己开发的一个“Feature XYZ”,但是又不想直接到磁盘上去改动“工作组网站”这个Site Definition。除了使用上面说的第二个办法(也就是在“工作组网站”的基础上添加一个新的比如“工作组网站 with Feature XYZ”的Site Definition),用Feature Stapling就能将我们的这个“Feature XYZ”与“工作组网站”Site Definition关联起来,就好象“工作组网站”Site Definition已经包含了“Feature XYZ”一样。

要实现Feature Stapling,需要创建至少2个Feature。第1个Feature叫做Feature Stapler,也就是用来将真正完成功能的Feature与网站模板进行关联的一个Feature,第2个也就是用来完成功能的Feature本身了(也就是上文所说的“Feature XYZ”)。

由于Feature有事件处理程序机制,所以,通过给第2个完成实际功能的Feature添加事件处理程序,我们实际上是能利用Feature Stapling完成某些很复杂的事情的。例如,给网站中添加几个List、为网站添加一些预定义的用户。

曾经有人问过我这样一个问题,如何修改所有用户的“我的网站”的样式?比如,在“我的网站”首页中增加自己开发的Web Part,或者干脆将“我的网站”完整的换成自己想要的样子?Feature Stapling就是一个很好的解决之道,我们只需要将一个(或多个)Feature关联到“我的网站”所使用的网站模板,这样,当每个用户第一次访问“我的网站”并为其创建“我的网站”时,关联的Feature就可以通过它的事件处理程序来完成工作,达到我们想要的效果。

接下来是我最喜欢的实例示范环节。:)

Demo场景是,当用户使用SharePoint内置的“工作组网站”这个模板创建一个新网站时,希望在这个新网站内能自动出现一个联系人列表,并且里面已经包含了一些原始数据。

首先,创建Feature Stapler:

feature.xml:
<Feature Id="06dbfca3-a041-4c50-aea3-7dd8561b48f9" Title="STS#0 Feature Stapling" Scope="Farm" Version="1.0.0.0" Hidden="FALSE" DefaultResourceFile="core" xmlns="http://schemas.microsoft.com/sharepoint/">
  <ElementManifests>
    <ElementManifest Location="STS0FeatureStapling\elements.xml"/>
  </ElementManifests>
</Feature>

elements.xml:
<Elements Id="55B76996-827F-4879-B0D1-BADDCCDC8AAC" xmlns="http://schemas.microsoft.com/sharepoint/">
  <FeatureSiteTemplateAssociation Id="1d68910c-b227-4cba-bfa7-87896d812dcf" TemplateName="STS#0" />
</Elements>

然后是实际用来完成工作的Feature:

feature.xml:
<Feature Id="1d68910c-b227-4cba-bfa7-87896d812dcf"
         Title="Team Site Init"
         Scope="Web"
         Version="1.0.0.0"
         ActivateOnDefault="FALSE"
         Hidden="FALSE"
         DefaultResourceFile="core"
         ReceiverAssembly="FeatureStaplingSample, Version=1.0.0.0, Culture=neutral, PublicKeyToken=9f4da00116c38ec5"
         ReceiverClass="FeatureStaplingSample.FeatureCode.TeamSiteInitFeatureReceiver"
         xmlns="
http://schemas.microsoft.com/sharepoint/" />

上面的Feature使用了一个事件处理程序来进行实际的工作,事件处理程序的代码就不贴了。

示范完整源码下载(需要VS2008+VSeWSS 1.2)。

 

Posted by on 2008/08/24 in 未分类

41 Comments

奥运会与SharePoint

奥运会终于开幕了!

如果你看过奥运会开幕式,一定惊奇于开幕式中精彩的灯光和背景显示控制。这些各种控制使用了120台HES Axon服务器,服务器中运行的,是Windows XP Embedded(XPe)。

AxonMediaServes
(鸟巢中的服务器机房)

同时,在奥委会的Info2008系统中(超过3500家奥运合作伙伴和媒体会使用此系统),选用了Office SharePoint Server 2007作为其内容的搜索引擎,以帮助Info 2008的使用者更快捷的搜索信息。

clip_image001_2

(相关的Case Study请参考微软网站

 

Posted by on 2008/08/11 in 未分类

83 Comments

Tags: