http://www.cnblogs.com/walkinhill/

SharePoint 应用的开发学习笔记(-)

Microsoft Office SharePoint Portal Server 2003 将业务流程中的人员、工作组和知识连接在一起。它将分散的信息统一起来,便于就文档、项目和其他工作进行协作,并根据用户的功能组和组织角色呈现特定应用程序和自定义内容。SharePoint Portal Server 可与 Microsoft Windows 资源管理器、Microsoft Office 应用程序和 Web 浏览器协同工作,帮助您在整个组织范围内创建、管理和共享内容。

借助于 Microsoft Windows Server 2003,SharePoint Portal Server 与 Microsoft Office 2003、Microsoft Windows SharePoint Services 和 Microsoft SQL Server 2000 SP3 集成在一起,创建将整个组织连接起来的统一门户网站。

SharePoint Portal Server 提供以下方面的解决方案:

企业集成 

管理、组织和发布内容

连接协作

用户的个人环境


在Windows 2003 Server 中提供了Windows SharePoint Service,应该说它是SharePoint Portal Server 2003的简化版本,区别主要就在于功能较少,比如说没有“My Site”,不能与Biztalk、Exchange Server 等结合使用...更详细的信息可以参考:http://www.microsoft.com/sharepoint/evaluationoverview.asp

如果你没有安装Windows 2003 Server也没有关系,你可以到 www.sharepointtrial.com 申请一个三十天的试用(对于想我这种入门级的人是够用了)。

SharePoint 本身提供了非常强大的功能,基于Web Part的概念,你可以不使用任何代码编辑软件(包括HTML代码和程序代码)构建一个非常强大的公司门户网站,实现公司、团队间的资源共享。据说微软使用SharePoint 2003 Server 搭建的系统大大提高了微软的工作效率。

但是对于程序员来说往往不会满足现有的功能,这时候你可以通过编程开发的方法来扩充SharePoint的功能,比如说你想放一个小型的日历在首页,这时仅仅通过SharePoint提供的功能很难实现,就需要自己扩充它的功能了

在了解如何扩充SharePoint之前,首先应该了解一下SharePoint 的架构:

1、SharePoint 的基础:WebPart Pages。虽然SharePoint 是基于asp.net的一个解决方案,使用的也是asp.net的web form,但是它与普通的web页面具有一定的区别,那就是SharePoint中大部分的页面都是所谓的Web部件页(WebPart Pages),WebPart Page本身继承自System.Web.UI.Page,但是与普通的Web Form不一样,不能在WebPart Page 放入服务器端代码,它的所有功能都是依赖于放置在其上的Web部件来实现。因此,WebPart Pages 实际上就是由一部分静态的HTML代码和大部分的Web部件构成。换句话说,日后你需要扩充SharePoint的功能,就是通过开发自己的Web部件来实现的(后面还将介绍Web部件的开发)。

2、WebPart(Web部件):实质为一个服务器端控件(asp.net的Web自定义控件)。一般来说自己开发的WebPart继承自:Microsoft.SharePoint.WebPartPages.WebPart,不是继承自WebControl。但是开发WebPart与开发asp.net Web自定义没有太大的区别。

2、SharePoint的对象模型。SharePoint本身包含了很多的数据,在开发自己的Web部件往往需要访问这些数据。你可以直接访问数据库,但这并不是明智的选择,因为sharePoint的数据库实在太负责。为此,SharePoint提供了另外两种方便的方法:Web Services和SharePoint 自带的对象模型。
       在新建SharePoint站点时,SharePoint服务器将自动创建一系列的Web Service供你访问SharePoint的数据。如图:


图中列出了可以访问和操作SharePoint中所有列表的方法。

但是这些方法处理起来并不是很方便,因为他们的返回值一般都是 XMLNode,这里包含了很多内容,你还需要特殊处理才能得到所需的结果。

使用SharePoint自身的对象模型是最简单的方法。

可用对象模型实现的功能:
1从 WSS 列表增添, 修改, 删除, 获取数据
2建立新的列表和设置列表参数 (比如建立 域 field)
3设置网站参数
4修改文档库内的文档
5进行管理工作,如创建网站,添加用户,建立用户组, 等
6 几乎 UI 内的所有功能都能用 OM 来 Automate

下面是一段代码:

SPWeb web = SPControl.GetContextWeb(Context);
   
 SPList tasks = web.Lists["Tasks"];
 SPListItemCollection items=tasks.Items;
 foreach(SPListItem item in items)
 {
 output.Write(item["Title"].ToString() + item["Status"].ToString() + "<br>");
 }
这段代码访问当前SharePoint站点的任务列表。

通过该对象模型几乎可以完成所有的工作。

后面的文章介绍一下Web Part的开发和该对象模型的具体使用。

先给出一点学习的资料:
视频资料:http://www.microsoft.com/china/office/sharepoint/prodinfo/videos.mspx
示例代码和视频资料:http://www.sharepointcustomization.com
msdn的SharePoint专栏:http://msdn.microsoft.com/library/default.asp?url=/library/en-us/spptsdk/html/CreateABasicWP.asp?frame=true


SharePoint 应用的开发学习笔记(二)

使用Visual Studio.NET 开发Web Parts(Web部件)

对SharePoint进行扩充的一个最好的方法就是开发自己的Web部件,但是在开发Web部件之前首先要下载Web Part Templates for Visual Studio .NET:(http://www.microsoft.com/downloads/details.aspx?FamilyId=14D5D92F-C3A6-407C-AAD7-B8C41A4991BE&displaylang=en)。

Web部件与普通的asp.net自定义控件没有什么区别,如果你具有开发asp.net自定义控件的经验的话,开发Web部件就轻车熟路了。
下面是我自己开发的一个很简单的Web部件,如图右下角的SimpleWebPart(实现了简单的加法运算):



using System;
using System.ComponentModel;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Xml.Serialization;
using Microsoft.SharePoint;
using Microsoft.SharePoint.Utilities;
using Microsoft.SharePoint.WebPartPages;

namespace MyWebParts
{
 /// <summary>
 /// Description for WebPart1.
 /// </summary>
 [DefaultProperty("Text"),
  ToolboxData("<{0}:WebPart1 runat=server></{0}:SimpleWebPart>"),
  XmlRoot(Namespace="MyWebParts")]
 public class SimpleWebPart : Microsoft.SharePoint.WebPartPages.WebPart
 {
  protected TextBox txtValue1;
  protected TextBox txtValue2;
  protected TextBox txtResult;

  protected Label lblOp;
  protected Label lblEq;  
  protected Button btnCalc;

  //private const string defaultText = "";

  //private string text = defaultText;

//  [Browsable(true),
//   Category("Miscellaneous"),
//   DefaultValue(defaultText),
//   WebPartStorage(Storage.Personal),
//   FriendlyName("Text"),
//   Description("Text Property")]
//  public string Text
//  {
//   get
//   {
//    return text;
//   }
//
//   set
//   {
//    text = value;
//   }
//  }
  
  private bool calcEnabled = true;
  [Browsable(true),
   Description("是否启用计算功能!"),
   WebPartStorage(Storage.Personal),
   FriendlyName("允许计算"),
   DefaultValue(true),
   Category("自定义")
  ]
  public bool CalcEnabled
  {
   get
   {
    return calcEnabled;
   }
   set
   {
    calcEnabled = value;
    if( this.btnCalc != null )
    {
     this.btnCalc.Enabled = value;
    }
   }
  }
  /// <summary>
  /// This method gets the custom tool parts for this Web Part by overriding the
  /// GetToolParts method of the WebPart base class. You must implement
  /// custom tool parts in a separate class that derives from
  /// Microsoft.SharePoint.WebPartPages.ToolPart.
  /// </summary>
  ///<returns>An array of references to ToolPart objects.</returns>
//  public override ToolPart[] GetToolParts()
//  {
//   ToolPart[] toolparts = new ToolPart[2];
//   WebPartToolPart wptp = new WebPartToolPart();   
//   CustomPropertyToolPart custom = new CustomPropertyToolPart();
//   custom.Expand("自定义");
//   toolparts[0] = custom;
//   toolparts[1] = wptp;   
//   return toolparts;
//  }
  
  /// <summary>
  /// Render this Web Part to the output parameter specified.
  /// </summary>
  /// <param name="output"> The HTML writer to write out to </param>
  protected override void RenderWebPart(HtmlTextWriter output)
  {
   //output.Write(SPEncode.HtmlEncode(Text));
   EnsureChildControls();
   output.RenderBeginTag("div");
   //RenderChildren(output);
   this.txtValue1.RenderControl(output);
   output.AddStyleAttribute(HtmlTextWriterStyle.FontWeight,"bold");
   output.RenderBeginTag("span");
   this.lblOp.RenderControl(output);
   output.RenderEndTag();  //span
   
   this.txtValue2.RenderControl(output);
   
   this.lblEq.RenderControl(output);

   this.txtResult.RenderControl(output);
   this.btnCalc.RenderControl(output);

   output.RenderEndTag(); //div
   
  }
  protected override void CreateChildControls()
  {
   //初始化文本框
   txtValue1 = new TextBox();
   txtValue2 = new TextBox();
   txtValue1.Text = "1";
   txtValue2.Text = "2";

   lblOp = new Label();
   lblOp.Text = " + ";
   lblEq = new Label();
   lblEq.Text = " = ";
   txtResult = new TextBox();
   txtResult.ReadOnly = true;
   btnCalc = new Button();
   btnCalc.Text = "Calculate";
   btnCalc.Click += new EventHandler(btnCalc_Click);
   btnCalc.Enabled = calcEnabled;
   Controls.Add(txtValue1);
   Controls.Add(lblOp);
   Controls.Add(txtValue2);
   Controls.Add(lblEq);
   Controls.Add(txtResult);
   Controls.Add(btnCalc);  
   
   base.CreateChildControls ();
  }

  public void btnCalc_Click(object sender,System.EventArgs e)
  {
   if( txtValue1.Text.Trim().Length > 0 && txtValue2.Text.Trim().Length > 0 )
   {
    this.txtResult.Text = Convert.ToString(Convert.ToDouble(txtValue1.Text) + Convert.ToDouble(txtValue2.Text));
   }
  }

 }
}

从上面的代码可以看出,一般来说自定义的WebPart 都继承自Microsoft.SharePoint.WebPartPages.WebPart,而不是继承自WebControl。

详细的可以参考:http://msdn.microsoft.com/library/default.asp?url=/library/en-us/spptsdk/html/CreateABasicWP.asp

posted on 2004-10-16 02:24  mmneo  阅读(705)  评论(0)    收藏  举报