RSS

Monthly Archives: 十一月 2007

自定义列表字段类型(2)

从这次开始,将逐步介绍如何创建一个自定义字段类型,以及通过什么样的手段来完成我们需要的功能。

随着例子从简单到复杂,所涉及的内容也有所增长,所以大致的计划流程是这样的:字段类型、xml描述文件、输入控件、值类型、自定义属性控件、自定义属性bug的解决方案、(自定义字段间的通信),大概先分为这几期吧(看来是一个任重而道远的工程……)

那么本期先通过一个最简单的自定义字段类型的例子,来看一下如何创建自定义字段类型中的字段类。

在这个例子中,我们将编写一个Email地址的字段,它可以完成Email地址的合法性验证。

首先,自定义字段类型在SharePoint Extension for Visual Studio 2005里其实是有模板的,但是我们在创建一个项目的时候却看不到它,其实它的创建流程是这样的:

先创建一个空的SharePoint解决方案:

image

然后在新建一个Item的时候,在可选的模板中就能够看到一个“Field Control”了,选择它:

image

点确定之后,我们会发现模板为我们创建出了两个文件,xxx.Field.cs和xxx.FieldControl.cs,这两个文件分别定义了字段的类和字段的输入控件。并且自动生成了一个强命名的key,使得我们可以把编译得到的dll放到GAC中。这次主要对字段类进行介绍。

在上上次中介绍过SharePoint的内置的字段类型,每一个字段类型都有自己的类(例如单行文本对应SPFieldText),这些类全部都是SPField的子类。所以,当我们编写一个自己的字段类型的时候,也需要让这个字段类型是SPField的子类,这样才能够完成字段类型的功能。但实际上,我们往往并不需要直接继承SPField,而是找一个与我们所需要的功能最接近的字段类型继承它,这样的优点就是我们可以使用这种内置字段类型的一些特殊属性(比如单行文本中的最长字符数限制等),并且能够使用内置字段类型的默认输入界面,另一个优点就是如果要直接继承SPField,要多写一个东西(但是我忘了是什么了……汗……)。

在这个例子中,Email地址的输入和单行文本非常类似,于是我们继承SPFieldText。

好,可能有人会发现了,默认由模板创建出来的这个项目中它就是继承了SPFieldText的,在我们继续之前,不妨先来看一看这默认生成的代码中都有什么东西。

我们已经看到默认的模板创建出来了Field类和FieldControl类,并且Field类继承了SPFieldText,也就是单行文本。然后在这个Field类中,我们还可以看到如下两大部分内容:

第一部分:构造函数

public EmailFieldField(SPFieldCollection fields, string fieldName)
  : base(fields, fieldName)
{
}

public EmailFieldField(SPFieldCollection fields, string typeName, string displayName)
  : base(fields, typeName, displayName)
{
}

SPFieldText并不支持不带参数的默认构造函数,所以要重载这两种构造函数,而这两种构造函数也是SPField所使用的,默认情况下直接使用相同的参数调用父类的构造函数。通过Reflector我们可以看到,在SPField的这两种构造函数中都是根据参数设置了一些初始值。因此,如果需要有一些特殊的初始值要设置,我们可以放在这个构造函数中,例如如果我们希望这个Email地址栏只在新建界面中出现,而不让用户在默认界面上修改它,我们可以在构造函数中添加:

this.ShowInEditForm = false;

我们对这两个构造函数的修改一般也仅限于此类操作了。(其实我们几乎很少需要手动去调用Field系列的构造函数,在创建一个字段时我们往往使用的是SPFieldCollection的Add方法或者AddLookup方法)

在一个自定义的字段类型中,这个构造函数是字段类唯一一个必须重载的地方,其他内容都可以不写(当然如果你其他内容都不写的话,这个字段比起它的父类来说,无非就是多了一些初始值——当你需要这么做的时候,你就可以很简单地这么干来创建一种新的字段类型。。。)

第二部分:关联的控件

在默认生成的代码中,重载了SPFieldText的一个属性叫做FieldRenderingControl。顾名思义,这个只读属性是用来返回与此字段相关联的显示/输入控件的。这部分内容我们放在下下次的内容做介绍。

在这个Email地址的例子中,我们可以直接使用SPFieldText字段类型的默认输入控件(至于显示我们可以放到xml里来定义),因此我们无需重载它,把它删掉好了(同时也可以把那个xxxx.FieldControl.cs也删掉,而且它其实就是空的……)

既然是自定义字段类型,那么必然和默认的单行文本要有所区别,在这个例子中,我们所提供的额外功能就是Email地址的验证,于是我们就需要:

第三部分:数据验证

数据验证功能一般来说都是放在输入界面里做的,但是其实我们也可以把类似的功能放到字段类中(因为我们使用的是默认输入界面)。

在SPField中,有这样一个方法我们可以重载:

public override string GetValidatedString(object value)

这个方法的目的就是根据这个字段的值(object),返回一个通过验证的字符串。其主要目的第一在于验证数据,第二在于做数据串行化(Serialization),把数据值都转换成字符串。这个方法在每次提交值的时候都会执行到,所以可以用来进行数据验证。

在重载这个方法的时候,一般我们都先需要判断一下数据是否为空,然后再做真正的自定义的数据校验。如果在校验过程中发现了不合法的数据,我们需要使用一个特殊的Exception类:SPFieldValidationException。这个异常的表现形式就是我们在填错什么东西时,字段输入控件下面会出现的那行红字。

在这个例子中,我们使用正则表达式来验证Email地址,整个函数的函数体如下:

public override string GetValidatedString(object value)
{
    if (Required && (value == null || value.ToString() == ""))
    throw new SPFieldValidationException(SPResource.GetString(Strings.MissingRequiredField));

    // Validate email format
    string emailRE = @"^([\w-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([\w-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$";
    if (!Regex.IsMatch(value.ToString(), emailRE))
        throw new SPFieldValidationException("Invalid Email Address.");

    if (value == null)
        return string.Empty;
    else
        return value.ToString();
}

这个例子写到现在,功能已经完成了,这就是最简单的一个自定义字段类型的开发。当然到现在我们还不能用它,还需要写一个xml描述文件,放在下次介绍。

那么在这个字段类中,我们通常还可以写哪些内容呢?

第四部分:自定义属性

每个字段类型都有它自己特殊的一些属性,我们称之为自定义字段属性(比如单行文本的最大长度、数字的最大值最小值这样的)。

在SDK中编写自定义属性的方法中,并不需要在字段类中加什么内容,但由于那个bug的存在,在两种解决方案中,都需要在字段类中加上自己的属性。有关这一部分,也等到专门自定义属性的时候再说。

第五部分:获取字段值

在SPField中,获取一个字段的值通常有多种手段,完成不同的用途。例如刚刚介绍过的那个GetValidatedString。

有时为了完成其他一些用途,或者和我们其他的一些代码配合,可能需要重载这些方法,它们有:

public object GetFieldValue(string value)

——根据字符串的值获得真正的值类型(简单类型如double,复杂类型如SPFieldxxxxValue),可以把它理解为反串行化的过程。

public string GetFieldValueAsText(object value)

——根据值得到文本,与GetValidatedString方法不同,这个方法并不是总被执行,它主要还是用于显示。

public string GetFieldValueAsHtml(object value)

——和上面的方法类似,只不过是用Html的格式来显示,这两个方法已经在(0)里面提到过了。

public string GetFieldValueForEdit(object value)

——在编辑时获取一个字符串,其实这是一个有点奇怪的方法,因为后面我们在介绍输入控件的时候,一般都是用object作为Value的。难道Edit时的value会和一般的value不同么?我发现这个方法的重载是在SPFieldNumber里,当它设置为用百分比显示时,想一想编辑时填的值和真正的值有什么区别(30% vs 0.3),就可以理解它的意义了。

上面这些方法就不再一一进行介绍了,有兴趣的可以用Reflector看一看Microsoft.SharePoint.dll中,内置的那些字段类型是怎么写的,会有很大的帮助。

第六部分:其他

其实,上面的那些内容除了自定义属性之外,都是来自SPField的属性或者方法,当然我们也可以根据需要重写它的其他属性和方法。也可以写自己的……

言归正传,我们已经写了一个最简单的Email地址字段类,那么怎么样使用和部署?用什么方式对它进行描述?请看下期……

(未完待续)

 

Posted by on 2007 年 11 月 29 日 in 未分类

Leave a comment

SharePoint Sketch 主题发布!

哈哈,玩笑玩笑。话说这是我很久以来非常非常想做的一件事情,嗯嗯。

图来啦!懒得搞彩色背景了,直接灰度算了……至于字体,那当然是老徐体,嗯。

SharePoint_Sketch

 

Posted by on 2007 年 11 月 26 日 in 未分类

Leave a comment

Tags:

自定义列表字段类型(1)

从这一节开始正式涉及到自定义字段类型的内容,嗯……不过这次还是没有代码

本次主要介绍一下自定义列表字段类型的大致内容,用途和缺点,以及大概的体系

上一次说到了SharePoint本身内置了很多种字段类型(其实还有更多,只不过我们没办法自己用罢了,都是系统默认的,比如Counter、File之类),这些字段类型虽然已经比2003时代要丰富而且功能强大了很多,但是有时依然不能满足我们的需求。例如如果你想做一个Email地址栏,你当然可以选择使用单行文本,但是一个好的Email地址输入是可以进行合法性验证的,单行文本却不行;又比如你想做更强大的输入界面,比如评分(现在SharePoint中已经有一个类似的东西了,RatingScale,但是遗憾地它只能用在调查列表中),你希望能把它做成youtube那样的效果;再比如你要做一个能够带有自动判重功能的输入栏……

自定义字段类型是一个很能激发我们想像力的东西,比如我们可以把一个字段类型当做一个按钮,它本身可以不存任何数据,只是在输入界面中根据其它字段来判断一些东西(比如我有两个时间类型的字段分别存放会议开始时间和结束时间,然后我可以做这么一个“按钮”字段,以便在输入的时候就可以判断有没有与此冲突的会议时间——这往往比使用Event Handler更加人性化一些,因为那是在提交后才判断的)。最近越来越发现自定义字段的强大,甚至有一种机制可以让不同字段之间进行交互,今天侯同学刚发现的这一点,大概试了试原理,还没用到字段类型上,等试出来了再说。

好了,言归正传,自定义字段类型主要解决的是以下问题:

  • 更复杂的输入、显示界面
  • 自定义的合法性判断检测
  • 更复杂的逻辑
  • 其他一些默认字段所无法完成的功能

举一些例子:

  • 地址。我们在网上购物的过程中填写地址时,经常会发现它分成了几个不同的部分让我们输入,比如省、市、区、街道、邮编等等。那么如果使用SharePoint默认功能的话,我们只能把这些分别存在一些栏中,这显然不好。自定义列表字段就可以把它们存在一个栏中,但是可以分别输入各个部分。(事实上,Todd的USAddress这个字段类型也是我见过的第一个自定义字段类型)
  • Email地址。如上所述,可以使用正则表达式加上一些合法性验证。
  • 评分。更加人性化的输入和输出,让用户使用时不在是只和枯燥的数字打交道。
  • 外部数据查阅。虽然默认有了BDC查阅和查阅项,但是有时我们可能会需要更灵活些的查阅,比如跨网站查阅列表内容(还记得么?这是2007支持的功能!但是并没有体现在默认界面上罢了)

当然,自定义字段类型并不是万能的,它有着这样那样的局限,而且其中很多都非常诡异:

  • 首先,自定义列表字段是不被office系列的客户端支持的。也就是说,我们觉得很好用的那个“文档信息面板”是不支持自定义字段类型的。我们在文档库中添加一个自定义列表字段时,甚至都会出现这样的提示:

image

如果你不记得什么是“文档信息面板”的话,喏(在线创建一篇文档时):

image

  • 其次,非常奇怪的,自定义字段类型中的值不能超过255个字符(即使你继承了多行文本也不行!),就“好像”它们都是从单行文本衍生出来似的(我们知道单行文本的最大长度就是255)。这是一个老外发现的,非常没道理的一个限制,那个老外最后用的方法是继承了多选这种字段类型,这样就可以多放几个255字符了,虽然选项数也是有限制的……
  • 另外,现在的自定义字段类型有一个很严重的bug,就是按照标准的编程方法(我指的是SDK里写的方法),它无法保存自定义的属性(每个字段类型都有些独特的属性,比如数值型中的最大值、最小值)。当然,这并不意味着我们就不能保存自定义属性,有一些解决方案去使用它(其中一种阳春白雪,从SharePoint存储自定义属性的原理入手,但是这个改起来超级麻烦;另外一种是我发明的,虽然看起来很丑陋,但事实证明有效且简单),我在后面会讲到具体怎么做。
  • 最后,我们开发人员最关注的就是,这个东西开发起来比较繁琐,尤其当你有很多需求要加进去时。虽然它并没有workflow那么深奥,但由于涉及到的东西比较多,所以还是有点难度的。还是Web部件和Event Handler容易啊……感叹一下。每次我讲自定义列表字段开发的时候,虽然我已经尽量把它涉及到的原理讲清楚了,但台下的反响还是云里雾里……不自己亲自做几个的话,恐怕是很难深入理解的。

一个自定义的字段类型如果算全了的话,可以分为5个部分(看,我说很繁琐吧……)

  1. 字段类。一个自定义的字段类型是继承自某个内置的字段类型的(这也是为什么我上次花了这么大功夫把内置的字段类型都罗列了一遍的原因),当然,我们也可以直接继承最基础的字段类型——SPField,但是这样要多做些事情(很遗憾,具体加什么我忘了-.-)。还是建议继承某种已有的吧(比如SPFieldText、SPFieldLookup、SPFieldMultiColumn之类的),大不了我们完全不用它默认的输入输出界面罢了。
  2. 字段值类。这是一个可选的部分。就像我上一次说的,如果字段的设计比较复杂的话,可能会需要字段值的类型,这种一般都用于一个字段中存储超过一个数据的情况(比如查阅项包含被查阅条目的ID和一个文本,Url包含地址和描述)。如果我们自己的字段类型需要有类似需求的话,可以继承一个已有的值类型,来写一个新的值类型。当然,如果原有的值类型能够满足我们的需求,直接用它就好了。
  3. 字段输入/显示控件。这也是一个可选的部分,但大多数情况下可能都要写,因为我们往往需要自定义输入的样式和输出的样式。这个控件可以使用一个User Control来做,因此支持可视化设计(如果愿意生写也可以……)
  4. 自定义属性的输入控件。同样是一个可选部分。自定义的属性对于一个自定义字段类型来说往往还是比较重要的,正是它体现了同一种字段类型下,一个字段和另一个字段的不同之处(比如查阅项查阅不同的列表)。本来这些自定义属性的输入是可以自动生成的,但由于刚刚说的那个bug,我们一般还是需要手动地去写一个自定义属性的输入控件,而且我们可以在这里也加入自定义的一些逻辑。这部分内容同样可以使用User Control,只不
    过需要再实现一个特殊的接口就行了。
  5. 字段定义文件。这是一个xml文件,每个自定义的字段类型都必须有(其实默认的那些字段类型也有),而且这个文件名必须以fldtypes_开头。这个文件中定义了关于该字段类型的一些基本信息(比如标题、类型、是否允许用户创建等等),还有它使用到的程序集信息、自定义属性的输入控件信息,另外还有各种显示样式(没错,这里也可以定义显示样式,而且支持一些诸如if、switch之类的条件判断,通过CAML格式实现),以及自定义属性(标准做法中的自定义属性在这里定义)。如果写这个文件时遇到了困难,我们可以参考一下默认的那些字段类型是怎么被定义的,此文件是那个很深的12目录中的”TEMPLATE\XML\FLDTYPES.XML”。

从另一个角度来说,自定义的字段类型也可以分成3个部分:程序集(dll)、控件(ascx)、描述文件(xml)。不妨先在此简要地介绍一下自定义字段类型的部署,很容易:把程序集扔进GAC里,把ascx放到”12\TEMPLATE\CONTROLTEMPLATES”,把xml放到”12\TEMPLATE\XML”,然后重启iis(一定要重启iis,仅回收应用程序池是不行的),然后就可以再创建栏那里看到新的字段类型了(如果我们没写错什么东西的话……)

从下一次开始,就是主要介绍以上那5个部分的写法,从中一一地展开介绍一下字段类型的工作机理。如果我能试出来字段类型之间通讯的话,我也会做一个介绍。

(未完待续)

 

Posted by on 2007 年 11 月 25 日 in 未分类

Leave a comment

Tags:

自定义列表字段类型(0)

SharePoint中若干自定制开发的内容,从目前我接触到的来讲,从开发语言上首先可以分为两大类,.net类和C++类,其中C++类主要是关于搜索中的IFilter和Protocol Handler的编写,使用的是COM的技术,这个回头有时间再说吧(或者有条件的话可以找微软要几份文档,之前帮微软做过文档和几个demo)。

然后就.net类的来说,我认为最为复杂的有两个内容,一个是工作流(我指的是vs开发的工作流),开发SharePoint工作流的话,除了要对SharePoint工作流的一些概念有所了解、对InfoPath有所了解之外,最重要的是WF(Workflow Foundation),这个研究的不太多;另外一个比较复杂的东西,就是自定义列表字段类型。就几次培训的反馈来说,普遍认为这个很麻烦,如果之前没有看过相关资料的话,2、3个小时之内很难把这个东西学明白。

于是从今天开始,准备写一个自定义列表字段类型的专题,争取涉及到其中可能会用到的各个方面。

之所以先从“0”开始,因为这次内容先不涉及到自定义的字段类型,先来看一下SharePoint中内置的那些字段类型,以及他们在对象模型中是什么样的。

首先下面这张图相信如果用过SharePoint的人应该再熟悉不过了:

image

这张图上基本上涵盖了大部分SharePoint内置的字段类型。如果我们装的是moss的话,还会多一个“业务数据”类型。

其实在wss3.0中,还多了一个可能一般使用者很少会见到的内置字段类型,叫“评估范围”,这种字段类型只在“调查”列表中会出现,并且不能在其他种类的列表中使用(即使通过对象模型也不能把它加到一个普通列表或者文档库中)。在新建一个调查列表的时候,创建列表的页面中,不是“确定”按钮,而是“下一步”,点这个按钮就会提示我们输入一些问题,这个时候就可以看到这个“评估范围”字段类型了:

image

这个字段类型主要的作用就是打分(有点像是youtube里面给视频打分的那种机制),可以设置分成几个分值,并且可以选择是否有空的项目(默认是N/A),以及将这些分值划分为三档,每一档的名称(好像只能是三档):

image

它的输入界面和输出界面都比较友好:

image

image

以上就是这个不太常见的列表字段类型的大概介绍,觉得这个字段类型写的还是很好的,其实我们可以通过自定义字段类型的方式,写出更加强大的字段类型出来。在此之前,先来看一下在SharePoint的对象模型中,字段都是怎样描述的。

如果之前曾经接触过一写SharePoint开发,我们会知道在对象模型中描述字段的类是SPField(对应的集合类是SPFieldCollection),这个类描述了一个字段中常用的一些属性(比如标题、内部名称、默认值、是否允许为空等等,以及在wss3.0中新加的是否在新建/编辑/显示等界面上显示这个字段——这个功能是只能通过自己写代码完成的,对应的属性叫ShowIn****,这是一个nullable的bool值,和普通bool值的用法有所区别)。

那么实际上,在SharePoint中内置的那些字段类型也都有各自的对象模型与之对应,这些类一般叫做SPField****,它们都是SPField的子类,各自扩展了特有的一些属性设定(比如单行文本中的最大长度、数字中的小数点位数等),有些比较复杂的字段类型还会有值类型于之对应,这些类一般叫做SPField****Value(****和它对应的字段类型的类名中的部分相同)。下面先大致看一下常用的内置字段类型:

1、单行文本 – SPFieldText

这个可能是用的最为广泛的字段类型了,它的输入界面就是一个单行文本框,没有数据验证功能(除了是否为空)。可以设置最大长度(局限在255以内)。

2、多行文本 – SPFieldMultiLineText

输入界面是一个textarea,根据设置不同,可以是纯文本或者是带格式文本的(按照html格式保存的)。

3、数字 – SPFieldNumber

输入界面是textbox,但是带有数据验证(是否为数字,以及最大/最小值等)。

4、货币 – SPFieldCurrency

和数字其实差不多,只不过现实的时候会多一个货币符号。

5、是/否 – SPFieldBoolean

一个CheckBox

6、日期 – SPFieldDateTime

一个带picker的textbox,可以选择“日期和时间”或“仅日期”

7、选项(单选) –  SPFieldChoice

可以以dropdownlist或者radio button的形式出现。这个字段有点点特别,虽然它看上去只能存一个值,但其实它是多选类(SPFieldMultiChoice)的子类……

———分割线(以上可以算是简单类型)————–

8、选项(多选) – SPFieldMultiChoice

如果使用多选,那么是通过一组checkbox输入的。在这个类里面定义了这个字段中究竟有哪些选项(通过Choices属性,自然,作为它子类的SPFieldChoice也有这个属性)。于之相对应的,可以通过SPFieldMultiChoiceValue类来访问它的值。

9、评估范围 – SPFieldRatingScale

刚才介绍过了,它其实也是多选类(SPFieldMultiChoice)的子类。于之对应的值类型为SPFieldRatingScaleValue。

10、链接或图片 – SPFieldUrl

可以是链接,也可以是图片,它包含url和描述信息两个部分,通过其值类型SPFieldUrlValue可以很方便的得到这两部分。

11、查阅项 – SPFieldLookup

通过dropdownlist完成单选,一个特殊的listbox完成多选(wss3.0支持查阅项多选了!),由于每个被查阅的项会有id和文本,所以也需要有值类型,这个比较特殊,有两种值类型,SPFieldLookupValue和SPFieldLookupValueCollection(因为支持多选了嘛)。然
后在SPFieldLookup类中,定义了要查阅哪个列表的哪个字段,以及是哪个网站上的列表。是的!wss3.0中的查阅项其实是支持跨网站查阅的(通过设定LookupWebId属性),但是在默认的界面上并没有暴露出一点。所以一个跨网站查阅项是一个很值得一做的自定义字段类型!

12、用户和用户组 – SPFieldUser

它的输入是通过一个带有AJAX支持的输入框完成的,这是一个很强大的控件。其实这个类是SPFieldLookup的子类,因为它们做的事情在本质上都差不多。相应的,其值类型SPFieldUserValue也是SPFieldLookupValue的子类,还有SPFieldUserValueCollection……

13、多栏 – SPFieldMultiColumn

这是另一个很特殊的字段类型,默认情况下我们无法直接使用它,使用它的唯一途径就是通过自定义字段类型继承它来完成我们的需求。顾名思义,这是一个能在一个字段中储存多个信息的字段类型。

———–邪恶的分割线—————–

好,那么现在我们已经了解了SharePoint内置的这些字段类型,之所以需要了解它们的目的除了方便“日常应用”外,最为重要的,我们正是通过继承这些字段类,来编写一个自定义字段类型的。也就是说,我们要先找到一个和需求功能类似的字段类型,继承它!

(未完待续)

 

Posted by on 2007 年 11 月 22 日 in 未分类

Leave a comment

Tags:

SharePoint升级崩溃之后…

近日同学所在某公司的SharePoint网站在打了补丁之后挂掉了(登陆不能,登陆页面也不出现,用的LDAP认证),然后他自己鼓捣出来之后,在我威逼(没有利诱)之下,把他关于SharePoint的部分笔记发给我了,贴到这里给大家看看,可能也会有人遇到类似的问题。

他们用的是WSS3.0 + LDAP认证方式,https加密传输,主要用于做文档管理,没有任何自己开发的代码在其中。

首先是关于崩溃问题(笔记记载如下):

前两天出了一点小故障,问题描述要比解决方案复杂得多。。
开始可以出现登录页面,但是登录上去就抱错,说找不到default页面,然后看到winows update里面有个sharepoint的升级,就运行了。重启了机器后sharepoint的务就挂了。。。
唯一能想到的修复方法就是运行那个sharepoint配置向导,但是第9步会说spadmin服务没有起,十分伤心。就扔下不管了。
今天有人要用了,只好硬着头皮看看,发现这次配置向导竟然通过了。唉,微软的东西就是搞不懂,不过网站还是起不来,就乱改了一通iis配置,然后又用配置向导修复了好几次,终于可以出现登录页面了,但总说我登录不上。研究了半天估计是ldap配置出了问题,果然一检查是把上面2的web.config给覆盖了,于是恢复了就好了。。。
现在想一想当初可能就是升级后把一些配置给我覆盖了吧。。

然后是关于WSS3.0如何使用LDAP认证的问题:

基本按照网上的一些步骤配置,不过有些改动,详细内容可以参考这个网页:
http://www.sharepointblogs.com/helloitsliam/archive/2006/08/15/10027.aspx
这里只说一下具体做法
1. 从一个装了moss2007的机器上copy一个microsoft.office.server.dll文件放在桌面上,在C:\Program Files\Common Files\Microsoft Shared\web server extensions\12\ISAPI目录,然后将这个文件拖进c:\WINDOWS\assembly目录,注意一定要拖进。。
2. 修改sharepoint管理中心网站和web网站的web.config文件,默认在c:\Inetpub\wwwroot\wss\VirtualDirectories\80(和另一个管理端口)
在<machineKey>这行和</system.web>之间加入:
    <membership defaultProvider=”LdapDemoMembership”>
      <providers>
        <add name=”LdapDemoMembership” type=”Microsoft.Office.Server.Security.LDAPMembershipProvider, Microsoft.Office.Server, Version=12.0.0.0, Culture=neutral, PublicKeyToken=71E9BCE111E9429C” server=”xxx.xxx.xxx” port=”389″ useSSL=”false” useDNAttribute=”false” userNameAttribute=”uid” userContainer=”ou=xxx,dc=xxx,dc=xxx,dc=xxx” userFilter=”(ObjectClass=*)” scope=”Subtree” otherRequiredUserAttri
butes=”uid,cn” />

      </providers>
    </membership>
保存关闭。注意useDNAttribute=”false”一句比较重要,搜索的资料很多没有说,否则会连不上。
3. 打开sharepoint的管理中心(可以从开始->管理工具->),应用程序管理,验证提供程序,编辑现有的默认验证,验证类型选中表单,这里要打开一下匿名的权限(注意稍后再给禁掉),成员身份提供程序要和前面添加的一致,如LdapDemoMembership,角色管理不用填,最下面启用客户端集成,然后保存。
4. 手动添加一个管理员帐号(过后可以再删掉),还是应用程序管理,Web应用程序的策略,添加用户,区域选择默认(或自己设的网站区域),这是用户里应该能够识别ldap服务器上的所有用户,给一个完全控制权限。
5. 访问sharepoint的web网站,会出现登录框,用刚添加权限的帐号登录,点右上网站操作,网站设置,高级权限设置里面的匿名权限打开。然后回去关闭掉4中打开的匿名访问。这样可以做到需要ldap认证,但默认用户有一个访问者的权限,通过更改sharepoint网站中的访问者权限就可以限制普通用户的权限(已经很低了)。

关于https的设置:

控制面板,添加删除windows组件里先添加证书服务,随便起个名字。
管理您的服务器,管理此应用程序服务器,对sharepointweb端和后台管理网站都要做:属性,目录安全性,服务器证书,一路下去,生成一个txt文件。
更改默认网站的端口,比如8080,启动。
浏览器中访问http://localhost:8080/certsrv,申请一个证书,高级申请证书,使用base64…,将txt文件中begin和end之间的部分copy过去,提交。
管理工具,证书颁发机构,挂起的申请,改刚才的id颁发证书。
再登录刚才localhost网址选查看挂起的证书申请的状态,可以下载DER编码的证书保存。
回到开始的服务器网站属性,再选择服务器证书,处理挂起的请求并安装证书。
完毕后就可以https访问了。最后在目录安全性,编辑里勾上要求安全通道和128位加密。

都是原文照搬过来的,我是不是太懒了。。。。

准备弄完手头的连载之后开始写一个自定义列表字段的专题,或者各位看客有啥想了解的关于开发方面的(除了工作流-.-)东东也可以提一下,嗯嗯

 

Posted by on 2007 年 11 月 16 日 in 未分类

Leave a comment

Tags: