Tuesday, May 13, 2008
虽然我一直认为WSP Builder比VSeWSS好用很多,但似乎使用VSeWSS的人还是比WSP Builder多很多,所以...
最新的VSeWSS文档下载,包括了多篇不错的指导文档,以及各种典型VSeWSS项目的Walkthrough。
另1:能够支持VS 2008的VSeWSS版本计划在6月份发布。
另2:STSDev 1.3发布了,这是STSDev 2.0之前的最后一个版本,基本上是一个bug fix version。STSDev开发团队对2.0有一个很大的计划,除了功能上的改进,还打算也弄成一个VS Add-in的模式。我曾发邮件给他们抱怨说,现在VS Add-in已经够多了(WSPBuilder、VSeWSS、AC's VS SharePoint Project Utility Tool Window),Developer通常不喜欢为了同一个目的在自己的VS里面装太多插件。他们的回信很简单:“我们的目标就是把上述功能重复的Add-in都干掉”...
Tuesday, May 06, 2008
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上。
试看视频:实验 - 定义业务流程和工作流
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接口了。
更详细的做法当然是参考IBM提供的文档了。
在 Microsoft .NET 应用程序中使用 IBM Lotus Domino
Common ground: COM access to Domino objects
最后,如果你有很多很多的Domino数据库需要爬网,那么可以尝试使用MOSS Search Admin这个工具。
Wednesday, April 02, 2008
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播放器。
Tuesday, March 25, 2008
经常有人问我“如何禁止用户修改某某字段?”之类的问题。通常这一类的问题会牵涉到对列表项编辑页面的修改。
其实简单来说,如果你熟悉SharePoint开发,解决上面所说的这个问题就非常简单了。因为SPField有一个ShowInEditForm的属性,你只需要这样:
SPField titleField = item.Fields["Title"];
titleField.ShowInEditForm = false;
但如果你不想用这样的方法,或者想了解更多对列表项编辑页面的定制,那就继续看下去。
对列表项编辑页面最常见,也最方便的定制方法,就是使用SharePoint Designer打开这个页面直接进行修改。通常,通过往这个页面上添加相应的JavaScript脚本,就可以完成我们需要的效果。
比如下面的这个任务列表项的编辑页面,我们希望,它能够隐藏“标题”字段,同时,自动将“截止日期”所对应的文本框中的值设置为2008/1/1(是的,我知道要做到这个只需要更改字段默认值,但这不是重点...)。
<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>
通过灵活使用JavaScript,基本上我们可以实现我们所需要的大部分效果。
Sunday, March 23, 2008
Thursday, March 06, 2008
Wednesday, February 27, 2008
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的定义,仍然可以按与命名参数一模一样的写法即可。
Monday, February 18, 2008
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,大概年中发布
Sunday, February 03, 2008
根据这篇文章,在微软刚过去的08财年第二季度(即日历年2007/10 - 2007/12这三个月),微软的SharePoint销售数据是10亿美元!如果你觉得人们不喜欢SharePoint,那么微软的利润报表会告诉你,不,无数人都很喜欢SharePoint!:)
更新:
应群主大S要求,如果您对MOSS开发有心得,欢迎加入目前来看似乎已经是最大的MOSS开发MSN群:group194869@xiaoi.com。
Saturday, February 02, 2008


“WF本质论”(“Essential Windows Workflow Foundation”),其重要性确实可以与“COM本质论”相提并论。“WCF服务编程”(“Programming WCF Services”),基本上把WCF Developer应该了解的都讲到了。两本书的中文版翻译质量皆佳,值得推荐。另外对WPF基本没有了解,就不推荐了...
Wednesday, January 30, 2008
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”一节。
Thursday, January 17, 2008
今天有人在MOSS开发的MSN群中提了一个问题,就是如何彻底禁止对SharePoint页面的个性化?也就是不允许任何人,包括管理员,使用SharePoint页面个性化功能来更改页面。当时隐约觉得应该可以通过修改Master Page上的SPWebPartManager控件来完成,之后试验了一下,确实可以。
使用SharePoint Designer打开,或者创建一个新的Master Page,找到SPWebPartManager控件,如下所示,修改它的属性“Personalization-Enabled”为“false”即可。
让SharePoint站点使用此Master Page之后,就会看到“编辑页面”这个按钮已经变成灰色,无法选择了:

Thursday, January 03, 2008
刚才在china-pub看到《敏捷软件开发:原则、模式与实践(C#版)》已经出版了。这本书是以前那本《敏捷软件开发:原则、模式与实践》的C#版,这是不是说明C#程序员的数量已经多到Robert Martin无法忽视的程度了呢?:)
既然说到了图书,就再推荐一本我现在正在温习的,《高级.NET程序设计》(《Advanced .NET Programming》,中文版翻译质量比较差劲)。此书的内容完全对得起书名中的“Advanced”,要比一般的《Professional XXX》好得多,如果你已经看完了《CLR via C#》,那么强力推荐这本。可惜的是此书的作者并未随着.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上。
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版本。
Saturday, December 15, 2007
Thursday, December 13, 2007
Thursday, December 06, 2007
可以将网站集、网站、列表、列表项数据在站点间(或服务器间)进行复制,使用了SharePont的Content Migration API。
点击查看