zoukankan      html  css  js  c++  java
  • 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.webSystem.drawing的命名空间。添加一个类文件WePartGid.cs
    v注意:这个类需要从System.Web.UI.WebControls.WebParts.WebPart继承
    v代码很简单,实例出一个DataGrid,并动态设置属性,够着数据源并绑定。最后创建子控件并且输出。

     

     
     
    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示例:CustProperties
     
     
    自定义属性的标志说明 
    属性
    描述
    Personalizable
    标志一个属性是自定义属性
    WebBrowsable
    是否显示在属性编辑界面中
    WebDisplayName
    自定义属性的标题说明
    WebDescription
    自定义属性的描述
     
     
    Category这个属性并不是MOSS专有的,而是ASP.NET中提供的。它的功能是将属性分组,使用之前需要引入using System.ComponentModel命名空间。
     
     
    v编译没有问题后,直接单击菜单→部署解决方案,系统会将web part自动部署在MOSS站点中。部署成功后,新建一个页面,命名为test.aspx,编辑该页面,添加web部件,可以找到刚才部署的名为CustPropertieswebpart。在页面中,编辑CustProperties这个web部件。
    v通过自定义属性,可以把一些功能全部做成
     
     

     
    vWeb part 的提供和接收
    vMOSS站点汇总,对一个页面来说,web part并不会一直存在于这个页面上,可能现在存在,过段时间将会被删除。所以,这导致在webpart开发中,无法硬编码去预先访问另一个webpart。为了解决这个问题,MOSS提供了一个叫做webpart连接(web Part Connection)的机制。
    vMOSS中的web part分为两类,一类是数据提供的webpart(provider web part), 类是数据接收的webpartConsumer Web part).webpart连接机制提供的是一种松散耦合的数据连接机制。数据提供的webpart和数据接收的webpar只关心自己的实现即可。当它们需要连接时,通过webpart连接机制的标准接口连接起来,从而实现了数据的传递
    webpart ,然后设定相应的属性就可以了。
     
     
     
    v通过案例快速熟悉两种webpart的创建以及数据传递
    v新建项目WebPartConnection,项目 类型为WebPart.新增两个WebPart类型的项一个命名为ProviderWebPart,一个命名为ConsumerWebPart.
    vProviderWebPart中发送的方法中必须添加ConnectionProvider属性修饰
    vConsumerWebPart中的接收方法必须添加ConnectionConsumer属性标志
     
     
     
    v编译通过后,进行自动部署解决方案。之后把ProviderWebPartConsumerWebPart添加到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" />
     
     
     
    vSafeControl节点的说明
     
    标题
    说明
    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单击新建,会打开所有已经注册地安全控件,找出刚才创建的名为WebPartProjectWebPart
     
     
     
     
     
    选中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
     
     
    vMOSS页面上添加自己开发的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.exePID3512
    v在附加进程的界面,很容易找到ID3512w3wp.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控件,IDmyGrid,可以对表格控件随意设计一些样式。打开后台代码页面,输入以下代码:
    vprotected 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控件,并且需要重写ApplyChangesSyncChangesCreateChildContorls等方法
    v代码 TreeWebPart.cs

     

    v新建SuperWebPart.cs类库,这个类需要从System.Web.UI.WebContorls.WebParts.WebPartIWebEditable接口继承
    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。后台代码如下:
    vSPWeb 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控件不支持自动生成数据列,所有的列需要在代码中声明,同时必须指AutoGenerateColumnsfalse
    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示例11、创建用户控件命名为SearchBox.ascx
    v2、创建feature
    v3、部署
    vSearchBox.ascx用户控件复制到
    v“%CommonProgramFiles%\Microsoft Shared\Web server\extensions\12\template\controltemplates\目录下
  • 相关阅读:
    2019 SDN上机第5次作业
    SDN课程阅读作业(2)
    第05组 Alpha事后诸葛亮
    Ryu控制器编程开发——packet_in和packet_out简易交换机实现
    Ryu控制器安装部署和入门
    OpenDayLight Beryllium版本 下发流表实现hardtimeout
    Raspberry Pi 4B FTP服务器配置
    利用Wireshark抓取并分析OpenFlow协议报文
    基于OVS命令的VLAN实现
    利用Python脚本完成一个Fat-tree型的拓扑
  • 原文地址:https://www.cnblogs.com/meiweijun/p/1613610.html
Copyright © 2011-2022 走看看