设为首页 收藏本站
查看: 810|回复: 0

[经验分享] 自定义SharePoint新网站创建过程(2)

[复制链接]
YunVN网友  发表于 2019-2-4 16:28:04 |阅读模式
  今天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。



  

在WEBTEMP*.xml文件中,“”节点表示一种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”目录中。

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

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

  于是我们就看到了

  现在你应该已经明白了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()方法来完成。所以我们如何自定制这个过程呢?写一个新类,继承自Microsoft.SharePoint.SPWebProvisioningProvider,然后重载Provision()。
  我们来用一个实际的示范进行讲解。用户的需求是:“工作组网站”这个网站模板的首页的右侧那个SharePoint Logo图片实在碍眼(没错,就是上面那个截图中的图片),能不能创建网站后,不要那个图片了?当然,我们可以创建一个新的Site Definition,然后修改新Site Definition的ONET.XML文件,去掉这个web part,但是,因为演示的缘故,我故意不用这个简单的方法,而用更“高级”的定制Site Provisioning来完成。
  由于“工作组网站”这个模板的其他部分并不需要调整,所以我决定新建一个WEBTEMP.CustomTeamSite.xml文件,并在文件中创建一个新的Configuration。

  上图中的名称为“定制工作组网站”的“Cinfiguration”节点有两个属性,“ProvisionAssembly”和“ProvisionClass”,这两个属性指定了这个Configuration使用了一个定制的Site Provisioning过程,而不再使用SharePoint默认的Site Provisioning模式。
  接着是上面指定的那个定制Site Provisioning类。

  在重载的Provision()中,首先,代码仍然让新网站应用“工作组网站”这个网站模板。“STS#0”的意思是,使用“STS”这个Site Definition的ID为“0”的Configuration,也就是“工作组网站”这个模板。但是,在应用了默认的“工作组网站”模板之后,再调用了InitTeamSite()方法,在这个方法中通过SharePoint API,将网站首页上的那个图片web part去掉了。
  将我们的项目部署到服务器上,IISRESET之后,就能在新建网站页面中看到这个新的名为“定制工作组网站”的网站模板。

  使用这个网站模板创建一个新网站后,就会发现,这个网站和用“工作组网站”模板创建的网站一模一样,除了首页上再没有那个图片web part。

  通过创建定制Site Definition,以及创建定制的Site Provisioning类来接管Site Provisioning过程,我们就能够完全自定义一个SharePoint新网站的创建过程了。:)
  最后一个问题,我们应该选择哪种方式呢?Feature Stapling?还是Site Definition + Site Provisioning Engine?我更推荐Feature Stapling。将各种自定义功能封装成(一个或多个)Feature,让网站管理员可以自己选择启用或停止这些Feature,如果需要,使用Feature Stapling使网站自动应用并激活这些Feature,是一种更好、更优雅、更具封装性、更容易迁移的方式。
  上面所示的定制Site Provisioning项目源码下载。




运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-671880-1-1.html 上篇帖子: Office SharePoint Server 2007 搜索模块的两个“大”问题 下篇帖子: 《SharePoint Portal Server 2003 深入指南》即将完稿 & 大纲
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表