MOSS之六Web Part[转帖]

一个页面上将web部件从一个地方拖放到另外一个地方,从而简单方便地实现界面定制工作。由于webpart本身是独立存在的,所以,开发人员可以专心地去实现webpart本身的业务逻辑代码
在Asp.NET2.0中,可以开发出被MOSS2007使用的web part,这个web part从System.Web.UI.WebControls.WebParts继承。从System.Web.UI.WebControls.WebParts继承的WebPart,我们称作是ASP风格的Webpart。这种webpart既可以用在ASP.NET站点中,也能用在MOSS站点中。MOSS中推荐使用ASP的webpart
MOSS本身提供了很多开箱即用的webpart,如内容编辑部件、搜索部件、图片部件等。

 

v 创建一个简单的 webpart
v 打开 vs2005, 创建一个类库项目,名为 webpartProject ,引用 System.web System.drawing 的命名空间。添加一个类文件 WePartGid.cs
v 注意:这个类需要从 System.Web.UI.WebControls.WebParts.WebPart 继承
v 代码很简单,实例出一个 DataGrid ,并动态设置属性,够着数据源并绑定。最后创 建子控件并且输出。

 

 

v 示例: WebPartProject
 
 
v 编译成功后,打开VS2005 →项目→Web PartProject 属性
 
 
v 把输入路径设定为9000 端口应用程序端口下,目录一般在c:\Inetpub\wwwroot\wss\VirtualDirectories 这个目录下根据端口创建的目录,然后在 该目录下找到bin 目录即可,当VS2005 编译的时候,都会将程序集部署到这个目录中 以方便调试。需要注意:如果该程序集部署到GAC ,是需要强签名的。
 
v 自定义属性
v 为了让web part 更加灵活,具有通用性。需要把一些公共的属性独立出来,比如网站 URL 、网站URL 和列表名称,让用户自行选择或者设定。这需要在webpart 中实现 自定义的属性。
v 新建工程项目,命名为CustProperties ,工程类型请选择为webpart 类型。这个很重 要,否则菜单中没有自动部署解决方案选项。
 
 
v 示例:
 
 
自定义属性的标志说明 
属性
描述
Personalizable
标志一个属性是自定义属性
WebBrowsable
是否显示在属性编辑界面中
WebDisplayName
自定义属性的标题说明
WebDescription
自定义属性的描述
 
 
Category 这个属性并不是MOSS 专有的,而是ASP.NET 中提供的。它的功能是将属性分组,使用之前需要引入using System.ComponentModel 命名空间。
 
 
v 编译没有问题后,直接单击菜单→部署解决方案,系统会将web part 自动部署在MOSS 站点中。部署成功后,新建一个页面,命名为test.aspx ,编辑该页面,添加web 部件,可以找到刚才部署的名为CustProperties webpart 。在页面中,编辑CustProperties 这个web 部件。
v 通过自定义属性,可以把一些功能全部做成
 
 

 
v Web part 的提供和接收
v MOSS 站点汇总,对一个页面来说,web part 并不会一直存在于这个页面上,可能 现在存在,过段时间将会被删除。所以,这导致在webpart 开发中,无法硬编码去预 先访问另一个webpart 。为了解决这个问题,MOSS 提供了一个叫做webpart 连接(web Part Connection) 的机制。
v MOSS 中的web part 分为两类,一类是数据提供的webpart(provider web part),  类是数据接收的webpart Consumer Web part).webpart 连接机制提供的是一种松散 耦合的数据连接机制。数据提供的webpart 和数据接收的webpar 只关心自己的实现即 可。当它们需要连接时,通过webpart 连接机制的标准接口连接起来,从而实现了数 据的传递
webpart ,然后设定相应的属性就可以了。
 
 
 
v 通过案例快速熟悉两种webpart 的创建以及数据传递
v 新建项目WebPartConnection, 项目 类型为WebPart. 新增两个WebPart 类型的项一个 命名为ProviderWebPart, 一个命名为ConsumerWebPart.
v 示例: WebPartConnection
vProviderWebPart 中发送的方法中必须添加ConnectionProvider 属性修饰
vConsumerWebPart 中的接收方法必须添加ConnectionConsumer 属性标志
 
 
 
v 编译通过后,进行自动部署解决方案。之后把ProviderWebPart ConsumerWebPart 添加到test.aspx 页面上,编辑ProviderWebPart 的属性,在属性 面板上的 个性设置 里输入一些内容
v 然后再次编辑ProviderWebPart 控件的属性,
v 选择 连接 发送对象 ,此时系统会
v 根据当前页面的所有webpart 自动列举出能够
v 接收数据的webpart ,很显然只有ConsurmWebPart
 
 
 
 
 
v 手工部署
v 打开c:\Inetpub\wwwroot\wss\VirtualDirectories\9000\ 目录下的Web.Config 文件,修 改之前先备份。打开文件,找到类似这样的一些代码。
v <SafeControl Assembly="Microsoft.SharePoint.Search, Version=12.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" Namespace="Microsoft.SharePoint.Search.WebControls" TypeName="*" Safe="True" AllowRemoteDesigner="True" />
 
 
 
v SafeControl 节点的说明
 
标题
说明
Assembly
程序集的信息
Version
版本号
Culture
区域性值
PublicKeyToken
公钥标记 强签名后会产生
Namespace
命名空间
TypeName
类名
Safe
安全标志
 
 
 
v 凡是部署到站点中的Web Part 都需要按照这段代码在Web.Config 中注册为一个安全 控件。如何能够得到Web Part 的上述信息?通过反射工具可以获取已经编译后的程 序集的信息,需要下载一个小工具,推荐使用Reflector 。把程序集WebPartProject 拖入到界面中即可。
v 根据获取的程序集信息创建代码
v<SafeControl
vAssembly=“WebPartProject,
vVersion=1.0.0.0,Culture=neutral,
vPublicKeyToken=null
vNamespace= WebPartProject
vTypeName= *
vSafe=“True”/>
 
 
 
 
v 然后把这段代码填入到Web.Config 文件相应的SafeControl 位置,之后保存。接下来 单击 网站操作 网站设置 修改所有网站设置 ,打开界面

 
 
v 单击 Web 部件,可以看到,系统内已经有很多的Web 部件,其中,.dwp 是为了更好 地兼容以前WSS2.0 下的web 部件对象,.webpart 则是WSS3.0 提供的新的web 部件对 象。这两种类型的web 部件在MOSS2007 中都能够被很好地支持。
 
 
 
 
v 单击 新建 ,会打开所有已经注册地安全控件,找出刚才创建的名为WebPartProject WebPart
 
 
 
 
 
选中WebPartProject.WebPartGid 这个web 部件,然后单击 导入库 按钮,此时web 部件库界面上就能够看到创建的WebPart 了,而且自动标记为新的
 
v 接下来,将test.aspx 页面切换到编辑页面模式,单击 添加web 部件 ,添加webpartgid 控件。
 
 
 
 
 
v 如果需要自动部署,在新建VS2005 项目的时候必须在SharePoint 节点下选择WebPart 类型。当编译成功,部署解决方案。VS2005 会在当前的工程的bin\debug 录下,生成一些部署文件。
 
 
 
v 部署到 GAC
vGAC 是全局程序集缓存的缩写,GAC 是计算机范围内的代码缓存,它存储专门安装 的程序集,这些程序集由计算机上的许多应用程序共享。在全局程序集缓存中部署 的应用程序必须具有强名称。
v 部署到GAC 有两种方式
v1 、直接把程序集拖放到c:\windows\assembly 目录下,即可部署
v2 、使用命令行,假设有个叫CommandEventhandler.dll
v 卸载命令
vD:\program files\microsoft visual studio 8\sdk\v2.0\bin\gacutil.exe” –uf commonEventHandler
v 部署命令
vD:\program files\microsoft visual studio 8\sdk\v2.0\bin\gacutil.exe” –if
vBin\debug\commandeventhandler.dll
 
 
v MOSS 页面上添加自己开发的Web Part ,有时间会报错,MOSS 系统提示错误信 息很不友好,只能用VS2005 来调试。
v 将在VS2005 中创建的Web Part 项目后,需要附加到W3WP.exe 这个进程中来调试。 首先代码段中设置断点,然后单击 调试 附加到进程
v 打开界面发现很多w3wp.exe 进程,有时候甚至有7~8 个进程,到底选哪个?
v 选择 开始 程序 Microsoft Visual Studio 2005 “Visual Studio Tools” Visual Studio 2005 命令提示,输入iisapp 命令,这个命令第一次运行可能会提示 系统要写入注册表之类的信息,确定即可。这个命令会列出当前站点使用的w3wp.exe 进程,其中可以看到9000 端口网站的w3wp.exe PID 3512
v 在附加进程的界面,很容易找到ID 3512 w3wp.exe 进程,然后附加该进程即可。 附加进程后的VS2005 自动处于运行状态。然后打开我的日常工作这个页面,刷新后 则会切换VS2005 的调试状态,这样就能调试了。
 
 
 
v 从之前的例子中可以看出,开发一个webpart 还是很困难的,在开发过程中,无法看 到可视化界面,完全是由代码写出来的,包括控件、样式、属性、事件等。
v 所以,这种开发方式很容易造成页面出错及崩溃。假如页面的要求复杂,如对页面 的美工要求很高的话,那么web part 的开发将会更加困难。
v 如果能把以前的用户控件(.ascx) 或者页面文件(.aspx )能够直接嵌入在MOSS 页面 中,就能够加快程序的开发。
v 这就需要一个能容纳用户控件的webpart ,这样只需要做简单的设定,就能将已经做 好的控件包含进来,供系统使用。
 
 
 
用户控件包装器 QuickPart

 

 

 

 

vQuickPart 是一个国人编写的用户控件包装器。首先将QuickPart 进行部署
v 打开Web.Config 文件,将QuickPart 这个Web Part 控件作为安全控件进行部署。将下 面的代码添加到Web.Config 相应的SafeControl 区域中。
v<SafeControl Assembly="QuickPart, Version=1.0.0.0, Culture=neutral, PublicKeyToken=2d0bb71b2dd16f9e" Namespace="Microsoft.PRC.SharePoint" TypeName="*" Safe="True"/>
v 注意:需要将Web.Config 文件中的<trust level=“WSS_Minimal” originUrl=“”/>
v 改为<trust level= Full originUrl= “”/> 来提高信任级别。

 

 

 

v 同时将QuickPart.dll 复制到C:\Inetpub\wwwroot\wss\VirtualDirectories\9000\bin 目录 下,或者全局GAC 目录。然后单击 网站操作 网站设置 修改所有网站设置 添加Web 部件,单击 新建 按钮,在打开页面中,找到打钩的这两项。QuickPart 提供和接收两个控件,请全部选择。

 


 

 

 

 

最后单击 导入库 按钮即可。

 

 

 

 

接下来,重点讲解如何具体使用这个用户控件包装器。打开首页→网站操作→编辑网页,然后单击 添加Web 部件 ,在打开的页面中,选择ProviderQuickPart ,单击 添加 按钮即可。

 

 

 

v 打开VS2005 ,新建一个Web 工程,命名为GridViewWebPart ,添加一个用户控件, 命名为 GridView.ascx ,在页面上拖入一个GridView 控件,ID myGrid ,可以对表 格控件随意设计一些样式。打开后台代码页面,输入以下代码:
v protected void Page_Load(object sender, EventArgs e)
v         {
v             DataTable dt = GetData();
v             myGrid.DataSource = dt;
v             myGrid.DataBind();
v         }

 

private DataTable GetData()
        {
            DataTable dt = new DataTable("item");
            DataColumn dc;
            dt.Columns.Add("ID");
            dt.Columns.Add(" 项目 ");
            dt.Columns.Add(" 创建时间 ");
            DataRow dr;
            for (int i = 0; i < 10; i++)
            {
                dr = dt.NewRow();
                dr["ID"] = i;
                dr[" 项目 "] = " 这是第 " + i + " 个项目 ";
                dr[" 创建时间 "] = DateTime.Now;
                dt.Rows.Add(dr);
            }
            return dt;
        }

 

 

 

 

v 编译通过后,把生成的程序集bin\GridViewWebPart.dll 复制到C:\Inetpub\wwwroot\wss\VirtualDirectories\9000\bin 目录下。然后再将GridView.ascx 文件复制到c:\Inetpub\wwwroot\wss\VirtualDirectories\wpresourcecs 目录下
v 到此为止,用户控件的部署完成。
vQuickPart 添加到页面上效果
v 单击 编辑 修改共享Web 部件 ,在页面右下角打开一个对话框,这个控件提供了 一个属性:User Contorl List, 在这个下拉框中,可以找到GridView 用户控件,选中即 可。同时将 标题 设定为 表格数据 ,然后单击 确定 按钮
v 效果下页

 

 

v 可以看到,使用用户控件进行开发部署比起
v 之前使用WebPart 的开发部署来说,
v 方便简单是显而易见的,而且不容易出错
v 还可以充分利用以前的只是积累。
 
 
 

 

 
 
v 完全可以自己写一个用户控件包装器来代替QuickPart 。通过编写自定义用户控件包 装器来学习一些Web Part 开发的高级知识。
v 打开VS2005 ,新建一个项目,命名为SuperWebPart ,项目类型选择Web Part 。在 这个项目中,同样会把最终发布的所有的用户控件文件放到站点目录下的wpresource 目录中,当编辑这个用户控件包装器时,能够出现下拉框进行用户控件 的选择,。而不是默认指定某一个用户控件,从而极大增强包装器的通用性
v 在编辑WebPart ,如果是属性面板能出现一个选择用户控件的下拉列表框
v 新建一个TreeWebPart.cs 的类库文件,这个类需要从System.Web.UI.WebControls.WebParts.EditorPart 这个编辑部件类继承,这个类用 于编辑System.Web.UI.WebContorls.WebParts.WebPart 控件,并且需要重写ApplyChanges SyncChanges CreateChildContorls 等方法
v 代码 TreeWebPart.cs

 

 

v 新建SuperWebPart.cs 类库,这个类需要从System.Web.UI.WebContorls.WebParts.WebPart IWebEditable 接口继承
v 示例代码: SuperWebPart
v 从代码中可以看到usercontorl=(UserContorl)Page.LoadContorl(@”/wpresources/”+this.Url);
vContorls.Add(usercontorl); 在属性界面选择用户控件的名称后,这个Webpart 运行时 会自动加载用户控件。其中Url 属性是在ApplyChanges 方法通过下拉列表进行赋值的
v 需要说明的是,用户控件文件需要放在c:\Inetpub\wwwroot\wss\Virtual Directories\9000\wpresources 目录下
v 把程序集SuperWebPart.dll 放到c:\Inetpub\wwwroot\wss\Virtual Directories\9000\bin 目录下,这样,SuperWebPart 就开发完了。

 

 

v 系统中,大量地用到了列表,列表按照表格方式展现,同时列表还能进行分 组、筛选、排序等操作。
vASP.NET2.0 操作提供了强大的GridView 来构建应用程序。在MOSS 中,提供了一个SPGridView 控件,这个控件继承于GridView ,并增加了很多扩展。MOSS 中看到得 列表就是这个SPGridView 控件生成的。
vSPGridView 的声明代码如下:
v<%@ Register Assembly=“Microsoft.SharePoint,Version=12.0.0.0,Culture=neutral,PublicKeyToken=71e9bce111e94929c Namespace= Microsoft.SharePoint.WebControls
vTagPrefix=“SharePoint” %>
v<SharePoint:SPGridView ID=“SPGridView1” runat=“server” AutoGenerateColumns= False AllowPaging= True PageSize= 10 >
<AlternatingRowStyle CssClass=“ms-alternating”/>
<SelectedRowStyle CssClass=“ms-selectednav” Font-Bold=“True”/>
</SharePoint:SPGridView>
 
 
 
v 本示例主要完成SPGridView 控件的分页、过滤、数据绑定等操作。代码使用了一个SPDataSource 数据对象。这个对象有一个SPList 属性,从列表对象中得到list 对象, 赋值即可。SPGridView 控件绑定采用了DataSourceID 的方式,所以需要设定SPDataSource 数据对象的ID 属性。
v 新建用户控件SPGridView.ascx 。后台代码如下:
v SPWeb web;
v         SPDataSource odsDataSource;
v         protected void Page_Load(object sender, EventArgs e)
v         {
v             web = SPControl.GetContextWeb(Content);
v             SPList list = web.Lists("case");
v             odsDataSource = new SPDataSource();
v             odsDataSource.ID = "ExampleSource";
v             Controls.Add(odsDataSource);
v             odsDataSource.List = list;
v         }
 
vSPGridView 控件不支持自动生成数据列,所有的列需要在代码中声明,同时必须指 AutoGenerateColumns false
v// 添加字段
v             SPBoundField col = new SPBoundField();
v             col.DataField = " 标题";
v             col.SortExpression = " 标题";
v             col.HeaderText = " 标题";
v             SPGridView1.Columns.Add(col);
v             col = new SPBoundField();
v             col.DataField = " 状态";
v             col.SortExpression = " 状态";
v             col.HeaderText = " 状态";
v             SPGridView1.Columns.Add(col);
 
 
v 本示例主要对SPGridView 控件中的列增加下拉菜单以及参数传递等操作。
v 新建SPGridViewMenu.ascx 用户控件,添加一个SPMenuField 类型的字段,设定列 头和现实数据的字段。
v // 添加下拉菜单字段
v             SPMenuField colMenu = new SPMenuField();
v             colMenu.HeaderText = " 带下拉菜单的标题";
v             colMenu.TextFields = " 标题";
v             // 指定关联的菜单ID
v             colMenu.MenuTemplateId = "CustomsMenu";
v             colMenu.NavigateUrlFields = " 标题";
v             colMenu.NavigateUrlFormat = "action.aspx?key={0}";
v             colMenu.TokenNameAndValueFields = "name= 标题";
 
v 对程序员来说,使用包装器包装用户控件开发很方便。在c:\program files\common Files\Microsoft Shared\web server extensions\12\template\controltemplates 这个目 录下,发现很多系统用户控件,如欢迎的用户控件、网站操作的用户控件,MOSS 是如何调用这些用户控件的呢?答案就是DelegateControl 这个服务端控件,该控件 SharePoint.WebControls 下继承。
v 示例1 1 、创建用户控件命名为SearchBox.ascx
v2 、创建feature
v3 、部署
v SearchBox.ascx 用户控件复制到
v “%CommonProgramFiles%\Microsoft Shared\Web server\extensions\12\template\controltemplates\ 目录下

 

 

 

 

转载于:https://www.cnblogs.com/meiweijun/archive/2009/11/30/1613610.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值