Chinaunix首页 | 论坛 | 博客
  • 博客访问: 8236905
  • 博文数量: 444
  • 博客积分: 10593
  • 博客等级: 上将
  • 技术积分: 3852
  • 用 户 组: 普通用户
  • 注册时间: 2006-05-09 15:26
文章分类

全部博文(444)

文章存档

2014年(1)

2013年(10)

2012年(18)

2011年(35)

2010年(125)

2009年(108)

2008年(52)

2007年(72)

2006年(23)

分类: 系统运维

2010-06-23 20:38:40

  1. 概述
    1. WebPart生命周期.

    当一个包含WebPart的WSS站点页面被响应请求或者是它被提交到Server端的时候,这时WebPart生存周期开始了

    1. OnInit 初始化,加载相关配置文件 (如WebPart任务面板上的属性,样式等配置信息) .
    2. LoadViewState 返回先前最后一次被处理的状态 (如webpart是展现,隐藏还是关闭)
    3. CreateChildControls 创建WebPart UI ,通过Controls.Add()方法装载Web 控件 (Note:当Webpart是第一次展现的时候CreateChildControls方法发生在OnLoad方法之前,而经过一次postback之后,它发生在OnLoad方法之后)
    4. OnLoad 从数据库或者其他系统重新获取要展现的数据 (如获取数据库连接)
    5. User-Generated Events 响应用户生成事件 (如Button Click)
    6. RendenContents 生成 html output,实现最终的UI展现 (由HTMLTextWriter class 来实现)
    7. SaveViewState 保存控件状态 (ViewState 被序列化之后保存在一个hidden field 里)
    8. Dispose 从内存中移除对象,释放临界资源 (如释放数据库连接)
    9. OnUnLoad 最终完成内存清除工作
    1. WebPart 关联
      1. 方法一: 一个WebPart的事件处理程序,把要传递的信息赋给别一个WebPart的属性,接收信息的WebPart通过此属性值来处理呈现.这二个WebPart必须在同一个页面上都要添加.
      2. 方法二: MOSS提供了一种专门的机制Web Part Connection,用于在WP之间传递数据.

        SharePoint将要进行数据传递的WP分为两类:

        Provider WP: 提供数据

        Consumer WP: 接收数据

        Web Part Connection 机制提供了一种松耦合的数据连接机制。Provider WP 和 Consumer WP都只用关心自己的实现即可,而不必关心数据的接收或提供者是谁,怎么去使用。

        在部署之后,我们的页面上放置了Provider WP and Consumer WP, 这时候SharePoint机制会自动检测页面上所有Web Part 的类型,用数据通道把这俩种Web Part挂接起来,。如果发现某个Provider WP 所提供的数据正好可以被另外一个Consumer WP使用,那么管理员就可以在页面上直接将它们俩个连接起来。一个Provider WP 可被多个Consumer WP使用。通过数据通道,这样也就实现了Provider 和Consumer 之间的数据传递 。

  2. 开发步骤
    1. 首先用vs2008创建GetListWebPart的Class Library工程,右击工程属性为工程添加强名,打开工程的AssemblyInfo.cs文件添加 "using System.Security;" 命名空间与 "[assembly: AllowPartiallyTrustedCallers()]" 二行,为工程添加Microsoft.SharePoint和System.Web的引用.
    2. 添加文件ListWebPart的代码文件(也就是webpart一,主要用下拉列表列出二个LIST中的ITEM的TITLE),代码如下:

    using System;

    using System.Collections.Generic;

    using System.Text;

    using System.Web.UI;

    using System.Web.UI.WebControls;

    using System.Web.UI.WebControls.WebParts;

    using System.Web.UI.HtmlControls;

    using Microsoft.SharePoint;

    namespace GetListWebPart

    {

    public class ListWebPart:WebPart

    {

    protected DropDownList drpdownlist1;

    protected DropDownList drpdownlist2;

     

    public ListWebPart()

    {

    this.ExportMode = WebPartExportMode.All;

    }

    protected override void CreateChildControls()

    {

    drpdownlist1 = new DropDownList();

    drpdownlist1.ID = "list1";

    drpdownlist1.AutoPostBack = true;

    drpdownlist1.DataSource = GetListItem("test1 list");

    drpdownlist1.DataTextField = "Title";

    drpdownlist1.DataValueField = "ID";

    drpdownlist1.DataBind();

    drpdownlist1.SelectedIndexChanged += new EventHandler(drpdownlist1SelectedIndexChanged);

    this.Controls.Add(drpdownlist1);

     

    drpdownlist2 = new DropDownList();

    drpdownlist2.ID = "list2";

    drpdownlist2.AutoPostBack = true;

    drpdownlist2.SelectedIndexChanged += new EventHandler(drpdownlist2_SelectedIndexChanged);

    drpdownlist2.DataSource = GetListItem("test2 list");

    drpdownlist2.DataTextField = "Title";

    drpdownlist2.DataValueField = "ID";

    drpdownlist2.DataBind();

    this.Controls.Add(drpdownlist2);

    ChildControlsCreated = true;

    //base.CreateChildControls();

    }

     

    protected override void Render(HtmlTextWriter writer)

    {

    writer.Write("

    ");

    writer.Write("

    ");

    writer.Write("

    Weldon MOSS WebPart
    test1 list title:");

    drpdownlist1.RenderControl(writer);

    writer.Write("

    test2 list title:");

    drpdownlist2.RenderControl(writer);

    writer.Write("

    ");

    //base.Render(writer);

    }

     

    void drpdownlist2_SelectedIndexChanged(object sender, EventArgs e)

    {

    //drpdownlist1.Items.Clear();

    }

     

    protected SPListItemCollection GetListItem(string listName)

    {

    //SPSite site = new SPSite("");

    SPSite site = SPContext.Current.Site;

    SPWeb web = site.OpenWeb("Docs");

     

    SPList list = web.Lists[listName];

    SPListItemCollection items = list.Items;

    return items;

     

    }

     

    void drpdownlist1SelectedIndexChanged(object sender, EventArgs e)

    {

    for (int i=0; i < WebPartManager.WebParts.Count; i++)

    {

    if (WebPartManager.WebParts[i].Title == "ListItemWebPart")

    {

    ListItemWebPart item = (ListItemWebPart)WebPartManager.WebParts[i];

     

    SPSite site = SPContext.Current.Site;

    SPWeb web = site.OpenWeb("Docs");

     

    SPList list = web.Lists["test1 list"];

    item.item = list.Items.GetItemById(Convert.ToInt32(drpdownlist1.SelectedValue));

    }

    }

    }

    }

    }

     

    1. 添加ListItemWebPart的代码文件(WEBPART 二,当WEBPRTE 一的下拉选项变化时,负责呈现ITEM的具体信息)代码如下:

    using System;

    using System.Collections.Generic;

    using System.Text;

    using System.Web.UI;

    using System.Web.UI.WebControls;

    using System.Web.UI.WebControls.WebParts;

    using System.Web.UI.HtmlControls;

    using Microsoft.SharePoint;

    namespace GetListWebPart

    {

    public class ListItemWebPart:WebPart

    {

    public ListItemWebPart()

    {

    this.ExportMode = WebPartExportMode.All;

    }

    private SPListItem _item = null;

    public SPListItem item

    {

    set { _item = value; }

    get { return _item; }

    }

     

    protected override void Render(HtmlTextWriter writer)

    {

    writer.Write("

    ");

    writer.Write("

    ");

    writer.Write("

    ");

    if (item == null)

    writer.Write("

    ");

    else

    {

    writer.Write("

    ");

    writer.Write("

    ");

    writer.Write("

    ");

    writer.Write("

    ");

    writer.Write("

    ");

    }

    writer.Write("

    List Item Detail
    Please Select List Item in webpart " + item["Title"] + " " + item["DropList1"] + " " + item["drp2"] + " " + item["Created"] + " " + item["Author"] + "
    ");

    }

    }

    }

    1. 部署
      1. 项目编译后把DLL放入MOSS站点所在文件夹中

      "C:\Inetpub\wwwroot\wss\VirtualDirectories\\_app_bin"

      1. 打开Reflector查看GetListWebPart.dll 的Assembly信息(即Name后的内容)。

      1. 打开MOSS站点的WEB.CONFIG文件添加如下二行配置:

      1. MOSS中添加,如下图:

      进入站点设置,点Galleries -> Web Parts

      点NEW.

      选中我们之前创建的二个WEBPART,点Populate Gallery

      返回,成功加入后如下:

       

      打开要添加WEBPART的页面,点Edit Page,添加:

      添加完成后如下:

(5) 调试
首先打开使用webPart的站点,再打开工程。依次点工程菜单上Debug -> Attach to Process。
在Attach to Process界面中可能出现几个w3wp.exe的进程,我们必须找到webPart站点对应的进程。这时进入命令行输入”iisapp”查看IIS6应用程序池所对应的进程ID,然后在选择正确的进程附加。
附加之后工程变成Debug状态,操作webPart页面,就可以进入工程中已设置断点的地方。

阅读(2795) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~