百度空间 | 百度首页 
               
 
查看文章
 
一步一步SharePoint 2007(八)
2006-10-31 15:29

一步一步SharePoint 2007之二十六:编写一个带事件的WebPart



摘要

  前面的文章中,我们编写了一个非常简单的WebPart,它只能输出一个Hello World!的字符串。

  很显然,这种WebPart根本就没有什么实际的作用。有没有办法编写比较复杂一些的,比如是带事件的WebPart呢?

  本篇文章将介绍如何编写一个带事件的WebPart。

正文

  要实现带事件的WebPart,实际上就是要实现有复合控件的WebPart,这在开发过程中具有非常大的实际意义。如果我们能够做到这点,那么,其它的什么样的WebPart,相信大家都能举一反三的做到。

  这里,我就用一个TextBox,一个Button控件来举例子,要做到的就是单击Button,能将当前系统时间显示在TextBox中。

  至于WebPart的基本操作,前面的文章中讲得很清楚,这里不再一一讲解操作步骤。

  为了方便您的学习,您可以下载本篇文章所创建的工程。单击此处下载。

  下面将记录每一步的操作过程。

  1、首先创建一个命名空间为Eallies.WebParts.Sample的C#的Class Library工程,并将默认的Class1.cs改名为Time.cs。

  然后添加System.Web引用,并将AssemblyInfo.cs按照前面文章中的做法更改好。

  将Time.cs的代码更改为如下代码:

    1 using System;
    2 using System.Collections.Generic;
    3 using System.Text;
    4
    5 using System.Web.UI;
    6 using System.Web.UI.WebControls;
    7 using System.Web.UI.WebControls.WebParts;
    8 using System.Web.UI.HtmlControls;
    9
   10 namespace Eallies.WebParts.Sample
   11 {
   12     public class Time : WebPart, INamingContainer
   13     {
   14         private string _Text;
   15
   16         private HtmlTableCell _HtmlTableCell = new HtmlTableCell();
   17
   18         private TextBox _TextBox = new TextBox();
   19         private Button _Button = new Button();
   20
   21         public Time()
   22         {
   23             this._Button.Click += delegate(object sender, EventArgs e)
   24             {
   25                 this._Text = DateTime.Now.ToString();
   26
   27                 this._HtmlTableCell.InnerHtml = "";
   28                 this.AddControls();
   29             };
   30         }
   31
   32         [WebBrowsable(true), Personalizable(true)]
   33         public string Text
   34         {
   35             get { return _Text; }
   36             set { _Text = value; }
   37         }
   38
   39         protected override void CreateChildControls()
   40         {
   41             this.Controls.Add(new LiteralControl("<table>" + "\n"));
   42             this.Controls.Add(new LiteralControl("    <tr>" + "\n"));
   43             this.Controls.Add(this._HtmlTableCell);
   44             this.Controls.Add(new LiteralControl("    </tr>" + "\n"));
   45             this.Controls.Add(new LiteralControl("</table>" + "\n"));
   46
   47             if (this.Page.IsPostBack == false) this.AddControls();
   48         }
   49
   50         protected override void OnLoad(EventArgs e)
   51         {
   52             base.OnLoad(e);
   53
   54             if (this.Page.IsPostBack == true) this.AddControls();
   55         }
   56
   57         protected override void Render(HtmlTextWriter writer)
   58         {
   59             base.Render(writer);
   60         }
   61
   62         private void AddControls()
   63         {
   64             this._TextBox.ID = this.ID + "TextBox";
   65             this._TextBox.Text = this._Text;
   66             this._HtmlTableCell.Controls.Add(this._TextBox);
   67
   68             this._HtmlTableCell.Controls.Add(new LiteralControl("<br>"));
   69
   70             this._Button.ID = this.ID + "Button";
   71             this._Button.Text = "Get Time";
   72             this._HtmlTableCell.Controls.Add(this._Button);
   73         }
   74     }
   75 }

Click here to open new windowCTRL+Mouse wheel to zoom in/out
  2、按照前面文章的方法为该WebPart添加强名称。
  这里做一点改变,将编译的输出路径更改为站点的bin目录,如C:\Inetpub\wwwroot\wss\VirtualDirectories\9001\_app_bin,这样做的目的是为了方便调试。
Click here to open new windowCTRL+Mouse wheel to zoom in/out
  3、其它步骤,如更改web.config、将WebPart添加到网站的WebParts列表中等,就都省了,请参照前面的文章中讲解的方法操作。
  打开网站首页,将我们刚刚编写的WebPart添加到首页中。看,TextBox中的内容为空。
Click here to open new windowCTRL+Mouse wheel to zoom in/out
  4、点击Button,则TextBox中的内容即变为当前时间了。
Click here to open new windowCTRL+Mouse wheel to zoom in/out
  至此,我们要达到的目的就实现了。有了这个简单复合控件的WebPart,大家就可以尝试编写其它一些复杂的WebPart了,但其基本的实现方法就是这样的。
  这篇文章中,为了简单起见,我尝试了不再讲解重复操作的方法,这样可以加快讲解新知识点的速度。不知道大家能不能适应这种改变呢?如果不能适应,我将改为以前的方法。
  在实际应用中,我们常常需要将某些记录的列表显示出来,单击某条记录后,在其它WebPart中显示记录的详细信息,那么,这样的WebPart能不能做到呢?
 

一步一步SharePoint 2007之二十七:编写两个WebPart的联动



摘要

  前面的文章中,我们编写了一个复合控件的WebPart,实现了这个后,大家就可以编写非常复杂的WebPart了。

  在实际应用中,我们常常需要将某些记录的列表显示出来,单击某条记录后,在其它WebPart中显示记录的详细信息,那么,这样的WebPart能不能做到呢?

  本篇文章将介绍如何编写两个WebPart的联动的过程。

正文

  要能实现左边列表,右边详细信息的记录显示方式,我们需要解决两个方面的问题。

  一个是如何实现列表,以及点击某一项后的事件触发;另一个是如何在一个WebPart中访问另外一个WebPart。

  这里,我就用一个列表的WebPart,以及前面我们实现过的Hello World的WebPart来举例子,要做到的就是单击List列表中的某一项,能将该项的内容显示在Hello World控件中。

  至于WebPart的基本操作,前面的文章中讲得很清楚,这里不再一一讲解操作步骤。

  为了方便您的学习,您可以下载本篇文章所创建的工程。单击此处下载。

  下面将记录每一步的操作过程。

  1、首先创建一个命名空间为Eallies.WebParts.Associated的C#的Class Library工程,并将默认的Class1.cs改名为List.cs。然后添加System.Web、System.WebParts.Hello引用,并将AssemblyInfo.cs按照前面文章中的做法更改好。

  将List.cs的代码更改为如下代码:

    1 using System;
    2 using System.Collections.Generic;
    3 using System.Text;
    4
    5 using System.Web.UI;
    6 using System.Web.UI.WebControls.WebParts;
    7 using System.Web.UI.HtmlControls;
    8
    9 using System.Collections;
   10
   11 using Eallies.WebParts.Hello;
   12
   13 namespace Eallies.WebParts.Associated
   14 {
   15     public class List : WebPart, IPostBackEventHandler
   16     {
   17         private IList _Items = new ArrayList();
   18
   19         private HtmlTableCell _HtmlTableCell = new HtmlTableCell();
   20
   21         public List()
   22         {
   23             this.GetItems();
   24         }
   25
   26         protected override void CreateChildControls()
   27         {
   28             this.Controls.Add(new LiteralControl("<table>" + "\n"));
   29             this.Controls.Add(new LiteralControl("    <tr>" + "\n"));
   30             this.Controls.Add(this._HtmlTableCell);
   31             this.Controls.Add(new LiteralControl("    </tr>" + "\n"));
   32             this.Controls.Add(new LiteralControl("</table>" + "\n"));
   33
   34             if (this.Page.IsPostBack == false) this.AddRows();
   35         }
   36
   37         protected override void OnLoad(EventArgs e)
   38         {
   39             base.OnLoad(e);
   40
   41             if (this.Page.IsPostBack == true) this.AddRows();
   42         }
   43
   44         protected override void Render(HtmlTextWriter writer)
   45         {
   46             base.Render(writer);
   47         }
   48
   49         private void GetItems()
   50         {
   51             this._Items.Add("Row 1");
   52             this._Items.Add("Row 2");
   53             this._Items.Add("Row 3");
   54             this._Items.Add("Row 4");
   55             this._Items.Add("Row 5");
   56         }
   57
   58         private void AddRows()
   59         {
   60             for (int i = 0; i < _Items.Count; i++)
   61             {
   62                 this._HtmlTableCell.Controls.Add(new LiteralControl("<table>" + "\n"));
   63                 this._HtmlTableCell.Controls.Add(new LiteralControl("    <tr>" + "\n"));
   64                 this._HtmlTableCell.Controls.Add(new LiteralControl("        <td style=\"cursor:hand\" onclick=\"" + this.Page.ClientScript.GetPostBackEventReference(this, this._Items.ToString()) + "\">" + this._Items.ToString() + "</td>" + "\n"));
   65                 this._HtmlTableCell.Controls.Add(new LiteralControl("    </tr>" + "\n"));
   66                 this._HtmlTableCell.Controls.Add(new LiteralControl("</table>" + "\n"));
   67             }
   68         }
   69
   70         #region IPostBackEventHandler Members
   71
   72         public void RaisePostBackEvent(string eventArgument)
   73         {
   74             for (int i = 0; i < WebPartManager.WebParts.Count; i++)
   75             {
   76                 if (WebPartManager.WebParts.Title == "Instance")
   77                 {
   78                     Instance instance = (Instance)WebPartManager.WebParts;
   79                     instance.Text = eventArgument;
   80                 }
   81             }
   82         }
   83
   84         #endregion
   85     }
   86 }

Click here to open new windowCTRL+Mouse wheel to zoom in/out

  2、其它步骤,如添加强名称、更改web.config、将WebPart添加到网站的WebParts列表中等,就都省了,请参照前面的文章中讲解的方法操作。
  打开网站首页,将我们刚刚编写的WebPart添加到首页中。看,List列表中有五项值,Instance中的内容为Hello World!。
Click here to open new windowCTRL+Mouse wheel to zoom in/out

  3、点击List列表中的某一项,如第二项,则Instance中的内容即变为Row 2了。
Click here to open new windowCTRL+Mouse wheel to zoom in/out

  至此,我们已经实现了两个WebPart的联动,这样的话,最常见的左边列表、右边详细信息的记录显示方法就成为现实了。
  在编写WebPart的过程中,有时候出了错误,却又不知道是什么原因,这时,找到原因的最好办法是单步调试。
一步一步SharePoint 2007之二十八:实现WebPart的单步调试

摘要

  前面的文章中,我们实现了两个WebPart的联动过程,至此,我们基本上就能编写无限复杂的WebPart了。
  在编写WebPart,尤其是非常复杂的WebPart的过程中,有时候出了错误,却又不知道是什么原因,这时,找到原因的最好办法是单步调试。
  本篇文章将介绍如何实现WebPart的单步调试的过程。
正文
  下面将记录每一步的操作过程。
  1、让我们来回忆一下我的网站的主页面。
Click here to open new windowCTRL+Mouse wheel to zoom in/out
  2、打开前面我们完成了的项目Eallies.WebParts.Associated,找到并打开List.cs文件,在需要调试的地方设置断点。

  3、从开发环境的菜单中依次选择Debug,Attach to Process。

  4、单击Attach to Process菜单项,则弹出Attach to Process对话框。
  在这里,我们选择w3wp.exe这个进程,这个进程就是SharePoint的进程。有时候这个进程使用了某个DLL,导致我们无法编译项目时,我们可以手动将这个进程终止,然后再尝试编译。

  5、附加到指定的进程上后,开发环境最上面的状态栏就标识了目前是Debug状态了。

  6、在我的网站的主页面中,点击List中的某一项,程序即运行到设置断点的地方了,这时,我们就可以按F10、F11进行单步调试了。
  为了能更方便地进行调试,前面我们提到过,最好将项目编译的输出路径更改为站点的bin目录,如C:\Inetpub\wwwroot\wss\VirtualDirectories\9001\_app_bin。

  至此,我们已经实现了WebPart的单步调试的过程。
  基本上,本系列文章至此,已经可以算是告一段落了,掌握了WebPart的技术,我们就已经可以去找一份SharePoint的工作了。如果比较幸运,成为一个比较大型团队中的一员,那么我们就可以专职负责WebPart的开发工作了。
  当然,SharePoint的知识远远不止这些。
  在实际应用中,我们常常需要将网站某些操作以邮件或其它方式通知其他人,比如,上传一个文档后,要求发送一封邮件,通知领导有新的文档上传了等等。要实现这点,我们就需要使用到SharePoint中的Event Handler。
一步一步SharePoint 2007之二十九:实现文档Event Handler(1)——启动Event Handler支持

摘要

  在实际应用中,我们常常需要将网站某些操作以邮件或其它方式通知其他人,比如,上传一个文档后,要求发送一封邮件,通知领导有新的文档上传了等等。要实现这点,我们可以使用SharePoint中的Event Handler。
  本篇文章将介绍如何实现文档Event Handler的过程。
正文
  为了更清晰地让朋友们了解实现文档Event Handler的几个步骤,本篇文章将被分割成几个小的部分,每一个部分讲解一个大的实现步骤。因此而给大家带来的阅读不便,就请海涵了
  值得注意的是,这里讲解的是实现文档Event Handler,也就是只针对文档上传、更新等的Event Handler。至于其它类型的Event Handler,将在后续的文章中陆续推出。
  另外,为了简单起见,这里笔者实现Event Handler时,没有进行发邮件、写数据库等操作,而是向C:\写了一个文件。大家可以自己尝试改成发邮件、写数据库等的方式。
  要实现Event Handler,首先必须启动Event Handler支持。
  下面将记录每一步的操作过程。
  1、首先打开SharePoint 3.0 Central Administration,然后打开Application Managerment管理页面。这些页面都是些老面孔了

  2、点击Web application settings,则进入Web Application Settings页面。
  在Web Application Settings页面中,找到Event Handlers项,并将其设置为On,然后单击Ok按钮保存设置。

  至此,启动Event Handler支持就成功了。
一步一步SharePoint 2007之三十:实现文档Event Handler(2)——编写Handler程序

摘要

  本篇文章将介绍实现文档Event Handler的第二部分——编写Handler程序。
  为了方便您的学习,您可以下载本篇文章所创建的工程。
单击此处
下载。
正文
  下面将记录每一步的操作过程。
  1、首先打开Microsoft Visual Studio 2005,创建一个Class Library的项目,取名为Eallies.EventHandler.Demo。

  2、创建项目成功后,将默认的Class1.cs改名为DocumentHandler.cs,并添加Microsoft.SharePoint.dll的引用,该DLL的具体位置在C:\Program Files\Common Files\Microsoft Shared\web server extensions\12\ISAPI。

  3、编写DocumentHandler.cs的代码,如下:

    1 using System;
    2 using System.Collections.Generic;
    3 using System.Text;
    4
    5 using Microsoft.SharePoint;
    6 using System.IO;
    7
    8 namespace Eallies.EventHandler.Demo
    9 {
   10     public class DocumentHandler : IListEventSink
   11     {
   12         public void OnEvent(SPListEvent list)
   13         {
   14             if (list.Type == SPListEventType.Insert)
   15             {
   16                 string path = @"c:\DocumentHandler.txt";
   17                 string text = "Insert" + "-" + DateTime.Now.ToString();
   18                 StreamWriter writer = new StreamWriter(path);
   19                 writer.Write(text);
   20                 writer.Close();
   21             }
   22         }
   23     }
   24 }


  4、将项目的输出目录更改为C:\Inetpub\wwwroot\wss\VirtualDirectories\9001\_app_bin。

  5、为项目创建一个强名称。

  然后就是编译项目。至此,Handler程序就编写成功了。

类别:工具使用 | 添加到搜藏 | 浏览() | 评论 (0)
 
最近读者:
 
网友评论:
发表评论:
姓 名:
网址或邮箱: (选填)
内 容:
验证码: 请点击后输入四位验证码,字母不区分大小写
      

     

©2009 Baidu