脚本智能化(转载)

脚本智能化


2001年5月15日发布 将于2001年6月11日存档

Microsoft® Office XP 引入了智能标记这一功能强大的新功能,使 Office 应用程序和 Microsoft® Internet Explorer 能够分析您输入或查看的信息,并提供指向相应内容信息的链接。当您编写报表或电子表格时,如果要快速查找某些信息,它将满足您的愿望。电子邮件地址是 Office 如何使用智能标记的一个恰当示例。当您键入某个人的姓名时,Office 将在 Outlook 联系人数据库中查找该姓名,如果存在该姓名,智能标记就允许您单击该用户名并从上下文菜单中选择一个选项。在这种情况下,您可以向此人发送电子邮件、召集会议、打开联系人或甚至插入该用户的地址。幸运的是,智能标记的开发人员意识到开发人员需要一个方法来编写新的智能标记,因此他们提供了智能标记 SDK。本文将简单介绍智能标记 SDK 并从脚本编写的角度说明它的用法。

智能标记的工作方式

要了解如何使用智能标记,有必要了解系统的工作方式。智能标记可以做两件事:1) 识别发送给它们的内容;2) 根据内容执行操作。“识别器”和操作是由一系列 COM 对象来实现的。默认情况下,Microsoft Office 提供了许多识别器和操作,例如我在先前示例中使用的名称识别器和操作。当 Word 加载时,它检查系统上有哪些识别器或操作加载项可用,然后确保这些加载项已加载,以便在您开始键入时,将所需的上下文传递给这些加载项。智能标记 SDK(从 Microsoft Office XP 智能标记 SDK(英文)可获取此 SDK)有一个很好的体系结构图,说明了智能标记的工作方式:

智能标记体系结构

图 1:智能标记功能的体系结构

对操作和识别响应的组件必须实现特殊的 COM 接口,这似乎会禁止使用脚本。但幸运的是,智能标记解决方案支持通过 XML 创建智能标记的机制,然后可以通过此种方式链接到服务器。这意味着您可以使用此种方式链接到在 ASP 页上运行的脚本,以完成大部分工作。

智能标记列表

智能标记列表提供了一种基于 XML 的简单机制,用以定义一组术语,并使智能标记不必实现完整的 COM 组件即可识别这些术语。您只需要用 XML 创建一个术语列表,然后创建遇到列表中的术语时所显示的操作列表。每当加载 Microsoft® Word、Microsoft® Excel 或 IE 时,智能标记列表加载项将加载 XML 定义,并确保在文档中遇到列表中的术语时显示包含所有操作的菜单。这种机制的最大优势是:操作可以链接到包含术语上下文的 ASP 页。

为了说明如何使用脚本来发挥这种优势,我为 scripthappens.com 构建了一个 Microsoft® VBScript 语法帮助程序。其中,术语列表是 VBScript 关键字、函数和语句的列表,当用户使用 Word、Excel 或 IE 中的智能标记时,将显示两个操作:“从 Scripthappens.com 获取帮助”和“ScriptHappens.com 棒极了”。第一个操作导航到 ASP 页 getref.asp,它显示 VBScript 关键字以及 scripthappens.com 提供的所有示例的所有相关信息。第二个操作是 scripthappens.com 的纯广告。

如何实现列表

智能标记列表组件从 XML 文件 msotl.xml 获取有关它的所有信息。该文件包含术语列表、要定义的操作和一些有关智能标记本身的命名信息。您首先需要设置智能标记列表的名称(在此示例中为“脚本术语”),然后需要说明该智能标记列表的用途。接着,需要设置将用于该智能标记列表的术语。XML 定义提供了一个 termlist 元素,用于填写用逗号分隔的术语列表:

  <FL:terms>
  <FL:termlist>do while, setLocale, getLocale, getref, Class, function, sub, for each</FL:termlist>
  </FL:terms>

在这个示例中,为了简单起见,我只使用了几个 VBScript 术语。

定义了所有术语后,就只需要设置用户单击智能标记时所出现的操作了。“列表”XML 定义中包含 <FL:actions> 元素,该元素包含将要出现的所有操作。每个操作都有一个标题和 URL,当用户选择菜单项时将调用它们。在此示例中,我为 scripthappens.com 添加了一个 gethelp 操作和一个免费广告。gethelp 操作包含一个链接到 getref.asp 页的 URL,它将术语名当作参数。这实现起来很简单,因为 {TEXT} 将替代为使智能标记被调用的术语。

定义操作的 XML:

  <FL:actions>
      <FL:action id="Lookupdef">
      <FL:caption>&amp;从 Scripthappens.com 获取帮助</FL:caption> 
      <FL:url>http://www.scripthappens.com/getref.asp?String={TEXT}</FL:url> 
      </FL:action> 
     <FL:action id="CompanyInfo">
      <FL:caption>&amp;Scripthappens.com 棒极了</FL:caption> 
      <FL:url>http://www.scripthappens.com</FL:url> 
      </FL:action>
  </FL:actions>

Word 中的智能标记

图 2:智能标记在 Word 中的外观

将所有信息输入 msotl.xml 文件后,最后需要做的一件事就是将该文件保存到计算机上的相应位置。如果希望所有用户都可以使用该列表,则将其保存到 program files\common files\microsoft shared\smart tags\lists。如果只允许特定用户使用该列表,则将其保存到:驱动器名:\Documents and Settings\username\Application Data\Microsoft\Smart Tag Lists,这将确保此列表可为特定用户所用。

msotl.xml 示例:

<FL:smarttaglist xmlns:FL="urn:schemas-microsoft-com:smarttags:list">
  <FL:name>脚本术语</FL:name> 
  <FL:lcid>1033</FL:lcid> 
  <FL:description>脚本术语列表</FL:description> 
  <FL:moreinfourl>http://www.scripthappens.com/smarttags</FL:moreinfourl> 
  <FL:updateable>true</FL:updateable> 
  <FL:autoupdate>true</FL:autoupdate> 
  <FL:lastcheckpoint>100</FL:lastcheckpoint> 
  <FL:lastupdate>5123942</FL:lastupdate> 
    <FL:updateurl>http://www.scripthappens.com/smarttags/listupdate.xml</FL:updateurl> 
  <FL:updatefrequency>20160</FL:updatefrequency> 
  <FL:smarttag type="urn:schemas-scripthappens-com:script#terms">
  <FL:caption>脚本帮助</FL:caption> 
  <FL:terms>
  <FL:termlist>do while, setLocale, getLocale, getref, Class, function, sub, for each</FL:termlist>
  </FL:terms>
  <FL:actions>
      <FL:action id="Lookupdef">
      <FL:caption>&amp;从 Scripthappens.com 获取帮助</FL:caption> 
      <FL:url>http://www.scripthappens.com/getref.asp?String={TEXT}</FL:url> 
      </FL:action> 
     <FL:action id="CompanyInfo">
      <FL:caption>&amp;Scripthappens.com 棒极了</FL:caption> 
      <FL:url>http://www.scripthappens.com</FL:url> 
      </FL:action>
  </FL:actions>
  </FL:smarttag>
  </FL:smarttaglist> 

实现“帮助 ASP 页”

为了使本文的示例简洁,我实现了一个初步的帮助页,它只为请求帮助的特殊术语返回文档信息。理想情况下,文档信息应存储在数据库中,ASP 页将根据所查询的术语查询数据库。在此示例中,我采用了一种“投机取巧”的方法:将文档信息存储在子文件夹的文件中,只为查询的术语加载相应的文件。我知道这种方法的技术含量很低,但它可以使页面变得简洁。

<%
dim strTerm
strTerm = server.mappath("\terminfo") & ("\") & Request.QueryString("string") & ".htm"
set myFSO = CreateObject("scripting.FileSystemObject")
Set ts = myFSO.OpenTextFile(strTerm)
response.write ts.readall
%>

此示例的关键是可以很简便地构建 Office 智能标记和服务器上运行的脚本之间的链接。这里所用的示例(脚本术语)可能不是最有用的示例,但是它说明了如何将信息输入到 Office 中。我建议您试验基于 XML 的智能标记功能,并将其与服务器上的脚本集成。

同样,我们也希望经常收到您对如何简化脚本提出的反馈和建议。欢迎通过 msscript@microsoft.com 随时与我们联系,或使用 msnews.microsoft.com 上的新闻组发表您的高见。

 


Andrew Clinick 是 Microsoft Programmability 工作组的项目经理。因此,凡是涉及脚本的工作,他都可能会参与。


已存档的 Scripting Clinic 专栏

2001 年
4 月 27 日    编写事件脚本(英文)
3 月 13 日    用 Microsoft Office Developer 编写脚本(英文)
1 月 16 日    Visual Studio for Applications 简介(英文)
2000 年
12 月 11 日    脚本的突出效果(英文)
11 月 13 日    Windows Script Host 5.6(英文)
10 月 16 日    用脚本来连接办公室和 Web(英文)
9 月 11 日    在电子邮件系统中使用脚本(英文)
8 月 14 日    Pocket 中的脚本(英文)
7 月 14 日    JScript.NET 简介(英文)
6 月 12 日    Orlando 中的脚本(英文)
4 月 12 日    用脚本编写成功之路(英文)
3 月 13 日    用脚本编写 Web 服务(英文)
2 月 14 日    Windows 2000:脚本的天堂(英文)
1 月 10 日    编写数据库脚本(英文)
1999 年
12 月 13 日    Windows Script 5.5 的新特性(英文)
10 月 11 日    探索脚本(英文)
9 月 13 日    Windows 脚本组件 - 它们出现了(英文)
8 月 9 日    语言问题(英文)
7 月 12 日    遭遇脚本(英文)
6 月 14 日    只要它是活动的,就为它编写脚本(英文)
5 月 10 日    Microsoft 用常规表达式来增强 VBScript(英文)
4 月 12 日    远程脚本(英文)
1 月 29 日    明智的 Perl(英文)
1998 年
11 月 4 日    版本 5.0 脚本引擎的新特性(英文)
8 月 4 日    Microsoft 脚本引擎和 2000 年(英文)
6 月 11 日    脚本工具:实际应用的组件(英文)
5 月 4 日    VBScript 还是 JScript?(英文)

照片的商誉权属于:Sean Masterton/Microsoft Corporation

posted @ 2005-07-16 15:29  Freedom  阅读(553)  评论(0编辑  收藏  举报