随着Office System 2007的发布,微软公司的新一代企业业务平台变得前所未有的强大。Office相关开发也正逐渐变得炙手可热。为了帮助开发者更好地了解并基于Office System 2007进行开发,微软公司将发布一系列有关Office System 2007的参考文档以及相关辅助软件。
昨天微软公司就发布了如下三个与Office System 2007相关的软件和参考文档:
[1] 2007 Office System Document: Compliance Features in the 2007 Microsoft Office System
下载地址:http://www.microsoft.com/downloads/details.aspx?FamilyID=d64dfb49-aa29-4a4b-8f5a-32c922e850ca&DisplayLang=en
这篇洋洋洒洒的67页的文档全面介绍了Office System 2007的适应性以及扩展性能力。每一个应用了Office System 2007的企业都将会有它自己的个性化、需要定制的需求。这份文档就将告诉我们Office System 2007开发者什么样的需求是能够实现的,应该怎样实现等相关内容。文档份为如下几大部分:
- Introduction
- An Overview of Regulatory Compliance
- The 2007 Microsoft Office System Products
- Compliance Capabilities in the 2007 Microsoft Office System
- Compliance Extensibility Opportunities
- Development Tools for Extending Office and Windows SharePoint Services
- Summary
- Appendix I: Resources
- Appendix II: References
如果你打算定制出一套自己的Office System 2007系统,那么这份文档绝对不容错过。
[2] 2007 Office System Document: Lists of Control IDs
下载地址:http://www.microsoft.com/downloads/details.aspx?FamilyID=4329d9e9-4d11-46a5-898d-23e4f331e9ae&DisplayLang=en
Office System 2007的UI中引入了一个新东西——Ribbon。虽然对于这个Ribbon,使用者仁者见仁,众说纷纭,不过作为开发者,我们还是有必要赶上发展的脚步。Ribbon这个东西相关的开发也设计得独具匠心,具体内容就不详细说了,有兴趣的朋友可以先参考一下这篇MSDN文档:Customizing the Office (2007) Ribbon User Interface for Developers (Part 1 of 3) 。
微软公司发布的这个软件其实是一个自解压的压缩文件,解压后将得到24个Excel文件,其中分别列出了Office System 2007系列软件中使用的内建Ribbon的ID,方便我们开发时参考。
下图就显示了Word中内建的部分Ribbon的ID:
[3] 2007 Office System Sample: Open XML File Format Code Snippets for Visual Studio 2005
下载地址:http://www.microsoft.com/downloads/details.aspx?FamilyID=8d46c01f-e3f6-4069-869d-90b8b096b556&DisplayLang=en
不得不承认,随着Office System 2007的发布,Office开发变得更加简化,提供的API也更加丰富。不过由于Office System 2007本身的复杂性,对于初学者来说,掌握Office System 2007开发仍旧不是一件容易的事情。甚至对于一些最常用功能的实现都无所适从。
微软公司发布的这个Visual Studio 2005的Code Snippets集合就提供了一系列关于Office System 2007开发中经常用到的功能的代码片断。关于Visual Studio 2005的Code Snippets,其实就是一系列常用的代码片断,可以看作是一种代码级别的复用。这里不再多谈Code Snippets,如果你还不是很了解这个强大功能,请参考这篇MSDN文章:How to: Manage Code Snippets。
下面就是在Visual Studio 2005中使用该Code Snippets时的界面:
如上图所示,选择了“Excel: Get sheet info”之后,Code Snippets将自动插入如下一大段代码:
public struct SheetInfo
{ public string SheetName;
public string SheetType;
public SheetInfo(string SheetName, string SheetType)
{ this.SheetName = SheetName;
this.SheetType = SheetType;
}
}
public List<SheetInfo> XLGetSheetInfo(string fileName)
{ // Return a generic list containing info about all the sheets.
const string documentRelationshipType = "http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument";
// Fill this collection with a list of all the sheets
List<SheetInfo> sheets = new List<SheetInfo>();
using (Package xlPackage = Package.Open(fileName, FileMode.Open, FileAccess.Read))
{ // Get the main document part (workbook.xml).
foreach (System.IO.Packaging.PackageRelationship relationship in xlPackage.GetRelationshipsByType(documentRelationshipType))
{ // There should only be one document part in the package.
Uri documentUri = PackUriHelper.ResolvePartUri(new Uri("/", UriKind.Relative), relationship.TargetUri); PackagePart documentPart = xlPackage.GetPart(documentUri);
// Load the contents of the workbook, which is all you
// need to retrieve the names and types of the sheets:
XmlDocument doc = new XmlDocument();
doc.Load(documentPart.GetStream());
// Create a NamespaceManager to handle the default namespace,
// and create a prefix for the default namespace:
XmlNamespaceManager nsManager = new XmlNamespaceManager(doc.NameTable);
nsManager.AddNamespace("default", doc.DocumentElement.NamespaceURI);
// Loop through all the nodes, retrieving the information
// about each sheet:
foreach (System.Xml.XmlNode node in doc.SelectNodes("//default:sheets/default:sheet", nsManager)) { string sheetName = string.Empty;
string sheetType = "worksheet";
sheetName = node.Attributes["name"].Value;
XmlAttribute typeAttr = node.Attributes["type"];
if (typeAttr != null)
{ sheetType = typeAttr.Value;
}
sheets.Add(new SheetInfo(sheetName, sheetType));
}
// There's only one document part.
break;
}
}
return sheets;
}
我们既可以直接使用这些已经生成好了的功能,也可以通过查看代码了解、学习Office System 2007的常用操作,简直爽呆了!
亚马逊网上商店的大名相信所有人都听过,随着2006年岁末的来临,亚马逊给出了今年一年来读者最喜欢的10本计算机图书的排行榜。说是“读者最喜欢的(Top 10 Customers' Favorites)”,其实也应该就是销售榜吧。榜上有名的10本中,我们对一些已经耳熟能详,且国内已经发售了中文版,也自然还有一些是我们不太熟悉的。
这里我就将这10本书一一列出,并加上一些我的陋见,希望能对朋友们的选择、阅读、学习有所帮助。当然,从这份榜单中,我们似乎也能看出这一年来的技术热点,甚至也可以悟出一些对未来走势的预测。
[1] Ajax in Action(中文版:《Ajax实战》)
作者:Dave Crane
出版商:Manning Publications (中文版:人民邮电出版社)
出版日期:October 1, 2005
Dflying三言两语:意料当中(或者可以说意料之外)地,Ajax in Action夺得了年度总冠军。似乎这正是今年热炒的Ajax的最有力的见证吧。这本书我读过英文版和中文版两个版本,个人觉得似乎并不像所谓“Ajax圣经”那么的夸张的精彩。不过客观来说,确实是一本深入浅出的Ajax书籍,限于Ajax实现的多样性以及Ajax技术的复杂性,这本书自然无法在小小的篇幅中逐一展开仔细论述。本书有些地方显得简明扼要,有些地方却略显拖沓,但总体说来,仍旧无愧于目前Ajax的第一号好书(我的老板也这么评价)。无论是新手入门还是已经轻车熟路,这本书中都能让你对Ajax开发有一些新的想法。若你想现在开始Ajax之旅,那么这本书则毫无疑问地将成为你的不二之选。本书的中文版由李锟老师组织ajaxcn.org一起翻译,并由人民邮电出版社图灵公司出版,实为细心之作,同样非常值得推荐。
[2] CSS Mastery: Advanced Web Standards Solutions(中文版:《精通CSS--高级Web标准解决方案》)
作者:Andy Budd
出版商:friends of ED (中文版:人民邮电出版社)
出版日期:February 13, 2006
Dflying三言两语:Ajax在今年的火爆似乎造成了一系列关于Web,特别是标准化的Web技术图书的热销。虽然CSS并不是一个很新的技术,然而多年以来,CSS领域的“经典图书”却一直虚位以待。这样,CSS的复杂性、其中蕴含的种种鲜为人知的技巧以及Web标准化中对CSS的愈加依赖也让这本较为深入的书非常受读者欢迎。我曾粗读过本书,对于一些CSS的常见问题,特别是基于Web标准开发时所用到的CSS,书中都有非常不错的介绍。如果你刚刚不得已抛弃了“习惯好用”的<table>而转向“让人郁闷”的<div>,那么本书毫无疑问将能够让你尽快从郁闷中再次快乐起来。本书的中文版同样由人民邮电出版社图灵公司组织翻译,虽然我没有读过中文版,但对于图灵公司的作品,仍旧一如既往地非常信任。相信中文版不会让各位读者失望的。
[3] Agile Web Development with Rails: A Pragmatic Guide
作者:Dave Thomas
出版商:Pragmatic Bookshelf
出版日期:July 1, 2005
Dflying三言两语:Ruby on Rails同样是今年的亮点之一,说RoR挽救了Ruby一点都不足为过。借助Web 2.0的热度,RoR的快速开发(号称开发速度提高10倍!?)显然成为各种追逐新技术、追逐拥抱变化能力的公司的掌上明珠(看看现在网站版本更新的速度以及那“永远去不掉的Beta Logo”)。RoR似乎也俨然成为了今后软件发展的潮流——更加自动化、更加简易的软件开发模式如同共产主义社会一样让我们向往。本书则正在这个时候应运而生,我曾粗浅了解过一段时间的RoR,也曾读过此书,如果你仍旧比较传统,不够“敏捷”,迫切地希望能有一本捧在手中细细研读的图书,那么此书将会非常让你满意。试想一下通过一种最传统的信息传播媒介去学习一门发展最快的技术,会是怎样一种奇特的感觉呢?
[4] SCJP Sun Certified Programmer for Java 5 Study Guide (Exam 310-055) (Certification Press Study Guides)
作者:Katherine Sierra
出版商:McGraw-Hill Osborne Media
出版日期:December 21, 2005
Dflying三言两语:不知道为何这本认证考试用书也如此地畅销,难道老外也是“认证不认人”的?不过我仍对几年前学习Java认证时使用的这本教材的兄弟图书印象深厚。我知道了怎样的一本书能够“讲明白”某件东西,而不是反过来“讲糊涂”某件东西。回顾一下国内的那些“故作深奥”的教科书(特别我要提到的是我在大学时编译原理课本,绝对让我永生难以忘怀……),差距就是这么明显。
[5] Dreamweaver 8: The Missing Manual
作者:David Sawyer McFarland
出版商:Pogue Press
出版日期:December 22, 2005
Dflying三言两语:1998年,我开始接触Web程序设计,当然,那时的“Web程序设计”主要还是以“做网页”为主。Frontpage让我从傻瓜直至初入门道,又很快就陷入到它生成的垃圾HTML中,满屏的<font>标签曾将我郁闷不已。然而当时我的水平还很难手工书写复杂的HTML,幸运的是,1999年我接触到了当时还很稚嫩的Dreamweaver 3,虽然充满了Bug且对中文支持非常不好,然而在我眼中却已经将Frontpage远远地抛在了后面。Dreamweaver 4、5一直陪伴我走过了很长的日子,那时我的每一个网站中都有它的身影。随着后续版本添加的对PHP、ASP等编程语言的支持,Dreamweaver 似乎依稀有了一统天下Web开发IDE的影子。可是世事难料,转眼间就物是人非,Dreamweaver的版本号已经走到了8,Macromedia也已经皈依了Adobe。而今天,让我欣喜地看到了这本讲述Dreamweaver的图书也排到了前十名的榜单中。虽然我未曾读过此书,但从书名“missing manual”中,我们仍旧可以分辨出Dreamweaver的生机和活力以及开发者社区对其的厚爱。让我们祝愿Dreamweaver一路走好!
[6] The Photoshop Channels Book
作者:Scott Kelby
出版商:Peachpit Press
出版日期:February 14, 2006
Dflying三言两语:同样是1998年,我在接触Web开发时也不可避免地开始学习图形图像处理,那时的Photoshop已经成为了领域内的霸主,我则怀着敬畏的心情开始了学习。日子一天天过去,Photoshop的强大功能(特别是其中的滤镜插件)让我深深陶醉于其中。2001年,我幸运地通过了Adobe的认证考试,成为了一名ACCD,那时的版本似乎还是5.0……Photoshop中的通道(也就是本书的主题——Channel)是学习以及使用过程中的一个难点,当然这个东西也非常的有用。真正的Photoshop高手,没有一个不把通道当作最重要的武器的,网络上如此多PS图片,每一张都少不了通道的功劳。我没有读过这本书,但看到它在榜单上的位置,仍旧让我有充分的理由相信其中的内容。熟练掌握通道使用技巧是每一个Photoshop专家的必要条件,如果你正处于这样的阶段,那么这本书应该非常值得一读。
[7] CLR via C#, Second Edition(中文版:《框架设计(第2版):CLR Via C#》)
作者:Jeffrey Richter
出版商:Microsoft Press (中文版:清华大学出版社)
出版日期:February 22, 2006
Dflying三言两语:经典总归是经典,虽然改了名字,本书的风华却依旧不减当年。本书的第一版陪伴了我学习.NET的日日夜夜,我也正是由于这一本书对.NET开始了一段时间的痴迷,也对Jeffrey Richter和李建忠老师产生了深深的崇拜。学习过程中的一本好书,往往会成就一个天才(当然,不是说我自己-_-b),而一本坏书,则难免造就一个蠢才。虽然没有读过第二版,但我仍坚信本书就是造就出一批.NET专家的温床。如果你迫切地想了解.NET的精髓和基础——CLR,那么这本书就将是照亮你黑暗的火把。近日,本书的中文译本也由清华大学出版社出版,从我心里深处,很可惜李建忠老师未能执笔其中,新译者也让对本书的评论变得褒贬不一,不过作为我个人来讲,还是希望朋友们能够多一些宽容,特别是对于一些初出茅庐的朋友——多一些关心,多一些包容,或许就能让幼苗有了成长的空间……让我们相信一切都将变得更好。
[8] Adobe Photoshop Restoration & Retouching (3rd Edition) (Voices That Matter)
作者:Katrin Eismann
出版商:New Riders Press
出版日期:November 17, 2005
Dflying三言两语:正如每一个基督教徒都必被一本《圣经》一样,这是一本每一个Photoshop使用者都必须阅读的书!本书的第一版就极为经典,当初无愧是我最好的Photoshop老师。现在推出的第三版基本都被重写,更是完全跟上了Photoshop CS2的变化,虽然我不曾亲自体验过第三版,但它占据的排行榜位置依旧印证了我的信心。如果你正开始学习Photoshop,那么除了这本书之外,还有什么是值得阅读的呢?
[9] iWoz: From Computer Geek to Cult Icon: How I Invented the Personal Computer, Co-Founded Apple, and Had Fun Doing It
作者:Steve Wozniak、 Gina Smith
出版商:W. W. Norton
出版日期:September 25, 2006
Dflying三言两语:这似乎是一本讲述Apple计算机发明过程,同样也是发展历史的一本书,专业和非专业的朋友都适合阅读。不过这也是一本需要一定的背景,特别是文化背景才能够深入理解的书,如果能融入其中,想必一定会觉得非常有趣吧。Guy Kawasaki评价说“Every engineer—and certainly every engineering student—should read this book….It is, in a nutshell, the engineer's manifesto.”可见其分量。这本书已经被我添加到阅读计划当中,希望不会让我失望。
[10] Software Estimation: Demystifying the Black Art (Best Practices (Microsoft))
作者:Steve McConnell
出版商:Microsoft Press
出版日期:March 1, 2006
Dflying三言两语:Microsoft Press出版的书一直很多,不过很遗憾,大多数都是中庸平凡之流。然而这本书却似乎不那么平凡,这是一本与项目管理、成本时间估算有着密切联系的书,其中触及了软件开发过程中很多旁人不愿、不能甚至不敢触及的东西——“Software Estimation focuses on the art of software estimation and provides a proven set of procedures and heuristics that software developers, technical leads, and project managers can apply to their projects.”(引自Amazon图书介绍)。仔细阅读一下本书,相信每个人都能够受到一些启发,产生一些新的想法。
Anthem.NET近日有朋友和我提到Anthem.NET这个同样基于ASP.NET的Ajax框架,今天有机会亲自尝试了一下。初步的感觉似乎和ASP.NET AJAX不相上下,甚至某些地方要强于ASP.NET AJAX。当然,半个小时的尝试不能算作什么,这篇文章的很多比较结论可能只是因为我的“无知”造成的,取名“管中窥豹”,其意正在如此。
Anthem.NET的主页在这里,提供了下载文件以及大量的示例程序。同时,博客园的木野狐兄弟也写了一些很好的关于Anthem.NET的文章,值得我们学习(希望木野狐兄弟再接再厉啊!)。
本文将分别用ASP.NET AJAX和Anthem.NET实现一个最最最最简单的Ajax应用,即:页面中一个Button一个Label,点击Button将在服务器端设置Label中的Text,当然,这一切都是以Ajax异步回送的方式进行的。并比较这两种实现方式的编写代码、生成客户端脚本大小、执行效率等。
ASP.NET AJAX程序代码
我想,对于ASP.NET AJAX这部分内容,大家已经非常熟悉了:ScriptManager和UpdatePanel而已:
<asp:ScriptManager ID="ScriptManager1" runat="server" />
<div>
<asp:Button ID="btnSetText" runat="server" Text="Set Text" OnClick="btnSetText_Click" />
<asp:UpdatePanel ID="up1" runat="server">
<Triggers>
<asp:AsyncPostBackTrigger ControlID="btnSetText" EventName="Click" />
</Triggers>
<ContentTemplate>
<asp:Label ID="lbText" runat="server" />
</ContentTemplate>
</asp:UpdatePanel>
</div>
服务器端的处理函数也很简单:
protected void btnSetText_Click(object sender, EventArgs e)
{ lbText.Text = "This text is set on server side.";
}
大功告成!
Anthem.NET程序代码
将Anthem.dll拷贝到Web Site的bin文件夹下,然后在web.config的<configuration>\ <system.web>\ <pages>\ <controls>中添加如下一行,注册Anthem.NET控件:
<add tagPrefix="anthem" namespace="Anthem" assembly="Anthem"/>
Anthem.NET页面不用添加ScriptManager,而是提供了一套自己就带有Ajax功能的、继承于现有ASP.NET控件的服务器端控件。根据上面在web.config文件中的注册,这部分控件的前缀为anthem。
Anthem.NET程序的页面显得非常简单:
<div>
<anthem:Button ID="btnSetText" runat="server" Text="Set Text" OnClick="btnSetText_Click" />
<anthem:Label ID="lbText" runat="server" />
</div>
服务器端的处理函数比ASP.NET AJAX的多出一行,明确指出需要更新Label中的内容(这一句其实与ASP.NET AJAX的UpdatePanel有着异曲同工之妙):
protected void btnSetText_Click(object sender, EventArgs e)
{ lbText.Text = "This text is set on server side.";
lbText.UpdateAfterCallBack = true;
}
似乎更加简单!
运行结果
两个示例程序运行结果完全一致:点击按钮将执行一次异步回送,然后Label中将显示出服务器端设定的文字。
ASP.NET AJAX和Anthem.NET实现方式的比较
一样的功能,但是却有比较:

结论
了解还不够深入,结论先不下了……上面的数据似乎可以说明一些问题,所谓滴水藏海啊!
Enterprise Library for .NET Framework 2.0是一个非常好的东西,让我们在企业开发应用中有章可循。最近微软公司又在我们关心的32位和64位平台性能问题上给出了一份比较测试文档,又需要选择32位和64位平台的朋友们可以参考一下(在此下载)。
这份文档中首先给出了测试用机的配置:
然后针对如下几个场景在32位和64位平台中进行了性能测试比较:
- Logging Application Block Scenario: Write to Event Log
- Data Access Application Block Scenario: ExecuteNonQuery
- Scalability View of the Data Block
- Caching Block Scenario: Adding Random Item in the Cache in Memory
最后给出了两条结论,摘录如下:
- The 64-bit machine has 2 & 4 processors compared to 2 & 4 processors on the 32-bit machines. Also, the processor speed on 64-bit machines is 1804 MHz per processor as compared to 2790 MHz per processor on 32-bit machines. With these performance numbers in perspective, it can be observed that with less CPU processor power the gains on scalability moving to 64 bit was 100%.
- The second important factor for nominal performance of a 64-bit machine revolves around the use of system resource and memory space. For this analysis, we used the Enterprise Library Application Block default test cases. These test cases are not specifically targeted to assess the new features of 64-bit architecture. Since one of the main benefits of 64-bit machine is its high memory and improved architecture, this would be good future work.
总体说来,这份文档还是非常具有指导意义的!且文档只有19页,足够简明,强烈推荐每个使用Enterprise Library for .NET Framework 2.0的朋友都去看一下。
顺便说一句,TerryLee的Enterprise Library系列文章也极为精彩,而且使用中文写的,非常值得一读!
再列出几本不错的Enterprise Library的图书,感兴趣的朋友可以读一下:
- Microsoft Patterns & Practices Library-january 2006 (Patterns & Practices)
- The Definitive Guide to the Microsoft Enterprise Library
- Effective Use of Microsoft Enterprise Library: Building Blocks for Creating Enterprise Applications and Services
顺便问一下各位在博客堂用Windows Live Writer写Blog的朋友们,我在用Windows Live Writer的时候,修改一个已经发布了的帖子会出现下面图示的错误,以致根本无法修改。有没有朋友遇到同样问题呢?应该如何解决呢?谢谢!

我是Dflying Chen,感谢开心就好大哥的提携,让我能再博客堂有了自己的一片地方。今天第一次到这里发帖,向各位问好了!
来到博客堂之前,我在博客园中的Blog中写了很多ASP.NET AJAX(Atlas)的内容,欢迎各位阅读并赐教!
关于在博客堂中的文章内容形式,我想了好几天都没有想好。不过无论写什么,都希望朋友们能够对我的文章提出意见,发表留言。我会尽快逐一回复。
谢谢!