人无信不立/2008-04-26 22:30
永春阁
专注于技术,切不可沉湎于技术
博客园
社区
首页
新随笔
联系
管理
订阅
随笔- 226 文章- 20 评论- 1276
在MOSS中开发一个模块化的feature
moss中的feature功能很强大,本文主要看一下如何开发一个模块化的feature。
比如可以把一个学生管理功能(包括aspx页面等)开发成一个feature,然后可以在不同的moss网站中有选择的激活这个feature,激活后就把对应的链接加入此网站的首页上,以此实现功能的动态加载。
为了方便说明,先列出我的文件结构:
Feature.dll
Install.bat
Template
--Student
--
elements.xml
--
feature.xml
--Student
--
StudentList.aspx
--
UserEdit.aspx
首先
我们在sharepoint designer中定制两个aspx页面:
StudentList.aspx和
UserEdit.aspx
(要保证这两个页面在moss站点中是能够正常访问的)
我这里只是演示feature的功能,就两个页面的代码就不列出了。
然后
就是feature配置文件的写法
对于MOSS中的feature我们一般都要写两个配置文件:
feature.xml
<
Feature
Id
="4292625E-5811-47a4-9B88-58A206C53515"
Title
="学生管理-测试"
Description
="学生管理-测试。"
Scope
="Web"
Hidden
="false"
ReceiverAssembly
="Feature, Version=1.0.0.0, Culture=neutral, PublicKeyToken=48fca413ed4dd464"
ReceiverClass
="Feature.StudentFeature"
xmlns
="http://schemas.microsoft.com/sharepoint/"
>
<
ElementManifests
>
<
ElementManifest
Location
="elements.xml"
/>
</
ElementManifests
>
</
Feature
>
其中ReceiverAssembly和ReceiverClass是指定feature激活等操作时对应的代码文件的,后面会提到
elements.xml
<
Elements
xmlns
="http://schemas.microsoft.com/sharepoint/"
>
<!--
Path指的是Template\Features下的实际路径 Url指的是MOSS站点的虚拟路径
-->
<
Module
Path
="Student"
Url
="Student"
>
<!--
一览页面
-->
<
File
Url
="StudentList.aspx"
Type
="Ghostable"
/>
<!--
编辑页面
-->
<
File
Url
="UserEdit.aspx"
Type
="Ghostable"
/>
</
Module
>
</
Elements
>
特别要注意的是我文件中的注释
然后
就是Feature对应的Receiver代码
主要作用是在feature激活时把链接加到网站首页上,在停止时把feature对应的aspx页面从网站中删除(
激活feature时会根据配置自动把文件复制到MOSS网站里
)
public
class
StudentFeature : SPFeatureReceiver
{
public
override
void
FeatureActivated(SPFeatureReceiverProperties properties)
{
//
get a hold off current site in context of feature activation
SPWeb site
=
(SPWeb)properties.Feature.Parent;
SPNavigationNodeCollection topNav
=
site.Navigation.QuickLaunch;
//
create dropdown menu for custom site pages
topNav[
0
].Children.AddAsLast(
new
SPNavigationNode(
"
学生管理
"
,
"
Student/StudentList.aspx
"
));
}
public
override
void
FeatureDeactivating(SPFeatureReceiverProperties properties)
{
SPWeb site
=
(SPWeb)properties.Feature.Parent;
//
delete folder of site pages provisioned during activation
SPFolder sitePagesFolder
=
site.GetFolder(
"
Student
"
);
sitePagesFolder.Delete();
SPNavigationNodeCollection topNav
=
site.Navigation.QuickLaunch;
for
(
int
i
=
topNav[
0
].Children.Count
-
1
; i
>=
0
; i
--
)
{
if
(topNav[
0
].Children[i].Title
==
"
学生管理
"
)
{
//
delete node
topNav[
0
].Children[i].Delete();
}
}
}
public
override
void
FeatureInstalled(SPFeatureReceiverProperties properties)
{
}
public
override
void
FeatureUninstalling(SPFeatureReceiverProperties properties)
{
}
}
代码没什么特殊的地方,就是使用了MOSS的object model进行操作
最后
就是进行部署了
1
@SET TEMPLATEDIR
=
"
c:\program files\common files\microsoft shared\web server extensions\12\Template\Features
"
2
@SET STSADM
=
"
c:\program files\common files\microsoft shared\web server extensions\12\bin\stsadm
"
3
@SET GACUTIL
=
"
c:\Program Files\Microsoft Visual Studio 8\SDK\v2.0\Bin\gacutil.exe
"
4
5
Echo Installing CustomSitePages.dll
in
GAC
6
%
GACUTIL
%
-
if
Feature.dll
7
8
Echo Copying files to TEMPLATE directory
9
xcopy
/
e
/
y TEMPLATE\
*
%
TEMPLATEDIR
%
10
11
Echo Installing feature
12
%
STSADM
%
-
o installfeature
-
filename Student\feature.xml
-
force
13
14
IISRESET
15
REM cscript c:\windows\system32\iisapp.vbs
/
a
"
SharePointDefaultAppPool
"
/
r
16
17
第六行注册GAC
第九行复制文件
12行安装feature
安装好之后在需要的网站上激活这个feature就可以了
posted @ 2008-04-10 19:15
永春
阅读(889)
评论(12)
编辑
收藏
所属分类:
SharePoint
发表评论
回复
引用
查看
#1楼
2008-04-11 15:39 |
jdxyw
LZ可以提供源码让我们学习一下吗?
回复
引用
查看
#2楼
[
楼主
]2008-04-11 15:58 |
永春
@jdxyw
源码我在上面都列出来了
回复
引用
查看
#3楼
2008-04-11 17:05 |
jdxyw
StudentList.aspx和UserEdit.aspx是随便什么页面都可以吗?
回复
引用
查看
#4楼
2008-04-11 17:05 |
jdxyw
还有一个问题,feture中ID是怎么确定的?
回复
引用
查看
#5楼
[
楼主
]2008-04-11 17:24 |
永春
@jdxyw
StudentList.aspx和UserEdit.aspx是要能在sharepoint中运行的,比如用sharepoint designer开发的页面
feture中ID可以用vs2005中的GUID工具生成
回复
引用
#6楼
2008-04-14 09:34 |
jdxyw2004 [未注册用户]
不好意思,再问你几个问题.
写feature的时候应该用什么project?是Class Library还是其它什么的?
在部署的时候出现这句Echo Installing CustomSitePages.dll in GAC
CustomSitePages.dll 是从哪里来的?从代码看,似乎应该是StudentFeature.dll才是啊
回复
引用
查看
#7楼
[
楼主
]2008-04-14 09:40 |
永春
@jdxyw2004
用Class Library就可以了
echo的那句只是注释,下面的那句才是部署的语句
回复
引用
查看
#8楼
2008-04-14 12:54 |
jdxyw
谢谢LZ!
回复
引用
查看
#9楼
2008-06-04 18:05 |
一瞬间
配置了feature.xml,element.xml,激活后那么文件不是就会拷贝过去吗
回复
引用
查看
#10楼
[
楼主
]2008-06-04 19:40 |
永春
@一瞬间
是的,文件是自动拷贝过去的
回复
引用
查看
#11楼
2008-06-05 09:25 |
一瞬间
--引用--------------------------------------------------
永春: @一瞬间
是的,文件是自动拷贝过去的
--------------------------------------------------------
那为什么还要xcopy?
回复
引用
查看
#12楼
[
楼主
]
2008-06-05 09:45 |
永春
@一瞬间
xcopy是在部署时把文件复制到template目录
自动拷贝是自动拷贝的MOSS站点的,不是一个地方的
新用户注册
刷新评论列表
标题
姓名
主页
Email
(博主才能看到)
验证码
*
看不清,换一张
[
登录
][
注册
]
内容(请不要发表任何与政治相关的内容)
网站首页
新闻频道
社区
小组
博问
网摘
闪存
找找看
Remember Me?
登录
使用高级评论
新用户注册
返回页首
恢复上次提交
[使用Ctrl+Enter键可以直接提交]
相关文章:
Castle 开发系列文章
在Excel中使用VBA来筛选数据
【求助】SharePoint designer连接数据库失败
SharePoint Service 和 server区别?
asp.net抓取网页存为图片
《web标准设计》欢迎对网页制作感兴趣的朋友
相关链接:
所属分类的其他文章:
[Sharepoint2007对象模型]第三回:Web应用程序(SPWebApplication)
Sharepoint2007对象模型系列
[Sharepoint2007对象模型]第二回:Web应用程序服务(SPWebService)
[Sharepoint2007对象模型]第一回:服务器场(SPFarm)
《博客园精华集--Sharepoint分册》第三轮结果
将你的Asp.NET应用程序嵌入到SharePoint 读后感[转]
在MOSS中开发一个模块化的feature
MOSS SDK学习(8):手工创建MOSS站点
在MOSS中开发和部署Infopath
Sharepoint开发问题归纳(不断更新)
最新IT新闻:
Google向Wine贡献更多代码
苹果创始人Steve Wozniak称iPod将被淘汰
福布斯:硅谷日子将更难过 谁下一个倒下
微软老矣 尚能赚否?
YouTube探索新赢利模式 开始售音乐、视频游戏
公告
本Blog版权均为本人所有,欢迎任何媒体和网站转载本人博客的内容。
本Blog的内容按原样提供,本人不提供任何形式的担保。
转载请注明出处
我的MVP配置
自2007年3月8日:
系列文章
1、
Sharepoint2007对象模型系列
2、
C#强化系列文章
3、
MOSS SDK学习系列
4、
IBatis.Net学习笔记系列
5、
MonoRail学习笔记系列
<
2008年6月
>
日
一
二
三
四
五
六
25
26
27
28
29
30
31
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
1
2
3
4
5
与我联系
发短消息
搜索
常用链接
我的随笔
我的空间
我的短信
我的评论
更多链接
我的参与
我的新闻
最新评论
我的标签
留言簿
给我留言
查看留言
我参加的小组
Debug 探索团队小组
写书译书小组
博客园精华集出版小组
iBATIS.NET
MonoRail
我参与的团队
SharePoint团队(0/744)
Ajax&Atlas技术团队(0/1138)
南京.net俱乐部(0/429)
ASP.NET AJAX (Atlas)学习(0/1353)
MVP(微软最有价值专家)团队(0/637)
Debug 探索团队(0/53)
博客园精华集出版(0/45)
随笔分类
.Net(49)
(rss)
AJax(3)
(rss)
C++/VC学习(2)
(rss)
iBATIS.NET(15)
(rss)
Java(6)
(rss)
MonoRail(25)
(rss)
OS Shell(5)
(rss)
SharePoint(42)
(rss)
Windows Server(1)
(rss)
XHTML/CSS/Script(6)
(rss)
企业开发(2)
(rss)
数据库(21)
(rss)
外语(1)
(rss)
项目管理(7)
(rss)
娱乐/杂记/修养(49)
(rss)
随笔档案
2008年9月 (1)
2008年8月 (3)
2008年7月 (7)
2008年6月 (1)
2008年5月 (2)
2008年4月 (12)
2008年3月 (14)
2008年2月 (3)
2008年1月 (14)
2007年12月 (17)
2007年11月 (21)
2007年10月 (31)
2007年9月 (13)
2007年8月 (25)
2007年7月 (10)
2007年6月 (1)
2007年5月 (2)
2007年4月 (10)
2007年3月 (15)
2007年2月 (7)
2007年1月 (1)
2006年12月 (3)
2006年11月 (21)
2006年10月 (5)
2006年8月 (2)
SharePoint学习
Codeplex Sharepoint
jianyi @ cnblogs
Kaneboy's Blog
Patrick Tisseghem's Blog
管理相关
下载_中计在线
中国管理之家
开源社区
C#开源资源大全
Java开源大全
SourceForge主页
门户网站
南京程序员俱乐部
积分与排名
积分 - 300344
排名 - 98
最新评论
1. re: C#强化系列文章
太牛了,我找了好久的资料呀,爱死你了 (luoxp)
2. re: MonoRail学习笔记十:Controller和Url的对应关系
感谢,一直对这方面不熟悉。 MonoRail果然是个好东西!! 特别对于刚从asp转到。net的人来说简直就是回归自然!! 网站建设... (benfeng)
3. re: MonoRail学习笔记十一:页面控件的填充和验证
@Ariel Y.
Brail 是什么东西?
API做得好吗?
4. re: 为什么要使用MonoRail?
不知道是用MonoRail好还是用ProMesh好!
希望给点建议。
网站建设
(benfeng)
5. re: IBatis.Net学习笔记十--数据库连接处理
你好,我现在碰上一个问题
我现在有两个数据库,对应有两个连接,请问一下,要如何处理呢?谢谢 (Scrofield)
阅读排行榜
1. 这样的面试题你会吗?(4768)
2. 易经杂说—南怀瑾(4397)
3. Asp.Net Forms验证(自定义、角色提供程序、单点登录)(4196)
4. 年终个人总结:我这五年(4016)
5. 为什么要使用MonoRail?(3929)