人无信不立/2008-04-26 22:30

在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
其中ReceiverAssembly和ReceiverClass是指定feature激活等操作时对应的代码文件的,后面会提到
elements.xml
特别要注意的是我文件中的注释

然后就是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
 5Echo Installing CustomSitePages.dll in GAC
 6%GACUTIL% -if Feature.dll
 7
 8Echo Copying files to TEMPLATE directory
 9xcopy //y TEMPLATE\* %TEMPLATEDIR%
10
11Echo Installing feature
12%STSADM% -o installfeature -filename  Student\feature.xml -force
13
14IISRESET
15REM cscript c:\windows\system32\iisapp.vbs /"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 (博主才能看到) 
验证码 *  看不清,换一张 [登录][注册]
内容(请不要发表任何与政治相关的内容)  
  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      


相关链接: