Feature是一个重心在开发者的添加到WSS3.0中的创新. Feature提供了一个定义站点元素和把他们添加到目标站点或站点集中的机制, 这个机制被称作feature activation. feature可以定义的元素类型包括:菜单命令, 链接命令, 页模板, 页实例, 列表定义, 列表实例, eventhandler, 和workflow.
在一个物理层面上讲, feature由一个文件夹组成, 这个文件夹存在于每个前端服务器上的特殊的WSS系统文件夹之中. feature的文件夹中包括一个或多个包含Collaborative Application Markup Language (CAML)的xml格式的文件. 传统地, 每个feature文件夹都包含一个叫做feature.xml的manifest文件, 该文件定义了feature的高层次的属性, 比如说它的ID, 和用户友好的Title.
除了feature.xml文件, 一个feature通常还包含一个或多个额外的xml文件(比如说elements.xml), 他们定义了组成feature的元素. feature的目录还可以包含几个其他类型的文件, 比如说列表定义, 页面模板, 还有其他类型的资源, 比如图形文件, 层叠样式表, 和JavaScript脚本文件.
翻翻看那些随基本的WSS安装一同附带的标准feature, 是一个能够让你快速熟悉feature的有价值的技术.
创建一个hello world式的feature的过程如下:
1. 在WebFrontEnd(前端)服务器上, 找到这个文件夹.
c:/Program Files/Common Files/Microsoft Shared/web server extensions/12/TEMPLATE/FEATURES
2. 在Visual Studio中创建一个具有平行目录结构的文件夹, 以便于将这些文件拷贝到正确的路径, 并进行测试.
3. 在HelloWorld目录中, 创建一个xml文件, 命名为feature.xml. 在这里添加定义feature高水平属性的xml信息.
< Feature
Id = "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX "
Title = "Hello World Feature "
Description = "This demoware was created for Inside Windows SharePoint Services (Pattison/Larson) "
Scope = "Web "
Hidden = "FALSE "
ImageUrl = "TPG/canteen.gif "
ReceiverAssembly = "HelloWorld, Version=1.0.0.0, Culture=neutral, PublicKeyToken=XXXXXXXXXXXXXXXX "
ReceiverClass = "HelloWorld.FeatureReceiver "
xmlns = "http://schemas.microsoft.com/sharepoint/ ">
< ElementManifests >
< ElementManifest Location = "elements.xml " />
</ ElementManifests >
</ Feature >
- id, 这里要自己去new一个guid, 这样你的feature才会被唯一标示.
- scope定义了这个feature可以被激活或取消的上下文. 这里写的web, 意味着这个feature可以在site级上激活. 另外可能的值为Site, WebApplication和Farm.
- hidden 定义了这个feature是否可以跟其他的feature显示给可能会开启它的人. 这里是FALSE, 所以有权限的用户可以在浏览器中看到这个feature. 如果是TRUE, 那么这个feature在浏览器中就不可见了. 隐藏的feature 只能通过命令行, 自定义代码来及激活, 再就是通过让跟它有依赖关系的另一个feature的激活来激活它.
- ImageUrl, 这里的图片是一个用户自己添加的图片, 目录在c:/Program Files/Common Files/Microsoft Shared/web server extensions/12/TEMPLATE/IMAGES/TPG中. 请注意这里的文件夹路径对应关系.
- ElementManifest, 通过这个属性, 你可以指定组成这个feature的其他xml文件. 这里只有一个叫做elements.xml的文件被引用到了.
4. 创建elements.xml文件.
< Elements xmlns = "http://schemas.microsoft.com/sharepoint/ ">
< CustomAction
Id = "SiteActionsToolbar "
GroupId = "SiteActions "
Location = "Microsoft.SharePoint.StandardMenu "
Sequence = "100 "
Title = "Hello World "
Description = "A custom menu item added using a feature "
ImageUrl = "_layouts/images/menuprofile.gif " >
< UrlAction Url = "http://msdn.microsoft.com "/>
</ CustomAction >
</ Elements >
这个CustomAction元素被设计为在Site Actions菜单里添加一个菜单命令. 他提供了一个用户友好的Title和描述, 还包括一个当用户选择了这个命令的时候用来将用户重定向的URL. 这个例子很简单, 并没有说明太多的关于feature能做什么的信息.
5. 安装feature. 首先, 我们得把HelloWorld这个feature的文件夹拷贝到WSS系统中的FEATURES文件夹中. 然后, 我们必须运行STSADM.EXE来安装feature到WSS中. 最后, 我们必须在站点的上下文内激活这个feature. 我们可以将这两个最开始的步骤自动化的, 手段就是通过写一个批处理文件. 我们命名它为install.bat, 放在hellworld工程的根目录下. 如果今后你做SharePoint开发的时候, 你还可以通过visual studio的post build command来在每次编译链接你的代码之后, 都将你这个修改的feature部署到环境下. 为你省下很多麻烦. 这里给出一个批处理的例子:
@SET TEMPLATEDIR="c:/program files/common files/microsoft shared/web server extensions/12/Template"
@SET STSADM="c:/program files/common files/microsoft shared/web server extensions/12/bin/stsadm"
@SET GACUTIL="c:/Program Files/Microsoft Visual Studio 8/SDK/v2.0/Bin/gacutil.exe"
Echo Installing HelloWorld.dll in GAC
%GACUTIL% -if bin/debug/HelloWorld.dll
Echo Copying files to TEMPLATE directory
xcopy /e /y TEMPLATE/* %TEMPLATEDIR%
Echo Installing feature
%STSADM% -o installfeature -filename HelloWorld/feature.xml -force
IISRESET
REM cscript c:/windows/system32/iisapp.vbs /a "SharePointDefaultAppPool" /r
实际上, 你还可以自动化最后的步骤, 即安装feature的步骤. STSADM.EXE工具的ActivateFeature操作可以激活Feature.
6. 当你添加了install.bat文件, 你可以打开visual studio, 配置他每次运行重新build工程之后, 都会运行你的批处理. 打开Project Properties界面, 选择Build Event选项卡, 在post-build event command line中添加下面的指令:
cd $(ProjectDir)
Install.bat
这里第一行cd $(ProjectDir)用来指定当前路径为工程文件夹. 第二行指明运行批处理文件. 从而, 完成拷贝文件, 安装feature的操作.
7. 然后在站点的Site Features页面, 激活这个feature. 激活之后, 点击Site Actions菜单, 将会看到下面的一个变化:
<Inside Microsoft Windows SharePoint Services 3.0>