codeplex

June 19, 2009

http://features.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=2502

Removal tool to fix .NET Framework install failures

June 19, 2009

http://blogs.msdn.com/astebner/archive/2005/04/08/406671.aspx

tips

June 18, 2009

http://www.andrewconnell.com/blog/archive/2006/08/21/3882.aspx

在SharePoint Server 2007中创建定制的用户管理模块

June 17, 2009

在SharePoint Portal Server 2003的时代,它被说得最多的一个问题就是其用户系统必须使用Active Directory,我们必须在域里面为用户创建相应的AD账号,然后才能将AD账号添加为SharePoint站点用户。如果企业已经部署了AD,那么这不会是一个多大的问题(反而会成为其一个优点),但是对于没有部署AD的企业,或者要将SharePoint站点发布到Internet上的场景,这就是一个不小的问题了。

幸好SharePoint Server 2007中已经完全支持定制的用户管理模块,它使用了ASP.NET 2.0的Membership Provider机制来作为其用户管理的底层机制,这样就带给了我们非常大的灵活性。假如在企业中已经存在了一套用户认证系统(比如某某LDAP服务器,或者某某OA系统),那么我们可以很容易的让SharePoint Server 2007使用同一套用户认证系统,这样,SharePoint Server 2007本身不必要存储用户的信息。当然,通过Membership Provider机制,你也可以将用户名和密码保存在某一个数据源中(比如SQL Server数据库)。

首先,我们要用Visual Studio 2005编写一个定制的Membership Provider,方法我就不多说了,MSDN和网络上都有足够详细的文档来描述如何创建一个Membership Provider。你要做的仅仅是创建一个普通的类,然后让它继承自System.Web.Security.MembershipProvider,然后再实现所有需要实现的方法即可。实际上,SharePoint Server 2007并不会使用每一个方法,如果我记得没错的话,它主要调用的方法包括:FindUsersByName(), GetAllUsers(), GetUser(), ValidateUser()等。

为了说明问题,配合演示,我编写了一个最简单的TextFileMembershipProvider,将编译得到的程序集部署到服务器的GAC中。TextFileMembershipProvider从一个文本文件中得到用户的用户名和密码信息,这个文本文件就如下图所示:

然后打开要使用这个TextFileMembershipProvider的SharePoint站点集所对应的IIS网站的磁盘根目录下的web.config文件,在“”节点下面添加相应的MemberShip节点:

然后打开“SharePoint 3.0管理中心”所对应IIS网站的磁盘根目录下的web.config文件,如上面所说的再做一遍。

看到这里,你可能要犯嘀咕了,在SharePoint站点集的web.config上添加这个membership说明嘛,还有些道理,因为我们要在这个站点集上使用这个定制的用户管理模块嘛,但是对“SharePoint 3.0管理中心”这个站点的web.config下手又有和用意呢?简单说来这是因为,我们必须要让“SharePoint 3.0管理中心”这个站点也能够识别TextFileMembershipProvider所提供的用户信息,后面有这么做的详细理由。

执行一下iisreset之后,用IE打开“SharePoint 3.0管理中心”,然后在“应用程序管理”中找到“验证提供程序”,点击进去,然后更改上方的“Web应用程序”为我们希望使用TextFileMembershipProvider的SharePoint站点集所使用的Web应用程序,然后点击页面上的“默认”链接,在出现的更改页面中输入我们想要这个Web应用程序使用的MembershipProvider的名字,同时将验证类型改成表单验证(Forms验证),确定即可。

改完之后,验证提供程序配置界面中就会显示我们的Web应用程序使用的,是“TextFileMembershipProvider”啦。

现在,那个想定制的SharePoint站点已经使用我们编写的TextFileMembershipProvider了,但是,我们会遇到一个问题,如果我们现在去访问那个站点,那么那个站点会要求我们登录,但是由于到现在为止,TextFileMembershipProvider能够提供的任何一个用户都不是那个站点的用户,也就说在那个SharePoint站点中没有任何权限,所以我们总是不能登录到那个SharePoint站点中。

解决这个问题的方法,就是在管理中心的“Web应用程序的策略”中,配置一个TextFileMembershipProvider能提供的用户对那个SharePoint站点具有完全控制的权限,然后我们就可以使用那个用户登录到SharePoint站点中了。顺便说一下,“Web应用程序的策略”中配置的用户权限信息,具有最大的优先权。

在管理中心里面打开“应用程序管理”页面上的“Web应用程序的策略”链接,然后点击“添加用户”,选对要定制的Web应用程序,然后在下面的选择区域下拉框中选中“默认”,“下一步”。

在“用户”文本框中输入通过TextFileMembershipProvider能够获取一个用户名,然后点击一下下面的“检查名称”,如果配置没有问题,这时SharePoint Server 2007是能够通过TextFileMembershipProvider来确认这个用户的信息的(这也就是我们需要在“SharePoint 3.0管理中心”的web.config中也加上“TextFileMembershipProvider”配置项的原因,否则在这里,“SharePoint 3.0管理中心”不会认通过“TextFileMembershipProvider”提供的用户),然后选中页面下方的“完全控制”,“完成”。

现在,我们就可以访问要定制的SharePoint站点了,由于它被配置为使用表单验证,所以当我们访问它时,会自动被引导到一个登录页面。如果没有看到下面的登录页面,确认一下SharePoint站点的web.config文件中有如下的配置项:

填入正确的用户名和密码(在我的这个演示里面,就是那个文本文件中的用户信息,呵呵),然后就可以登录到SharePoint站点中了。

接着,你就可以到SharePoint站点的站点设置的用户管理里面,为这个站点添加更多的用户了。

怎么样,是不是很容易呢?创建定制的用户组管理模块的方法和这一样,为它编写一个定制的RoleProvider,然后在web.config中添加相应的配置项即可。

MOSS 2007基础

June 17, 2009

MOSS 2007基础:开发自定义WebPartZDNet软件频道2007-10-31作者: | SunmoonfireBLOG
本文关键词:SharePoint WebPart MOSS 2007 MOSS
本文将介绍创建ASP风格的WebPart。最简单的步骤为创建一个类继承自System.Web.UI.WebControls.WebPart类,覆盖(override)方法RenderContents。如果您想要继续为WebPart增加属性(property),可以使用在ASP.NET中相同的办法。如下面的代码显示了一个登录后的用户名。本例假设Visual Studio 2005,Microsoft Office SharePoint Server(MOSS) 2007和WSS v3安装在同一台机器上。

  1、首先,打开Visual Studio 2005.

  我们将使用类库项目来创建ASP风格的WebPart。点击文件–〉新建项目。在项目类型中选择Visual C#,模板中选类库(Class Library)。在名称出输入TestWebParts。选择合适的保存路径。完成后点击确定。

  2、添加对System.Web.dll的引用

  在Solution Explorer中右键点击引用(References),选择添加引用 。

  选择.NET标签下的System.Web,将其添加到引用。

  3、添加必须的命名空间

  添加下面的命名空间

  using System.Web;

  using System.Web.UI;

  using System.Web.UI.WebControls;

  using System.Web.UI.WebControls.WebParts;

  4、继承自类System.Web .UI.WebControls.WebPart

  将Class1.cs重命名为SimpleWebPart,并添加继承System.Web.UI.WebControls.WebParts来创建ASP风格的WebPart。代码如下:

  

  using System;

  using System.Collections.Generic;

  using System.Text;

  using System.Web.UI;

  using System.Web.UI.WebControls.WebParts;

  namespace TestWebParts

  {

  public class SimpleWebPart:WebPart

  {

  protected override void RenderContents(HtmlTextWriter writer)

  {

  writer.Write(this.Context.User.Identity.Name);

  }

  }

  }

  

  我们必须重写RenderContents方法。如上所示。RenderContents方法将根据其参数writer所指定的内容来展示WebPart。writer参数是一个HtmlTextWriter,用于描述将要显示到客户端浏览器中的HTML内容。

  如果我们的WebPart中包含有子控件,我们还需要在这里调用基类的RenderContents方法或者在我们想要显示子控件的地方调用基类的RenderChildren方法,将子控件的内容输出到writer。

  上面的WebPart定义说明该代码并不依赖于Microsoft.SharePoint.dll。所以它既可以被用在ASP.NET应用程序中,也可以用在WSS v3站点。不过在大多数情况下,我们还是要在自定义WebPart中添加对Microsoft.SharePoint.dll的引用,因为这样就可以使用WSS v3提供的对象模型了。

  除支持ASP风格的WebPart外,WSS v3同时被设计为可以支持WSS v2环境下创建的WebPart。旧的WSS风格WebPart继承自Microsoft.SharePoint.dll中的WebPart基类,它是定义在Microsoft.SharePoint.WebPartPages命名空间下的。

  在WSS v2中的Microsoft.SharePoint.dll的WebPart类是继承自ASP.NET的Control类。如下图所示。

  但是,同时我们也可以看到,WSS v3中Microsoft.SharePoint.dll的WebPart类被修改为继承自ASP.NET的WebPart类。这种将一个组件的基类改为较新的版本的技术(versioning technique)就是rebasing。对Microsoft.SharePoint.dll中的WebPart类的rebasing是使WSS v3环境支持老的WSS风格WebPart的关键。

  如果查看一个WSS v3应用程序里的标准的Web.config文件,我们将发现里面包括了重新定向WSS v2的Microsoft.SharePoint.dll到WSS v3版的Microsoft.SharePoint.dll的配置元素。这个重定向与上面所说的rebasing配合起来共同保障了WSS v2环境下所写的WebPart的Dll运行在WSS v3环境中,而不必做任何的改动。

  因此,如果我们想要将一个WSS v2的WebPart项目转移到Visual Studio 2005中,我们可以使用与从前相同的方式继续扩充我们的代码,还是可以继续运行。同时,在转移到Visual Studio 2005时,我们还可以选择将项目中对Microsoft.SharePoint.dll的引用切换到WSS v3的版本。这样,该项目的WebPart就会转到上图右侧的WSS v3体系中。

MOSS 2007基础:部署自定义WebPart

June 17, 2009

http://soft.zdnet.com.cn/software_zone/2007/1031/595616.shtml

在Webpart中以Post方式提交数据到SharePoint站点

June 17, 2009

在Webpart中以Post方式提交数据到SharePoint站点ZDNet软件频道2007-10-31作者:雪叶丹枫 |
本文关键词:Microsoft 数据库 数据 SharePoint WebPart
因为我通常都是配合UserControl来开发复杂的WebPart的,所以这里指的是包装在WebPart中的UserControl如何以Post方式提交数据到SharePoint数据库。

WSS站点默认不支持WEB应用程序通过POST的方法更新数据库数据,需要在Web应用程序中加入安全较验信息,这类安全较验信息包含两个不同的安全层次:为更新单个站点或站点集的安全较验、为更新网站所在虚拟服务器或WSS设置的安全较验。
第一种安全较验通常是应用程序更新站点中的业务数据时需要使用的安全较验,添加方法如下:

1 在ASPX页面头部加入以下申明(请注意该代码段必须在同一行上,否则编译器较验出错

2 在ASPX页面中为要提交的数据加入FormDigest较验控件,添加后的表单类似:

添加后ASPX页面有时候会出现不能进行可视化设计(原因未知),可以在加入FormDigest之前将页面部局设计好。

3 客户端请求带有验证控件的网页时,服务端为该请求生成HTML页面,同时在页面中加入安全较验信息,当客户端提交数据时,服务端较验安全信息,如果没有修改则不会触发异常,否则触发异常停止执行程序。

4 如果后台代码是执行SharePoint网站的管理任务,则需要更高的权限,做法是在CodeBehind文件中加入以下代码

SPGlobalAdmin globalAdmin = new SPGlobalAdmin(); Context.Items[SPGlobalAdmin.RequestFromAdminPort] = true; Page.RegisterHiddenField(“__REQUESTDIGEST”, globalAdmin.AdminFormDigest);

如何在WebPart中访问页面上的其他WebPartZDNet

June 17, 2009

SharePoint,如何在WebPart中访问页面上的其他WebPartZDNet软件频道2007-10-31作者:kaneboy |
本文关键词:WebPart SharePoint
今天在和朋友讨论一个老外写的WebPart的时候,发现那个WebPart获取页面上的其他WebPart信息时,并不是通过标准的WebPart Connection,而是直接用代码来得到页面上另外那个WebPart的实例对象,然后通过获得此WebPart对象属性的值,来获得所需信息的。

SharePoint的Object Model其实提供了很完整的方法,让我们的代码可以直接获取任何页面上的所有WebPart的信息,所以在这里向大家简要介绍一下如何通过代码来访问页面上的WebPart。

示范代码如下:

SPWeb web = SPControl.GetContextWeb(this.Context); SPWebPartCollection WebParts = web.GetWebPartCollection(“default.aspx”, Storage.Shared);
上面的两行代码,就获得了“default.aspx”这个页面上的所有WebPart集合。SPWebPartCollection这个对象拥有例如“Add()”、“Delete()”等方法,能够让我们直接用代码把WebPart添加到页面上,或者从页面上把WebPart删除。

foreach (WebPart wp in WebParts) { String sTitle = wp.Title; }
上面的代码遍历所有的WebPart,每一个WebPart都是一个类型为“WebPart”(不是SPWebPart哦,呵呵)的对象,然后,通过访问这个对象的属性值,就能轻松获取某个WebPart的信息了。我们还能在代码中直接修改某个WebPart的属性值,但是修改以后,记得调用SPWebPartCollection对象的SaveChanges()方法,把修改的内容保存下来。

下面的图片是我做的一个Demo WebPart,在填入一个页面的URL后,它能够把此页面上所有的WebPart列出来,并显示选中的WebPart的所有属性。

1

将你的Asp.NET应用程序嵌入到SharePoint

June 17, 2009

将你的Asp.NET应用程序嵌入到SharePointZDNet软件频道2007-11-03作者: | cnblogs
本文关键词:程序 .NET ASP SharePoint
为什么要将ASP.NET应用程序嵌入到SharePoint?这个我们不讨论!我们将要讨论的是如何将ASP.NET应用程序嵌入到SharePoint,以及其中可能会遇到的问题。

正文开始:

我们这里是建立了一个Web应用程序里面有一个Demo.ASPx页,代码如下:

namespace WebInMOSS

{

public partial class _Demo: System.Web.UI.Page

{

protected void Page_Load(object sender, EventArgs e)

{

Response.Write(“Web Can In Moss”);

}

}

}

将此程序编译,生成一个WebInMOSS.dll文件,将此dll拷贝到网站目录下bin文件夹,增加节点:

然后将Demo.ASPx页面放入MOSS中。放入方式你可以选择使用SPD,或者直接上传文档库。我们这里放入”Pages”中。

在MOSS中浏览pages/Demo.ASPx,

是否删除autoeventwireup就可以了呢?的确,在删除AutoEventWireup=”true”后

页面显示Web Can In Moss,证明执行成功。

增加web应用程序复杂度,在Demo.ASPx放入一个button ,其事件如下:

protected void Button3_Click(object sender, EventArgs e)

{

SPSite siteCollection = new SPSite(“http://xuwei:8080”);

SPWeb site = siteCollection.OpenWeb(“/Docs/”);

SPList list = site.Lists[“通知”];

SPListItemCollection items = list.Items;

foreach (SPListItem item in items)

{

Response.Write(“
“);

Response.Write(item[“Title”].ToString());

}

}

在VS2005中调试得出结果(各位看客请先忽略write session和read session 2个button):

将重新编译后的程序dll,Demo.ASPx按前面方式放入MOSS中。重新浏览

此时又出现Onclick事件不能使用,如何是好?我们必须启动MOSS的安全模式才能执行服务器端事件。操作如下:

我们找到Web.config 文件的节点,在

节点下增加一个虚拟路径

声明此站点下所有文件允许服务器端事件,当然你也可以制定虚拟目录是那个文件夹,但是这个值 必须以 ~/ 或 / 开头,并且必须以文件名或 * 结尾。

保存Demo.ASPx后浏览页面,能够正常显示,点击listobject button(各位看客请先忽略write session和read session 2个button),OK,正常执行显示了!

再次增加web应用程序复杂度,加入Session,(在MOSS开发中不管采取那种方式,只要是和自己的程序相集成,总会碰到Session的问题)。

代码如下:

protected void Button1_Click(object sender, EventArgs e)

{

Session[“Count”] = “1”;

}

protected void Button2_Click(object sender, EventArgs e)

{

if (Session[“Count”] != null)

{

Response.Write(“
“+Session[“Count”].ToString()+”“);

}

}

编译保存后再次浏览页面,点击listobject button能够正常显示结果,可是当点击 Write Session时,出现

这个提示出现得够霸气!天晓得是什么意外错误!我试图修改让MOSS显示出错误信息,但是失败。查找Log文件也没有

发现什么踪迹,还好 一开始就预计到Session可能会出现问题,检查Web.config发现

呵呵,Session默认处于关闭状态,当然无法正常执行。将其设置为 true后保存。浏览demo.ASPx页面,点击write session 和read Session,能够正常执行。

总算一些重要的问题能够解决了!如果再遇到其他问题,我们继续讨论!

将你的Asp.NET应用程序嵌入到SharePoint(续)

June 17, 2009

这次遇到的问题是如何将带User Control的Web应用程序签入到MOSS。

在将一个带User Control的应用程序嵌入到MOSS时,浏览页面出现

处理 MenuFrame.ASPx 时出现错误。此页中不允许使用引用的文件” Department/DeptTree.ascx”。 Windows SharePoint Services 疑难解答。

又是一头雾水,难道MOSS不允许使用User Control么??难道只能使用Web part封装出来?要是封装

Web Part的话,我的Web应用程序改动就太大了。回想以前在做Custom Action的时侯修改过一个User Control,

那么在MOSS中就应该能够直接使用User Control的啊!在Web.Config里面搜索了半天,终于发现,有个节点

Controltemplates 不正是我当初修改MOSS usercontrols所在的位置么?看到此节点突然心中燃起了希望,对,就是此节点了,

于是赶紧Copy此节点,修改 Src为自己Web应用程序User Control所在的目录,保存Web.Config.重新浏览页面,Good!包含

User Control的 页面可以使用了!测试一下,参数传递,数据库链接,属性赋值,都没有问题。呵呵,又 解决了一个问题

如果再遇到其他问题,我们继续讨论!