由于在asp.net1.1的时候asp.net中还没有webpart的概念,所以在sps2003中的webpart都是依赖于Microsoft.SharePoint.dll的,必须继承自命名空间为Microsoft.SharePoint.WebPartPages下的基类。到了asp.net2.0,asp.net将sharepoint的webpart集成到asp.net框架中,新的ASP风格WebPart依赖于System.Web.dll,继承自不同的一个由ASP.NET 2.0定义的WebPart基类,其命名空间为System.Web.UI.WebControls.WebParts。在moss中推荐使用asp.net2.0的webpart。
在一个ASP.NET 2.0的应用中使用WebPart,我们必须创建一个.aspx页面并包括一个WebPartManager控件和至少一个WebPartZone控件。在MOSS中的WebPart是架构在一个名为SPWebPartManager的控件基础上的,他重写了asp.net中的WebPartManager的许多标准方法,同样WebPartZone我们也需要使用Microsoft.SharePoint.WebPartPages命名空间下的,这些其实都已经在默认的母版页都中了。
MOSS本身也提供了很多开箱即用的WebPart,例如Conent Editor WebPart,Data view WebPart,List View WebPart,Image WebPart,Members WebPart,Page viewer WebPart。下图为WebPart的声明周期。
然后我们就通过几个例子来说明MOSS中WebPart的相关开发:
一:上传附件到文档库
使用asp.net中的FileUpload控件,设置我们要上传的网站地址和列表的标题,代码如下:
using System; using ……… namespace CaryWebPart { [Guid("288802c4-4dfe-45b6-bb28-49dda89ec225")] public class FileUploadWP : System.Web.UI.WebControls.WebParts.WebPart { FileUpload objFileUpload = new FileUpload(); protected override void CreateChildControls() { Controls.Add(objFileUpload); Button btnUpload = new Button(); btnUpload.Text = "Save File"; this.Load += new System.EventHandler(btnUpload_Click); Controls.Add(btnUpload); } private void btnUpload_Click(object sender, EventArgs e) { using (SPSite objSite = new SPSite(SiteCollectionUrl)) { using (SPWeb objWeb = objSite.OpenWeb(SiteUrl)) { SPList objList = objWeb.Lists[ListName]; if (objFileUpload.HasFile) { try { objList.RootFolder.Files.Add(objFileUpload.FileName, objFileUpload.PostedFile.InputStream, true); } catch(Exception ex) { string a = ex.Message; } } } } } private string _strSiteCollectionUrl; [Personalizable(PersonalizationScope.Shared), WebBrowsable(true),
WebDisplayName("网站集URL"), WebDescription("请输入网站集URL")] public string SiteCollectionUrl { get { return _strSiteCollectionUrl; } set { _strSiteCollectionUrl = value; } } private string _strSiteUrl; [Personalizable(PersonalizationScope.Shared), WebBrowsable(true),
WebDisplayName("网站URL"), WebDescription("请输入网站URL")] public string SiteUrl { get { return _strSiteUrl; } set { _strSiteUrl = value; } } private string _strListName; [Personalizable(PersonalizationScope.Shared), WebBrowsable(true),
WebDisplayName("列表名称"), WebDescription("请输入列表名称")] public string ListName { get { return _strListName; } set { _strListName = value; } } } }
下面是部署后的截图:
说明:
1.Personalizable说明该属性是可配置的。
2.PersonalizationScope.Shared 设置该属性的是否所有人都可见,可以设置Shared和User两种 。
WebBrowsable(true) 表示在编辑部件里是可见的。
3.SPSite的OpenWeb方法的一个重载方法的URL参数,是相对地址。
4.例子中需要将站点的web.config的<trust level="Full" originUrl="" /> 设置为Full才可以上传附件。
二:Webpart中使用资源
有两种方式来访问资源一种就是放在_layouts下,另一种就是web资源,它可以编译到程序集当中去,我们主要说Web资源。首先新建一个项目,在项目中添加一个图片,并且在Assemblyinfo.cs中添加如下代码:
[assembly: WebResourceAttribute("WebResource.icons.recycbin.gif","image/gif")]
image/gif代表资源的类型,如果是js则写成text/javascript。
然后还需要创建一个虚拟的类,这个类不做任何动作,只是为了获取到资源的引用而用,下面是该类的代码:
using System; using ……… namespace WebResource {
public class PlaceHolder {} }
用下面代码来获取web资源:
string strResource = "WebResource.icons.recycbin.gif";
string strUrl = Page.ClientScript.GetWebResourceUrl(typeof(WebResource.PlaceHolder), strResource);
获取到的url如下形式“/WebResource.axd?d=[Assembly key]&t=[last write time of resource assembly]”
/WebResource.axd?d=A34Cgk8tSLsOaGW2Mtx1-iMMZgj-CEJ77updNPilqoda3ab0CWc1mJqVyolRohMp0&t=633457672629813944
下面是使用BulletedList控件,并且将控件项的图标设置为我们的web资源中的图片,代码如下:
namespace CaryWebPart { public class WebResourceWP : System.Web.UI.WebControls.WebParts.WebPart { protected override void CreateChildControls() { string strResource = "WebResource.icons.recycbin.gif"; string strUrl = Page.ClientScript.GetWebResourceUrl(typeof(WebResource.PlaceHolder), strResource); BulletedList objBullist = new BulletedList(); objBullist.BulletStyle = BulletStyle.CustomImage; objBullist.BulletImageUrl = strUrl; objBullist.Items.Add("One"); objBullist.Items.Add("Two"); objBullist.Items.Add("Three"); objBullist.Items.Add("Four"); Controls.Add(objBullist); } } }
下图是效果图:
三:WebPart 动作菜单
有三种类型:
1. Client-side verbs:在客户端执行,使用webpartverb类,构造函数需要传两个参数,第一个是verbs的id,第二个是点击的时的处理程序,是js的程序。代码如下:
WebPartVerb objFirst = new WebPartVerb("FirVerbId", "javascript:alert('Hello Verb!');"); objFirst.Text = "第一个verb"; objFirst.Description = "第一个verb信息描述"; objFirst.ImageUrl = "_layouts/images/test/recycbin.gif";
2. Server-side verbs:在服务器端执行。参数中的事件处理程序使用服务器端的代码。
WebPartVerb objSecond = new WebPartVerb("SecVerbId", new WebPartEventHandler(SecondVerbHandler)); objSecond.Text = "第二个verb"; objSecond.Description = "第二个verb信息描述";
3. Both:这种在服务器端和客户端都执行动作。可以使用WebPartVerbCollection。
WebPartVerb[] objVerbs = new WebPartVerb[] {objFirst, objSecond}; WebPartVerbCollection objVerbCollection = new WebPartVerbCollection(base.Verbs, objVerbs);
下面是完整代码:
using System; using ………
namespace CaryWebPart { [Guid("288802c4-4dfe-45b6-bb28-49dda89ec225")] public class VerbsWP: System.Web.UI.WebControls.WebParts.WebPart { public override WebPartVerbCollection Verbs { get { WebPartVerb objFirst = new WebPartVerb("FirVerbId", "javascript:alert('Hello Verb!');"); objFirst.Text = "第一个verb"; objFirst.Description = "第一个verb信息描述"; objFirst.ImageUrl = "_layouts/images/test/recycbin.gif"; WebPartVerb objSecond = new WebPartVerb("SecVerbId", new WebPartEventHandler(SecondVerbHandler)); objSecond.Text = "第二个verb"; objSecond.Description = "第二个verb信息描述"; WebPartVerb[] objVerbs = new WebPartVerb[] { objFirst, objSecond }; WebPartVerbCollection objVerbCollection = new WebPartVerbCollection(base.Verbs, objVerbs); return objVerbCollection; } } protected void SecondVerbHandler(object sender, WebPartEventArgs args) { } } }
如下图:
四:创建编辑部件
所有的编辑部件都集成自EditorPart类,需要编辑的webpart的代码如下:
using System;
using ………
namespace CaryWebPart { [Guid("288802c4-4dfe-45b6-bb28-49dda89ec225")] public class ForEditWP:System.Web.UI.WebControls.WebParts.WebPart { protected override void RenderContents(HtmlTextWriter writer) { writer.Write("TestValue: " + TestValue); } public override EditorPartCollection CreateEditorParts() { EditWP objEditor = new EditWP(); objEditor.ID = ID + "testEditor1"; objEditor.Title = "Test Editor Title"; objEditor.ToolTip = "Test Editor tooltip"; objEditor.TabIndex = 100; objEditor.GroupingText = "Test editor grouping text"; ArrayList objEditorParts = new ArrayList(); objEditorParts.Add(objEditor); EditorPartCollection objEditorPartsCollection = new EditorPartCollection(objEditorParts); return objEditorPartsCollection; } private string strNormalValue = String.Empty; [Personalizable(PersonalizationScope.Shared), WebBrowsable(false), WebDisplayName("Normal value"), WebDescription("Normal value description")] public string TestValue { get { return strNormalValue; } set { strNormalValue = value; } } } }
CreateEditorParts方法:创建要与WebPart控件关联的自定义EditorPart控件的实例。当用户单击WebPart控件上的编辑动作时,将调用该方法。然后就是开发上面Webpart对应的编辑部件,代码如下:
using System; using ………
namespace CaryWebPart { public class EditWP : EditorPart { TextBox txtNormalBox; protected override void CreateChildControls() { txtNormalBox = new TextBox(); txtNormalBox.ID = "txtNormalBox"; txtNormalBox.Text = "[Custom editor part]"; txtNormalBox.TextMode = TextBoxMode.MultiLine; txtNormalBox.Rows = 5; Controls.Add(txtNormalBox); } public override bool ApplyChanges() { ForEditWP objNormal = (ForEditWP)WebPartToEdit; objNormal.TestValue= txtNormalBox.Text; return true; } public override void SyncChanges() { EnsureChildControls(); ForEditWP objNormal = (ForEditWP)WebPartToEdit; txtNormalBox.Text = objNormal.TestValue; } } }
ApplyChanges方法:将用户输入到EditorPart控件中的值保存到WebPartToEdit属性中引用的WebPart控件的相应属性中。
SyncChanges方法和上面的方法是对应的,他负责EditorPart控件中的值始终与关联WebPart控件中的值保持同步。
如下图:
五:部署
MOSS中部署一个webpart的大致流程:
1.搭建好开发环境,建立webpart工程,写代码。
2.修改assembly.cs文件
在部署前,需要修改assembly文件,增加以下两句:
using System.Security;
[assembly: AllowPartiallyTrustedCallers]
如果不进行以上修改,在安装WebPart时,会提示失败。
3.复制文件
将编译后的Dll复制到Web应用程序目录下的bin目录下。Web应用程序的文件夹位置类似以下路径:
C:\Inetpub\wwwroot\wss\VirtualDirectories\80\bin 。
4.修改web.config
WebPart使用前,需要修改Web应用程序的配置文件。
(1)增加SafeControls中增加一行,类似下面的写法。
<SafeControl Assembly="HelloWebPart" Namespace="HelloWebPart" TypeName="*" Safe="True" AllowRemoteDesigner="True" />
(2)修改信任级别。
将<trust level="WSS_Minimal" originUrl="" />改为<trust level="WSS_Medium" originUrl="" /> 也可以将WSS_Medium改Full。
5.在网站中增加webpart(网站操作--网站设置--web部件--新建)
六:调试
调试也没什么好说的,附加w3wp.exe进程,然后设置断点就可以了
发表评论
-
平淡的2007
2007-12-24 08:04 816早上起来,送女朋友去公交车站,然后回来赶紧打开电脑,先 ... -
DreamSpark发布,高校学生免费使用Visual Studio 2008 Professional Edition 等微软软件
2008-02-20 13:23 1414今天上网无意中搜索到学生可以免费使用VS2008专业版,后来又 ... -
坚持学习WF(1):从HelloWorld开始
2008-04-04 16:30 891[置顶]坚持学习WF文章索 ... -
坚持学习WF(2):WF创作模式和设计时工具
2008-04-05 17:19 638[置顶]坚持学习WF文章索 ... -
坚持学习WF(3):WF框架概览
2008-04-08 07:27 783[置顶]坚持学习WF文章索 ... -
坚持学习WF(4):活动(Activity)和依赖属性(DependencyProperty)
2008-04-12 00:01 1147[置顶]坚持学习WF文章索引 活动(Activity) 活动 ... -
坚持学习WF(5):自定义活动(CustomActivity)
2008-04-13 15:25 928当WF提供的标准活动不能满足我们的需求的时候,我们就需要定义自 ... -
MOSS点滴(1):如何开发和部署feature
2008-04-16 21:35 835Features 是MOSS 2007以开箱即用的一套新功能, ... -
MOSS点滴(2):自定义Application Page
2008-04-19 20:07 844在MOSS中后台管理的页面都是Application Pag ... -
坚持学习WF(6):开发可复用的宿主程序
2008-04-21 21:45 695我们之前写工作流宿主 ... -
MOSS点滴(3):说说MOSS中的母版页
2008-04-25 21:15 1187MOSS中有两种页面:Site P ... -
MOSS点滴(4):实现Form认证
2008-04-29 21:12 704本文主要参考了网上的一些文章,但有些文章有些地方说的不是很明确 ... -
坚持学习WF(7):流程控制(Flow Control)
2008-04-30 18:10 836本文主要说说WF中和流 ... -
坚持学习WF(8):本地服务之调用外部方法
2008-05-09 08:17 760WF提供了一组核心服务 ... -
坚持学习WF(9):本地服务之事件处理
2008-05-28 07:49 799[置顶]坚持学习WF文章索引 一:先来介绍两个活动 Even ... -
坚持学习WF(10):在工作流中使用关联
2008-06-01 13:03 691[置顶]坚持学习WF文章索 ... -
坚持学习WF(11):工作流通信与队列
2008-06-07 15:45 735[置顶]坚持学习WF文章索引 WF 提供的通信模型是构建于 ... -
MOSS中创建自定义内容类型
2008-06-12 20:23 1106一:简要介绍 某类内容 ... -
.NET中IDisposable接口的基本使用
2008-06-15 12:01 950首先来看MSDN中关于这个接口的说明: [ComVisible ... -
坚持学习WF(12):使用EventHandlingScopeActivity活动
2008-06-18 22:46 684[置顶]坚持学习WF文章索引 EventHandlingSco ...
相关推荐
本篇将深入探讨MOSS 2007中的WebPart开发,以帮助你更好地理解和应用这一技术。 1. **WebPart简介** WebPart是SharePoint的可视化组件,可以在页面上独立或组合使用,提供动态交互的用户体验。它们可以是数据展示...
在本课程中,我们将深入探讨Microsoft Office SharePoint Server (MOSS) 2007的WebPart开发,这是MOSS2007开发系列课程的第三部分。WebPart是SharePoint平台的核心组件之一,它们提供了构建高度自定义和交互式用户...
**二、Webpart开发** 1. **了解Webpart**:Webpart是MOSS中的可重用组件,可以显示数据、提供交互功能。 2. **创建Webpart**:使用Visual Studio创建新的SharePoint Webpart项目。 3. **设计界面**:利用ASP.NET...
在探讨《webpart开发及与Silverlight整合》这一主题时,我们不仅触及了现代Web开发的核心技术,还深入了解了如何将这些技术应用于Microsoft Office SharePoint Server(MOSS)环境中的实践。以下是对该主题中关键...
《Moss 2007 开发深度解析:WebPart开发实践与工具应用》 Microsoft Office SharePoint Server (Moss) 2007是微软推出的企业级协作平台,它提供了丰富的功能,包括文档管理、工作流、网站创建等。在Moss的开发领域...
- **Flash**:Adobe Flash,一种广泛应用于创建互动内容、动画和多媒体应用的技术,虽然现在已逐渐被HTML5取代,但在过去的Web开发中,尤其是动态图片展示方面,Flash非常流行。 - **播放图片**:指Web部件的核心...
本文将详细介绍如何在 Microsoft Office SharePoint Server 2007 (MOSS) 环境下进行 WebPart 的开发。 #### 二、开发环境搭建 ##### 2.1 安装 Visual Studio 2005 - **安装版本**:推荐使用 Visual Studio 2005 ...
Microsoft Office Sharepoint Server 2007开发系列课程 MOSS2007之概述 MOSS2007之开发概述 MOSS2007之WebPart开发 MOSS2007之EventHandler开发 MOSS2007之工作流
在SharePoint环境中,WebPart是一种可重用的、自包含的UI组件,可以用于构建和定制用户界面。"Sharepoint列表定制转移WebPart"就是这样一个专门用于处理列表数据迁移的WebPart,它提供了方便的方式来复制或转移...
这暗示了我们需要对SharePoint的WebPart开发、工作流管理和.NET编程有一定的理解。 在提供的压缩包文件"CustomTask"中,可能包含了源代码、配置文件、资源文件以及部署说明等。为了使用或进一步开发这个WebPart,你...
- 自定义开发(Custom Development):包括使用Visual Studio创建自定义WebPart、特性、解决方案,以及对SharePoint对象模型的编程。 熟悉这些SharePoint的基础和高级概念将有助于你在面试中表现出色,展示出对平台...
在SharePoint开发中,WebPart是主要的可重用组件,而QuickPart则为创建和管理这些WebPart提供了一种简便的方式。 首先,我们要理解什么是用户控件。用户控件是在.NET Framework中的一种自定义UI元素,它可以包含...
《SmartQuery在MOSS中的应用实战DEMO解析》 SmartQuery是SharePoint环境中一个强大的查询工具,它为Microsoft Office SharePoint Server (MOSS) 提供了更灵活、更高效的查询功能。这个名为“moss_smartQuery_Demo”...
在微软的 SharePoint Server (MOSS) 中,WebPart 是一个非常重要的概念,它允许开发者创建可重用的用户界面组件。这些组件可以被轻松地添加到 SharePoint 页面上,并根据用户需求进行个性化设置。了解 WebPart 的...
在本篇WebPart编程培训中,我们将深入探讨SharePoint Web Part开发的核心概念和技术。Web Part是构建团队或门户站点的基本模块,允许用户自定义页面内容和功能。在SharePoint 2007中,虽然已经预置了一系列可供使用...
这个编辑器扩展了MOSS的标准功能,提供了更强大的HTML控件编辑体验,允许用户在WebPart中创建和编辑更加复杂的网页内容。 首先,我们要了解MOSS的默认富文本编辑器。在没有第三方增强之前,MOSS自带的编辑器可能...
在2010年发布的这个版本中,SharePoint 分为了两个版本:SharePoint Foundation 2010 和 SharePoint Server 2010。Foundation 2010 是Windows SharePoint Services (WSS) 3.0的升级版,而Server 2010 则是Microsoft ...
moss 2007 开发 如何使用用户控件来开发webpart