MOSS中的WebPart开发

由于在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的声明周期。

05

然后我们就通过几个例子来说明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; } } } }
下面是部署后的截图:

06

说明:

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);
        }
    }
}

下图是效果图:

07 

三: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)
        {
        }
    }
}
如下图:

08

四:创建编辑部件

所有的编辑部件都集成自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控件中的值保持同步。

如下图:

09

五:部署

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进程,然后设置断点就可以了

别再傻傻分不清!Synopsys DC综合中link/target/symbol/synthetic四大库的保姆级配置指南 本文详细解析了Synopsys DC综合中link_library、target_library、symbol_library和synthetic_library四大库的配置方法,帮助工程师避免常见错误。通过实战示例和调试技巧,指导如何正确设置工艺库与IP库,提升数字芯片设计效率。 阅读详情

相关推荐

STM8S全解析之系列文章4---STM8S芯片项目升级引导程序(使用中断接收升级数据)

STM8S全解析之系列文章4—STM8S芯片项目升级引导程序(使用中断接收升级数据) 提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加 例如:第一章 Python 机器学习入门之pandas的使用 文章目录STM8S全解析之系列文章4---STM8S芯片项目升级引导程序(使用中断接收升级数据)前言一、Flash划分boot和App二、使用步骤1.引入库2.读入数据总结 前言 用过STM8S都知道它没有中断向量重定向,也就意味着STM8S的中断向量没办法指向其他的位置,间接说明升级的引导

weixin_39853312的博客 1031

借助命令行工具自动化Webpart的部署过程(使用VS.NET2003开发)

借助命令行工具自动化Webpart的部署过程(使用VS.NET2003开发) 首先看看DLL+DWP方式的Webpart部署到Bin中的过程(使用VS.NET2003开发):1 编译Webpart工程得到DLL2 复制所需的DLL到SPS网站的Bin目录中3 修改SPS网站的Web.Config文件,增加SafeControl申明4 因为修改了Web.config,所以

邀月周记 2812

C#程序突然崩溃怎么办?5分钟学会分析Dump文件(Visual Studio 2022实战)

本文详细介绍了在C#程序崩溃或无响应时,如何捕获并分析Dump文件以快速定位问题。通过Visual Studio 2022实战演示,重点讲解了配置符号服务器、解读调用堆栈与内存状态,以及针对CPU飙高、内存泄漏等典型场景的分析方法,帮助开发者高效进行故障诊断。

docker8compose的博客 474

SharePoint Framework系列(六)-构建第一个web part

构建你的第一个SharePoint client-side web part client-side web part是运行在SharePoint页面上下文中的client-side组件,Client-side web part可以部署到SharePoint Online,你可以使用比较流行的JavaScript工具和类库来开发他们。 Client-side webpart支持如下:

Frank的博客 2450

CoaXPress FMC子卡:高速图像采集与FPGA原型开发实战指南

在机器视觉和工业检测领域,高速、可靠的数据传输是核心需求。CoaXPress(CXP)协议作为一种基于同轴电缆的高速接口标准,通过其高带宽、长距离传输和低延迟的特性,有效解决了传统接口在确定性实时传输方面的短板。其技术价值在于为海量图像数据提供了稳定、高效的物理层和数据链路层解决方案,广泛应用于半导体检测、医疗成像等对吞吐量有极致要求的场景。要实现CXP系统的快速原型验证,集成了高速SerDes接口和时钟管理的FMC子卡与FPGA开发板的组合成为关键。这种平台将复杂的硬件设计封装,让开发者能聚焦于图像处理算

weixin_31815843的博客 278

python基础之语言发展历史

博主简介:原互联网大厂tencent员工,网安巨头Venustech员工,阿里云开发社区专家博主,微信公众号java基础笔记优质创作者,csdn优质创作博主,创业者,知识共享者,欢迎关注,点赞,收藏。 目录一、前言二、发展历史1、Python是一种面向对象的解释型编程语言2、Python常被称为胶水语言3、Python由Guido开发4、Python连续多年入选编程语言TOP105、Python的发展历史三、总结 一、前言   由于Python语言的简洁性、易读性以及可扩展性,它在网络爬虫、数据分析、.

jiankang66的博客 3348

MOSS 直接动态安装webPart到页面

在现在开发的项目中,发现一个好玩的东西,就是动态把WebPart自动的加载到指定的页面上的指定的位置?感觉是不是很神奇?其实也很简单,主要用到SPLimitedWebPartManager这个类就OK拉其实这个要注意的就是下面的WebPartXml 他就是站点的webpart gallery描述,可能一个dll文件中存在多个webpart在实际的开发中做一个Setup连部署人员都可以不用拉。。...

weixin_30737363的博客 166

基于YOLO26深度学习框架的人脸识别门禁系统的算法研究实现方法

本文研究了基于YOLO26深度学习框架的人脸识别门禁系统实现方法。系统采用YOLO26目标检测算法,通过CSPDarknet53主干网络、特征金字塔结构和注意力机制实现高效人脸检测。研究内容包括数据预处理、模型训练优化和身份验证等关键技术,使用迁移学习策略和CIoU损失函数提升检测精度。该系统可应用于智能安防场景,具有实时性强、识别准确的特点,为门禁管理提供了智能化解决方案。

一键难忘的博客 766

页面布局和webpart

Page Layout和Webpart 所有工作都做完毕之后,就可以把Webpart加到主页上了。 为了使主页分布合理,先修改一下Layout。点击右上角的小齿轮,Edit page,页面进入到编辑模式,点击Ribbon上的Text Layout,可以看到SharePoint已经内置了一些layout。   这里选择带有头部和三列的layout:   然后把Promote Link

SPFarmer的SharePoint专栏 2269

Synopsys逻辑工艺库(DC综合)

逻辑库包括仅与综合过程有关的信息且通过DC用于设计的综合和优化。这一信息包括引脚到引脚的时序、面积、引脚类型和功耗以及其他DC需要的必须数据。逻辑库是一个文本(通常扩展名".lib"),通过使用Library Compiler(LC)编译生成带有扩展名名".db"的二进制文件。以SMIC的逻辑综合库为例:库文件下载地址。

baidu_34971492的博客 2424

华为od统一考试B卷【单词搜索】C++ 实现

找到它是一个小游戏,你需要在一个矩阵中找到给定的单词。假设给定单词 HELLOWORD,在矩阵中只要能找到 H->E->L->L->O->W->O->R->L->D连成的单词,就算通过。意区分英文字母大小写,并且您只能上下左右行走,不能走回头路。

MISAYAONE的博客 709

[MOSS开发]:webpart在部署时应该注意的地方

由于近期项目的需要,我开始学习MOSS编程,刚开始接触的时候觉的特别的别扭,觉的没有自己全新创建的web application来的自由,但是MOSS还是有很多优点的,这篇我先说下自定义webpart的部署问题。 如何创建webpart我并不想在这篇中讲,具体我会另外写一篇关于webpart开发的文章。 MOSS中的webpart与普通.net控件...

dhka8040652的博客 208

22、计算智能在自闭症检测与管理中的应用

本文探讨了计算智能在自闭症谱系障碍(ASD)检测与管理中的应用。在检测方面,结合可穿戴设备、传感技术与多模态数据(如眼动追踪、问卷、神经成像等),利用机器学习和深度学习算法提升诊断准确性,并介绍了多种公开数据集及研究方法。在管理方面,通过生理指标(HRV、GSR、呼吸频率)监测情绪状态,结合智能可穿戴设备与支持性应用平台(如LetMeTalk、MITA、Rethink Ed等),实现对ASD患者的实时干预与个性化支持。文章还展示了多模态筛查与管理流程的系统架构,强调未来技术整合与个性化服务的发展方向。

star的博客 91

MOSS中WebPart开发简介

MOSS中WebPart开发简介

zhdd1234的专栏 792

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

MOSS下面WEBPART开发小结

接触MOSS(Microsoft Office Sharepoint Server)平台,发觉它很好很强大。具体的工作流还没有用过,只是在里边,发布了几个WEBPART,并布署单点登陆等等。需要的操作系统环境比较麻烦,后面会搞台虚拟机自己安装一遍。 利用quickpart(开源quickpart下载地址:http://quickpart.codeplex.com/)封装ASCX...

weixin_30711917的博客 153

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

MOSS 2007 WebPart 开发步骤

为了使用MOSS 2007,WebPart当然是必不可少的。无论是最简单的HelloWorld,还是复杂一些的Ad帐号更改的WebPart,开发与部署的步骤大体一致,在这里做个记录,以备查用(最近记性好像越来越差了)。(1)在项目中引入SharePoint的DLL(2)开发类继承于WebPart(3)复写CreateChildControl、OnLoad、Render等方法(4)为Assembly...

weixin_34112900的博客 186

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

MOSS2007中webpart的开发

最近公司决定使用sharepoint作为框架开发内部管理系统。SharePoint是一个非常良好的开发平台,关于自己特定功能,完全可以用asp.net进行开发,然后集成到sharepoint网站中,当然最简单的集成办法就是利用webpart。   一 . SharePoint WebPart插件。     1. 概述    SharePoint (SPS) WebPart 不等同于 Asp.net

KXLF 学习笔记 1017

【MOSS 2010】 如何开发一个自定义的WebPart来承载Silverlight应用程序

在 MOSS 2010:Visual Studio 2010开发体验(8)——Silverlight应用 这篇文章中,我介绍到了在MOSS 2010中提供的对Silverlight支持。它默认提供了一个Silverlight WebPart可以很方便地显示我们的Silverlight应用程序 但是也有些朋友问到,如果我们要自己开发一个WebPart实现类似的功能,那么该怎么做呢? 【备注】我并不认...

weixin_34226706的博客 69

umboy技术系列:利用VS2008和VSeWSS 1.2 开发MOSS2007 WebPart

umboy的专栏:信息安全的集成与移动技术 1410

Seata分布式事务原理与AT模式实战解析

分布式事务是微服务架构中保障跨库数据一致性的核心技术,其本质是在网络不可靠、服务异构、状态独立的前提下,通过协调协议模拟ACID语义。Seata作为主流开源框架,以AT模式为核心,融合SQL解析、undo_log快照、全局锁管理与分支事务协同等机制,在不侵入业务代码的前提下实现近似强一致性。它既规避了XA协议的高锁开销,又降低了TCC模式的改造成本,广泛应用于电商下单、支付结算等典型场景。本文深入剖析AT模式下@GlobalTransactional注解背后的数据拦截、锁协商与状态同步全过程,并结合双服务D

weixin_34060299的博客 245

Moss WebParts开发

在开始WebParts<span class="t_tag" onclick="function onclick(){tagshow(event)}">开发之前,我们先了解一下MOSS的一些开发<span class="t_tag" onclick="function onclick(){tagshow(event)}">工具,然后再开始从简单到复杂的WebPa

dyp330的专栏 801
上一篇: 坚持学习WF(8):本地服务之调用外部方法
下一篇: Undokumentierte @Formeln/LotusScript im Lotus Notes Client/Server
fdqwfdsafdsa
博客等级 码龄18年 2粉丝 0原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值