RSS 2.0 Feed

Tuesday, May 06, 2008

<Module Name="" Path="" Url="">
  <File Name="" Path="" Url="" />
</Module>

Module:
Name : 磁盘上放置文件的文件夹的名称
Path : 在"Name"属性中指定的文件夹在磁盘上相对于\\Program Files\Common Files\Microsoft Shared\web server extensions\12\TEMPLATE\Features\Feature的路径。如果文件夹是直接放置于Feature目录,那么Path应该是空。
Url : 要拷贝到站点的哪个目录,目录的路径是相对于站点根目录的。如果站点中没有此目录存在,则会自动创建此目录。

File:
Url : 文件在站点中的名称
Path : 文件在磁盘上相对于\\Program Files\Common Files\Microsoft Shared\web server extensions\12\TEMPLATE\Features\Feature的路径。
Name : 通常不需要制定Name属性的值,留空即可。如果不为空,则会覆盖Url属性的值,使文件在站点中用Name指定的名称。

举例:
Feature源文件结构如下,在“AModuleSample”这个Feature目录中还有一个“AModuleSample”子目录,其中有“readme.txt”这个需要provision的文件:
image

那么Module和File就要写成下面这样:
image

上面的Module和File元素的定义表明,我们希望将readme.txt文件以newname.txt的名字放到站点的NewFolderInSite目录中。所以,激活此Feature之后,站点上就会多这样一个目录和文件:

image

posted @ | Feedback (0) | Filed Under [ SharePoint ]

Sunday, May 04, 2008

最近,我们Team正在制作一个3天的OBA开发系列课程Video。也就是,我们将这三天的课程,包括每个课程对应的动手试验,都在自己的电脑上真实的讲演一次,同时用录屏软件将屏幕和声音实时录制下来。由于是专门进行屏幕和声音的录制,所以录制效果会比较好。

最终这个OBA Learning Series会包括:
中文PPT
课程Video
中文动手实验手册
动手实验Video(也就是按照动手实验手册上的内容,将从头到尾做一遍的过程录制下来)
课程中用到的所有Demo源代码

专题 1 – 了解 Office Business Application业务应用程序
专题 2 – 将业务数据整合到具有 Open XML 文件格式的 Office 文档
实验 – 将业务数据整合到具有 Open XML 文件格式的 Office 文档
专题 3 – 将业务数据整合到具有 Fluent UI 扩展性的 Office 文档(第一部分)
专题 3 – 将业务数据整合到具有 Fluent UI 扩展性的 Office 文档(第二部分)
实验 – 将业务数据整合到具有 Fluent UI 扩展性的 Office 文档
专题 4 – SharePoint 网站和安全框架
实验 – SharePoint 网站和安全框架
专题 5 - SharePoint 存储引擎(第一部分)
专题 5 - SharePoint 存储引擎(第二部分)
实验 - SharePoint 存储引擎
专题 6 – 定义业务流程和工作流
实验 – 定义业务流程和工作流
专题 7 – 构建、打包和部署 SharePoint 的组合用户界面
实验 – 构建、打包和部署 SharePoint 的组合用户界面
专题 8 – 整合业务实体与业务数据目录
实验 – 整合业务实体与业务数据目录
专题 9 – 企业搜索
实验 – 企业搜索
专题 10 – 利用 Excel 服务和报表中心创建报表、分析表和信息板
实验 – 利用 Excel 服务和报表中心创建报表、分析表和信息板

我们希望在5月份上旬就制作完成。具体发布方式可能会是由市场部门制作成DVD光盘,但我会尽量将完整内容直接发布到我的blog上。

试看视频:实验 - 定义业务流程和工作流

posted @ | Feedback (0) | Filed Under [ SharePoint Office ]

Thursday, April 10, 2008

好吧,用SharePoint Server 2007实现搜索Domino Notes的确是个艰苦的活儿...我也是被折磨得不行。希望本文能为你节省一些时间。

首先,我们team的Search技术专家Jie Li曾经写过一篇如何配置SharePoint Server 2007来搜索Domino Notes的中文文档,被包含在“微软企业搜索解决方案部署快速启动工具包1.0”中,而这个工具包则被包含在“微软企业业务生产力基础架构(BPIO)解决方案包”中。如果你曾经从微软拿到了那个大大的“解决方案包”(包括N张DVD),那么里面有专门的一张DVD就是“微软企业搜索解决方案部署快速启动工具包1.0”。如果没有,那么就直接用下面的链接下载。

微软企业搜索解决方案部署快速启动工具包1.0下载

Jie Li同志贡献的除了文档,在那个方案包中还有一些相关的录屏、示范代码等,都值得仔细阅读。

在微软TechNet网站上,有两篇相关的配置文档,在动手之前,也建议从头到尾仔细阅读一遍。

Prepare to crawl Lotus Notes (Office SharePoint Server 2007)
Configure Office SharePoint Server Search to crawl Lotus Notes (Office SharePoint Server 2007)

如果配置过程出现了问题,那么就到下面的页面中仔细找找,看看是否遇到了相应的问题。

Troubleshoot a Lotus Notes configuration (Office SharePoint Server 2007)

在整个配置过程中,最复杂的,应该就是如何做好AD用户与Notes用户的映射,并保证搜索结果也是进行了权限过滤的(即一个AD用户所对应的Notes用户如果在Notes中无权限查看某个文档,那么这个用户在SharePoint Server的搜索结果中也不会看到这个文档)。如果在参考了上面的配置文档仍然无法正确最好搜索的权限过滤,那么你可以考虑一个“歪招”,我将具体的做法写了一个文档,可以下载后参考。

在你的配置过程中,可能发现需要编程访问Domino中的数据。对于一个.NET Developer来说,最好的选择就是使用Domino Objects这个COM接口。在机器上安装了Notes Client之后,就可以在Visual Studio中直接引用此COM接口了。

image

更详细的做法当然是参考IBM提供的文档了。

在 Microsoft .NET 应用程序中使用 IBM Lotus Domino
Common ground: COM access to Domino objects

最后,如果你有很多很多的Domino数据库需要爬网,那么可以尝试使用MOSS Search Admin这个工具。

posted @ | Feedback (0) | Filed Under [ SharePoint ]

Wednesday, April 02, 2008

相信大家也已经知道了,Open XML已经通过了第二轮ISO投票,正式成为了ISO标准。iso.org上已经正式宣布了这个消息。这个消息意味着:

1、第三方的软件开发商和Developer现在终于可以直接参考标准的Open XML文档格式规范,来直接创建或处理Microsoft Office所生成的文档了。大家再也不需要像以前一样,艰难的对二进制文档格式(.doc、.xls...)进行反向工程...对于WPS和其他类似希望直接支持Microsoft Office文档格式的软件而言,肯定是一个利好。比如,运行在Linux中的Open Office(Novell Edition)已经直接支持Open XML文档了:

image

2、成为ISO标准后,Open XML规范将不再直接被任何一家厂商(包括微软自己)所控制,任何对ISO标准的修改和更新,都需要经过ISO组织的标准投票流程。

3、Developer现在可以很容易的处理Microsoft Office文档了,因为Open XML规范本身就是基于两种最基本也最通用的技术:XML和Zip。对Open XML的处理不会受到任何平台、任何编程语言的限制。

为了帮助.NET Developer更好的创建和处理Open XML文档,微软已经发布了Open XML SDK的第一个CTP版本。Open XML SDK可以让.NET Developer直接使用一组提供的类库来操作Open XML文档,而不需要了解太多Open XML规范的细节。下图是Open XML SDK后续发展的Roadmap。

Open XML SDK roadmap: timeline

在MSDN Webcast站点上,也有一个系列中文的Open XML开发讲座

中国之前已经提出了一个UOF文档格式标准,微软也正在支持开发一个UOF与Open XML的双向转换器,来实现UOF格式与Open XML格式之间的互转。这个转换器的目标是直接直接在Microsoft Office 2007中打开、保存成UOF格式:

image 

 image

下图显示了这个使用Microsoft Office 2007创建的UOF文档在永中Office中编辑的情况:

 image

posted @ | Feedback (0) | Filed Under [ Office ]

Tuesday, April 01, 2008

Wednesday, March 26, 2008

最近有人向我抱怨,说他在用SharePoint Designer摆弄SharePoint页面时,被同事无情的嘲笑为非真正的Developer。为了挽救他受伤的心灵,我决定录一段用Visual Studio做SharePoint页面的video,来教会他如何在同事面前抬起头了。当然,如果确实用SharePoint Designer更方便,我还是建议他每天早一个钟头去办公室,先用SharePoint Designer弄好页面,然后在同事进到办公室之前,将用SharePoint Designer弄好的页面copy到Visual Studio中...

闲话少说。先说一下Video中的那个工具:Visual Studio Extensions for WSS 1.1



再次道歉(奇怪,我为什么要说再呢?):录屏时错误的选择了WebEx,造成录像效果不是很好,但基本不影响欣赏。同时,还得麻烦您到这里去下载WebEx播放器

posted @ | Feedback (2) | Filed Under [ SharePoint ]

Tuesday, March 25, 2008

经常有人问我“如何禁止用户修改某某字段?”之类的问题。通常这一类的问题会牵涉到对列表项编辑页面的修改。

其实简单来说,如果你熟悉SharePoint开发,解决上面所说的这个问题就非常简单了。因为SPField有一个ShowInEditForm的属性,你只需要这样:

SPField titleField = item.Fields["Title"];
titleField.ShowInEditForm = false;


但如果你不想用这样的方法,或者想了解更多对列表项编辑页面的定制,那就继续看下去。

对列表项编辑页面最常见,也最方便的定制方法,就是使用SharePoint Designer打开这个页面直接进行修改。通常,通过往这个页面上添加相应的JavaScript脚本,就可以完成我们需要的效果。
image

比如下面的这个任务列表项的编辑页面,我们希望,它能够隐藏“标题”字段,同时,自动将“截止日期”所对应的文本框中的值设置为2008/1/1(是的,我知道要做到这个只需要更改字段默认值,但这不是重点...)。
image 

<script type="text/javascript" language="javascript">

// 搜索对应到每个字段的文本输入框
function searchFieldEditorElement(tagName, identifier, title) {
  var len = identifier.length;
  var tags = document.getElementsByTagName(tagName);
  for (var i=0; i < tags.length; i++) {
    var tempString = tags[i].id;
    if (tags[i].title == title && (identifier == "" || tempString.indexOf(identifier) == tempString.length - len)) {
      return tags[i];
    }
  }
  return null;
}

// 搜索对应到每个字段的“<TR>”标签
function searchParentTR(element)
{
    var parentElement = element.parentElement;
    if (parentElement == null)
    {
        return element;
    }
    if (parentElement.tagName.toLowerCase() == "tr")
    {
        return parentElement;
    }
    return searchParentTR(parentElement);
}

function setFieldControls()
{
    // 将“标题”字段所对应的行隐藏起来
    var txtTitle = searchFieldEditorElement("input", "TextField", "标题");
    if (txtTitle != null)
    {
        var parentTr = searchParentTR(txtTitle);
        parentTr.style.display = "none";
    }

    // 将“截止日期”字段所对应的文本框的值设置成“2008/1/1”
    var txtEndDate = searchFieldEditorElement("input", "DateTimeFieldDate", "截止日期");
    if (txtEndDate != null)
    {
        txtEndDate .value = "2008/1/1";
    }
}

// 指定在页面载入后运行指定的JS函数
_spBodyOnLoadFunctionNames.push("setFieldControls");

</script>

image

通过灵活使用JavaScript,基本上我们可以实现我们所需要的大部分效果。

posted @ | Feedback (0) | Filed Under [ SharePoint ]

Sunday, March 23, 2008

Thursday, March 06, 2008

3月3号,SharePoint Conference 2008第一天。

SharePoint Conference的会场和公司内部的TechReady会议一样,也在西雅图市区的Washington Convention & Trade Center。一大早兴匆匆的就跑过去了,扶手电梯上方挂着SharePoint Conference 2008的大牌子,下面是三个最能描述SharePoint的关键字:Connect、Collabrate和Share。:)

image

办完了注册手续,就进到一个前方有两个大投影显示屏的房间,通过投影看keynote直播。为啥不能直接到keynote会场去现场看呢?原因就是今年的SharePont Conference的票很早就卖光了,等到我注册参会的时候,只能订到Overflow类型的票了。Overflow也就是说不能进到大会的keynote现场,只能在旁边的房间看直播...不过对于所有的课程session,当然还是和普通票一样啦。俺的参会牌的后面有一个大大的OVERFLOW标签,直接被会场人员就发配到旁边的直播间了:

image

keynote第一个上台的是SharePoint的产品经理,Tom Rizzo。我能参加这个会还得多亏他的帮助,因为我注册的时候,由于票已卖光,只能放到waiting list里面,后来还是我的老板给他发了一封邮件,让他帮忙才终于弄到了一张Overflow票...

image

Tom Rizzo把大家鼓动了一把之后,就请出了号称“微软第一SharePoint粉丝”的Bill Gates同志。

image

Bill Gates同志虽然演讲风格不敢恭维,但号召力还是相当强的。上台后又给大家看了一遍网上已经流传很广的“Bill Gate's Last Day at Microosft”的搞笑Video,不过这次放的似乎和之前放的有稍许不同,因为我又看到了几个新面孔,包括沃伦巴菲特(对,就是那个股神巴菲特)。

在Bill Gates的keynote中,他正式宣布了SharePoint Online,这是一个面向企业和个人的在线托管SharePoint服务。你可以在这里看到更详细的有关SharePoint Online的信息,还可以用你的Live ID,免费试用一下SharePoint Online。

另外,在Tom Rizzo的keynote中,还发布了一个新的SharePoint资源站点:SharePoint Gear Up,里面有不少协助客户和技术人员进行SharePoint部署的资料。

技术Session在下午正式开始。第一场我去听的《AMD: Deploying MOSS 2007 in a Complex, Global Environment》,是微软的几个GG讲述的AMD在企业Intranet、Extranet与Internet环境中实施SharePoint 2007的经验。课程内容没有什么很特别的,不过在讲述其经验的时候,讲到了他们在实施过程中,对SharePoint Customization进行了严格控制,每一个Customization都需要经过技术人员以及Business Man的审批...

第二节课程本来计划去听《Code Based List Form Customization in WSS 3.0》,光看名称就已经很吸引人了,而且其课程Level被标注成了400,更加让我觉得非听不可。可到了这个课程的教室门口,才发现,和我有同样想法的人太多了,而课程又被安排在一个小教室内,我到的时候,早已经满员,不让再进人了...

无奈之下只要跑去听《A Roll-Up of Fun & Lessons Learned Using the Content Query Web Part (CQWP)》,不过还算有所收获,算是了解了一把Content Query Web Part的强大功能,以及知道了微软内网MSW站点首页上那些东东原来都是用CQWP做的。

image

今天听的最后一节Session是《Collaborating with Customers on the Extranet with SharePoint 2007: Solutions and Best Practices》,这个Session是由一个微软的合作伙伴讲的(SharePoint Conference中不少课程是微软合作伙伴讲的,其特点是,通常会给自己公司,以及自己公司的某个产品做不少广告)。其实这个Session真可以说是一个标准的“广告Session”,因为大部分时间,都是在Demo这家公司在SharePoint上做的一个Extranet Collaboration Manager的东东。不过这个ExCM的东东功能确实做得不错,部署之后,可以通过配置让SharePoint Farm直接支持Forms Auth、User Self-Registration、Site Self-Provision Request、Site Request Approval Workflow等等。

整个下午都被时差效应所折磨,在会场喝了2罐可乐也无济于事,撑到课程都结束,就闪回酒店睡觉了...

posted @ | Feedback (3) | Filed Under [ SharePoint ]

Wednesday, February 27, 2008

WSS 3.0 SDK 1.3
MOSS 2007 SDK 1.3
另外,WSS 3.0也发布了SP1之后的第一个比较大的hotfix package

posted @ | Feedback (1) | Filed Under [ SharePoint ]

Sunday, February 24, 2008

这两天帮一个朋友调试使用BDC(Business Data Catalog)来连接MySql中的数据,发现不少需要特别注意的地方。在使用BDC连接时,MySql和MS Sql Server的区别还是很大的。

我的朋友在服务器上是使用的MyODBC这个Driver。对于LobSystemInstance的定义,基本类似:

<LobSystemInstance Name="MySQL_Lob">
      <Properties>
        <Property Name="rdbconnection Driver" Type="System.String">{MySQL ODBC 3.51 Driver}</Property>
        <Property Name="rdbconnection server" Type="System.String">MySQL服务器名称</Property>
        <Property Name="rdbconnection database" Type="System.String">MySQL Database名称</Property>
        <Property Name="rdbconnection user" Type="System.String">root</Property>
        <Property Name="rdbconnection password" Type="System.String">123456</Property>
        <Property Name="rdbconnection option" Type="System.String">3</Property>
        <Property Name="RdbConnection Trusted_Connection" Type="System.String">true</Property>
        <Property Name="DatabaseAccessProvider" Type="Microsoft.Office.Server.ApplicationRegistry.SystemSpecific.Db.DbAccessProvider">Odbc</Property>
        <Property Name="AuthenticationMode" Type="Microsoft.Office.Server.ApplicationRegistry.SystemSpecific.Db.DbAuthenticationMode">PassThrough</Property>
      </Properties>
</LobSystemInstance>


不同的Database Driver,其Connection String是不同的。所以如果你使用的并非MyODBC Driver,那么LobSystemInstance的写法会有不同。

由于我对MySQL并不熟悉,所以在写Entity的Method的时候,又遇到不少问题。其中之一是SQL语句的Parameter的问题。对于MS SqlServer,我们可以使用类似“@ParameterName”的格式来定义SQL语句中的参数。但是,这对于MySQL并不一定有效。使用不同的Database Driver去连接MySQL,对于参数,都有不同的定义方法。我搜索了一下MyODBC的文档,发现它不支持命名参数,而直接使用“?”来代表参数,然后按照顺序来添加参数的值。

所以,在写Entity Method的SQL查询语句时,如果其中有参数,就只能写成类似:

Select CustomerID, CustomerName, ContactName from Customers where CustomerID = ?

但是Entity中Parameter的定义,仍然可以按与命名参数一模一样的写法即可。

posted @ | Feedback (0) | Filed Under [ SharePoint ]

Monday, February 18, 2008

此文是《关于SharePoint 2007的用户组和用户》一文最后一段的继续。关于SharePoint Server中的用户信息管理,choral也写过一篇相关的《SharePoint中的用户信息同步》。本文对相关的信息进行了更进一步的解释和说明。

先上一副图(图中的A、B、C、D、E等标记是为了下面文字更容易指定图片中相应部分而用,下文用类似“A标记”、“B标记”来进行标识):
 image

在一个标准的SharePoint Server服务器场部署模型中,一个用户的信息会同时存在于多个地方:

1、Active Directory(“A标记”)
在AD中会保存我们的基础信息,AD通常是企业中用户基础ID信息的所在。
image

2、SharePoint Server SSP User Profile(“C标记”)
在SharePoint Server服务器场的共享服务(SSP)的用户配置文件(User Profile)中,也会保存用户的信息。SSP User Profile中的用户信息,是作为SharePoint服务器场中集中的用户信息存储所在。如果在SharePoint应用中需要存放一些用户的特定属性信息,建议就存放在SSP User Profile中。User Profile是可以进行属性扩展的,比如,管理员可以添加一个新的“QQ号码”属性。
image

User Profile中的用户信息默认是从AD中导入而来的(“B标记”标识了这个过程),在SSP User Profile管理中,我们可以配置这个导入过程,比如指定相隔多长时间就从AD中重新完全导入用户信息一次。
image

当SSP User Profile从AD中导入用户信息的时候,SSP会根据User Profile的属性映射定义,来决定将AD中用户的哪个属性的值,赋值给User Profile的哪个属性。比如,SSP会将AD中的“显示名称”这个属性的值,导入到User Profile的“名称”这个属性中。通过SSP管理中“编辑用户配置文件属性”这个页面,就可以编辑(或者取消)这种属性映射关系。

如何修改保存在User Profile中的用户属性信息呢?首先,管理员可以在SSP管理中直接修改所有用户的属性信息。其次,每个用户通过自己的个人网站(“我的网站”),就可以修改自己的User Profile信息。
image 

特别说明1:为什么用户不能修改某些属性?比如上图中的“名称”属性,默认就不能修改?
在SSP User Profile管理中,管理员可以指定哪些属性允许用户自己修改,哪些属性不允许。比如,如果管理员允许用户自己修改User Profile的“名称”属性:
image
那么用户就可以在自己的个人网站修改“名称”属性的值了:
image

特别说明2:用户自己修改(或者管理员修改)了User Profile的值,但是岂不是在下一次从AD中完全导入用户信息时,又被覆盖成AD中的值了?
是的。比如上面我们允许用户修改User Profile的“名称”属性的值,但是由于默认“名称”属性映射到AD中的“显示名称”属性,所以下一次进行AD完全导入(“B标记”)时,User Profile中用户的“名称”属性又被自动置成了AD中的“显示名称”的值。但是,管理员可以取消这种映射关系,比如,我们取消掉“名称”属性与AD“显示名称”属性的映射:
image
改成:
image

特别说明3:修改了User Profile中的用户信息,能否自动反向同步回AD?
不能。

除了从AD中导入User Profile信息之外,SharePoint还支持从其他数据源导入,比如LDAP Server。此外,你还可以用代码来往User Profile中添加用户的信息。

3、SharePoint站点(“E标记”)
在每个SharePoint站点中(更准确说应该是站点集中),还会保存每个站点用户的信息。这些信息是保存在各个站点的内容数据库的UserInfo表中(别直接修改数据库表,那不是一个好主意,正确做法是通过SPUser对象模型来访问SharePoint站点中的用户信息)。我们在页面右上方看到的那个“欢迎XXX”信息中的“XXX”,就来自SharePoint站点中存储的用户信息数据。
image 

用户(以及管理员)不能直接修改存储在SharePoint站点中的用户信息,如果你试图修改,你只会看到这个:
image


当把用户第一次添加到SharePoint站点中时,SharePoint自动以用户的AD信息为基础,来写入到UserInfo表中。然后,“D标记”所示的同步操作,会将存储到SharePoint站点中的用户信息同步到User Profile中。同时,SharePoint Server还会自动定时的,将用户在User Profile中的信息,同步到各个SharePoint站点。这种同步是双向的。但是由于用户实际上不能在SharePoint站点中修改用户信息,所以实际上,这种同步绝大部分时候,都是将User Profile中的用户信息推送到SharePoint站点中。

“D标记”所示的同步过程是由2个SharePoint计时器作用(Timer Job)来完成的,“配置文件同步”(进行完全同步)和“配置文件快速同步”(进行差量同步):
image 

由于SharePoint Server是以User Profile来作为用户信息存储中心,所以SharePoint Server不允许用户直接修改存储在SharePoint站点中的用户信息,而是定时自动的将User Profile中的用户信息推送到每个站点中。也就是说,即使你手工修改了UserInfo表中存储的用户信息数据,或通过SPUser对象模型修改了用户的属性信息,但它们很可能很快就会又被自动的覆盖成User Profile中的值。我们应该通过修改User Profile用户信息,来达到更新和维护用户信息的目的。User Profile应该是整个SharePoint Server服务器场中唯一的用户信息存储中心。

特别说明1:如何手工来快速进行“D标记”中所示的将User Profile用户信息同步到SharePoint站点用户信息的过程?
尝试在服务器上手工执行下面两个stsadm指令:
stsadm -o execadmsvcjobs
stsadm -o sync

特别说明2:为什么似乎“D标记”所示的同步过程,不能同步某些用户在SharePoint站点中的信息?
因为“D标记”所示配置文件同步操作,只会同步那些SharePoint认为是SharePoint站点“活动用户”。一个用户是否是活动用户由UserInfo表中的某个字段来标识。当一个用户在站点中进行某些“确实的”操作时,比如上传一个文件,他就会自动被标记为“活动用户”。

总结:
简单来说,就如同第一张图片所示的那样,AD -> User Profile <-> Site User Info。

posted @ | Feedback (6) | Filed Under [ SharePoint ]

Wednesday, February 13, 2008

下载Visual Studio Extensions for SharePoint v1.1    User Guide

1、此版本(1.1)稍后会发布中文版
2、此版本仍然只支持Visual Studio 2005
3、此版本仍然必须安装在包含了SharePoint Server(或WSS)、Visual Studio的机器上
4、下个版本(1.2)会支持Visual Studio 2008,大概年中发布

posted @ | Feedback (2) | Filed Under [ SharePoint ]

Sunday, February 03, 2008

根据这篇文章,在微软刚过去的08财年第二季度(即日历年2007/10 - 2007/12这三个月),微软的SharePoint销售数据是10亿美元!如果你觉得人们不喜欢SharePoint,那么微软的利润报表会告诉你,不,无数人都很喜欢SharePoint!:)

更新:
应群主大S要求,如果您对MOSS开发有心得,欢迎加入目前来看似乎已经是最大的MOSS开发MSN群:group194869@xiaoi.com

posted @ | Feedback (19) | Filed Under [ SharePoint ]

Saturday, February 02, 2008

WF本质论WCF服务编程

“WF本质论”(“Essential Windows Workflow Foundation”),其重要性确实可以与“COM本质论”相提并论。“WCF服务编程”(“Programming WCF Services”),基本上把WCF Developer应该了解的都讲到了。两本书的中文版翻译质量皆佳,值得推荐。另外对WPF基本没有了解,就不推荐了...

posted @ | Feedback (5) |

Wednesday, January 30, 2008

之前的文章里面,写了一个方法,来禁止掉SharePoint页面的个性化。但当时就有人问了,如果我只想管理员能够个性化页面,而非管理员不能做这个操作,又应该如何做呢?下面就是方法。注意:这个方法是基于SharePoint如何显示其“网站操作”菜单的原理,也就是说,这个方法是基于其原理的“倒推论”,我没有对这个方法进行过完整的验证测试...:(

首先,WSS 3.0的Master Page是使用了下面两个方法之一来显示页面右上方的那个“网站操作”菜单的。

1、直接在master page上使用“Microsoft.SharePoint.WebControls.SiteActions”控件,比如default.master就是这样:

image

2、或者,在manster page上使用“Program Files\Common Files\Microsoft Shared\web server extensions\12\TEMPLATE\CONTROLTEMPLATES\PublishingActionMenu.ascx”这个用户控件(当然了,这个用户控件里面其实也是使用“Microsoft.SharePoint.WebControls.SiteActions”来的)。比如BlueBand.master:

image

所以,我下面说的这个步骤,就要根据你是使用的哪个master page,来决定是直接修改master page文件,还是修改那个用户控件。我下面的例子是用的default.master,也就是第一种情况。

那个SiteActions控件的用法是一个控件嵌套,类似于:

<SiteActions>
  <CustomTemplate>
    <FeatureMenuTemplate>
      <MenuItemTemplate />     <--- 每个“MenuItemTemplate”表示网站操作菜单上的一个项目
    </FeatureMenuTemplate>
  </CustomTemplate>
</SiteActions>

找到表示“编辑页面”的那个“<MenuItemTemplate>”节点,加上两个属性“PermissionsString”和“PermissionMode”("PermissionsString"的值表示必须具备此权限的用户才能使用这个菜单项,“FullMask”表示所有权限,“ManageWeb”表示管理当前网站):

image

嗯,还没有完。打开“Program Files\Common Files\Microsoft Shared\web server extensions\12\TEMPLATE\LAYOUTS\EditingMenu\SiteAction.xml”文件,找到id是“wsaEditPage”的“ConsoleNode”节点,增加一个“UserRights”的属性。(为什么还要做这一步呢?简单的说,是因为对于启用了Publishing功能的网站,SharePoint会用Microsoft.SharePoint.Publishing.WebControls.PublishingSiteActionsMenuCustomizer控件来读取这个xml文件,然后动态的去更改“网站操作”菜单。)

image

OK,完成。理论上说,这个方法可以用更“优雅”的coding的方式来解决,然后再封装成一个solution package,但是...有时候快速解决问题让人更省心,不是吗?另外,我相信你可以从这篇blog里面学到除了禁止页面个性化之外的更多内容... :)

posted @ | Feedback (3) | Filed Under [ SharePoint ]

Monday, January 21, 2008

总所周知,在Microsoft Office 2007中,微软引入了一种全新的文档格式:Open XML。由于Open XML是一种开放的文档格式(基于两种开放技术:XML、Zip),所以解决了过去Microsoft Office所使用的二进制文档难以交互、难以被第三方应用程序访问的问题。

但是自从微软决定将Open XML提交给ISO之后,从业界的反馈来看,很多人仍然非常关心过去的二进制文档格式(.doc, .xls, .ppt),并希望能得到其相关的技术细节文档。

经过慎重的考虑,微软决定再将Microsoft Office所使用的二进制文档格式公开。任何人和企业,在不违反相关协议的前提下,都可以免费得到其技术规范文件。现在,无论是全新的Open XML格式文档,还是过去的二进制格式文档,都不会再有人,或者企业,抱怨微软“藏着掖着”了吧。:)

如何获取二进制文档格式规范,请参看此篇KB中的“Royalty-Free File Format Programs”一节。

posted @ | Feedback (10) | Filed Under [ Office ]

Thursday, January 17, 2008

今天有人在MOSS开发的MSN群中提了一个问题,就是如何彻底禁止对SharePoint页面的个性化?也就是不允许任何人,包括管理员,使用SharePoint页面个性化功能来更改页面。当时隐约觉得应该可以通过修改Master Page上的SPWebPartManager控件来完成,之后试验了一下,确实可以。

使用SharePoint Designer打开,或者创建一个新的Master Page,找到SPWebPartManager控件,如下所示,修改它的属性“Personalization-Enabled”为“false”即可。

image

让SharePoint站点使用此Master Page之后,就会看到“编辑页面”这个按钮已经变成灰色,无法选择了:

image

posted @ | Feedback (7) | Filed Under [ SharePoint ]

Thursday, January 03, 2008

刚才在china-pub看到《敏捷软件开发:原则、模式与实践(C#版)》已经出版了。这本书是以前那本《敏捷软件开发:原则、模式与实践》的C#版,这是不是说明C#程序员的数量已经多到Robert Martin无法忽视的程度了呢?:)



既然说到了图书,就再推荐一本我现在正在温习的,《高级.NET程序设计》(《Advanced .NET Programming》,中文版翻译质量比较差劲)。此书的内容完全对得起书名中的“Advanced”,要比一般的《Professional XXX》好得多,如果你已经看完了《CLR via C#》,那么强力推荐这本。可惜的是此书的作者并未随着.NET升级而对书的内容进行更新,但基本上书中的内容并未过时。

posted @ | Feedback (7) | Filed Under [ .NET ]

Wednesday, January 02, 2008

创建了一个关于SharePoint的Wiki:wiki.msotec.net,我会不断将一些内容添加到上面。如果你感兴趣添加或编辑上面的内容,可以使用你的Live ID登录并注册(需要经过管理员审批,一般不会拒绝:))。

另外,这个站点使用了Live ID集成认证,我写了一个定制的Live ID Membership Provider。如果对集成Live ID感兴趣,可以参考这里(开心快给我宣传推广费:))。那个for SharePoint的Live ID Membership Provider我也将源码放在了wiki.msotec.net上。

posted @ | Feedback (7) | Filed Under [ SharePoint ]

Monday, December 17, 2007

我今天将External Binary Storage (EBS) Component的预览版本发布到了Internet。点击下载 (Update : Download Link)。

安装方法:
1、安装 WSS 3.0 SP1 和 MOSS 2007 SP1。
2、下载安装文件。
3、将下载到的文件解压缩到SharePoint前端Web服务器上,用记事本打开“install.bat”,搜索“\\moss\MOSS_BLOB”,改成自己希望用来存储文件的路径(本机路径或网络路径皆可)。
4、在SharePoint服务器上打开命令提示符,执行“install.bat”。

注意:不要将它安装到你的生产环境中!!!这只是一个Tech Preview版本。

posted @ | Feedback (16) | Filed Under [ SharePoint ]

Saturday, December 15, 2007

第一次告诉大家有关SharePoint 2007中的外部二进制数据存储(External Binary Storage)的相关信息,还是在7月份的时候。现在也该发布点相关的东东出来了...

在SharePoint服务器上注册External BInary Storage Component,重启IIS...
image

然后开始尝试上载新文件,点击“确定”...:
image 

在Visual Studio的调试状态中,可以看到External Binary Storage Component的代码被触发了...
image 

在SharePoint文档库中可以看到文档已经上载成功,当然,实际上这个物理文件是被存储到指定的磁盘目录中...
image

如果尝试用任何方式访问文档,比如,直接打开...
image

处于调试状态的Visual Studio捕获了这个文件访问请求...
image 

希望在下周能够发布一个Preview版本给大家进行测试。:)

posted @ | Feedback (7) | Filed Under [ SharePoint ]

Thursday, December 13, 2007

Windows SharePoint Services 3.0 SP1
Office SharePoint Server 2007 SP1
SharePoint Designer 2007 SP1

先安装WSS 3.0 SP1,然后再是MOSS 2007 SP1。SharePoint SDK Online的内容也更新到了最新的2007年12月版本(WSS 3.0 SDK, MOSS 2007 SDK),可下载版本随后会发布。

WSS 3.0 SDK中,专门新增了一个章节,来讲述我之前介绍过的External Storage API

posted @ | Feedback (9) | Filed Under [ SharePoint ]

Thursday, December 06, 2007

可以将网站集、网站、列表、列表项数据在站点间(或服务器间)进行复制,使用了SharePont的Content Migration API。

点击查看

posted @ | Feedback (8) | Filed Under [ SharePoint ]

Tuesday, December 04, 2007

在默认的情况下,每个SharePoint Web应用程序只会使用一个内容数据库(Content Database)。随着在这个Web应用程序中创建的网站集越来越多,或者网站集中的数据越来越多,这个内容数据库也在不断的增大。

也许是为了提高性能,也许是原有的内容数据库剩余空间已经不多,管理员可以给一个Web应用程序创建更多的内容数据库。在SharePoint管理中心的“应用程序管理 - 内容数据库”中,管理员在选中了一个Web应用程序后,可以创建新的内容数据库:
image
通过将新的内容数据库指定到不同的SQL Server物理服务器,在创建新的网站集时,就可以将新网站集所使用的内容数据库分布到不同的服务器上,达到负载均衡的效果。

当一个Web应用程序有多个内容数据库时,默认会使用最后创建的内容数据库来承载新的网站集。如果想指定一个特定的内容数据库来承载新网站集,可以将其他内容数据库的状态更改为“脱机”即可。这里的“脱机”并非指这个内容数据库不可用,而是不用它来承载新网站集。
image 

但是有时候,我们也需要将一个已经存在的网站集所使用的内容数据库从一个转移到另一个上面。比如,最开始的时候,我们这样设计SharePoint服务器场的拓扑,将所有的东东都安装到一台服务器上(除了用来进行测试和开发,我都不推荐在生产环境中使用这种拓扑结构):
image

但是一个月之后,我们发现数据库的增长速度远远超过我们的想像,这一台服务器很快就不堪重负,于是,我们添加一台新的服务器,专用跑SQL数据库:
image

然后,我们就需要将原来的内容数据