Office使用一个XML文件(叫作XML扩展包列表文件)描述你的智能文档解决方案,它包含了更新和配置该解决方案的目录。典型情况下这个文件叫作manifest.xml。我在示例代码中添加了一个框架manifest.xml(图10所示),并用红色高亮度显示了你应该修改的东西。
· 解决方案的ID。你应该使用GuidGen为智能文档解决方案生成一个唯一的GUID。这是强制性的,所有的解决方案都需要有一个唯一的ID,并且虽然没有严格的限制为GUID,但是这是确保唯一性的最好的方法。
· updateFrequency,它是Office应该多久(按分钟记)检查服务器的清单更新一次。更新都是由XML扩展包清单中指定的每个文件的版本标志控制的。如果版本不同,并且更新事件超期了,Office将把对应的新版本的文件从服务器下载到本地计算机上。
· 智能文档操作DLL的文件路径。这可以是URL或网络路径(如果DLL布署在网络上)或与清单文件位置关联的路径或文件名称。
· 智能文档操作DLL的CLSID。因为它实现了IsmartDocument COM接口,它就拥有一个Office用于载入它的COM CLSID。你可以在生成的用于实现ISmartDocument接口的ATL类的头文件中找到它。它是coclass(例子中的CScheduleSmartDoc)的uuid属性。
图10. XML清单文件
<?xml version="1.0" encoding="UTF-8" standalone="no"?> <manifest xmlns="http://schemas.microsoft.com/office/xmlexpansionpacks/2003"> <version>1.1</version> <updateFrequency>20160</updateFrequency> <uri>ScheduleSmartDocument</uri> <solution> <solutionID>{15960625-1612-46AB-877C-BBCB59503FCE}</solutionID> <type>smartDocument</type> <alias lcid="*">Simple Schedule Smart Document</alias> <targetApplication>Excel.Application.11</targetApplication> <file> <type>solutionActionHandler</type> <version>1.0</version> <filePath>ScheduleSmartDocument.dll</filePath> <CLSID>{0A9D54DE-12F8-4711-AF10-7D4ACA1D1924}</CLSID> <regsvr32/> </file> <file> <type>Other</type> <version>1.0</version> <filePath>ScheduleGraphic.GIF</filePath> </file> </solution> <solution> <solutionID>{443E624C-AE85-4b20-8522-1CFD5B4E7CBC}</solutionID> <alias>Schedule Smart Document XSL Transform</alias> <type>Transform</type> <context>http://schemas.microsoft.com/office/word/2003/wordml </context> <file> <type>primaryTransform</type> <version>1.0</version> <filePath>ScheduleReport.xsl</filePath> </file> </solution> </manifest> |
如果你还需要随着解决方案安装一些附加的文件(例如GIF或包含附加文本的HTML文件),你可以把它们列举在<solution>元素的下面,使用<file>元素分隔开。我只有出现在事务面板中的一张附加的GIF。
另一件阻碍了我几个小时的事情是清单中的<uri>元素的名称必须与你用于映射文档元素的XML大纲的名称相同。在例子中是ScheduleSmartDocument。
一旦你的智能文档与XML大纲一起标识了,你就能附加一个XML扩展包,把操作处理程序DLL与该文档关联。在Excel中,通过Data | XML | XML Expansion Packs打开对话框。你使用这个对话框先添加少量的扩展包(执行解决方案的manifest.xml文件),接着给文档附加一个扩展包。这个过程与用XML标记文档相似,只有智能文档开发者需要这样做——用户不需要这个对话框。换句话说,你使用Add-Ins 对话框(Tools | Templates and Add-Ins)的“XML扩展包”选项卡给文档附加了一个扩展包。
当用户打开拥有关联扩展包的文档的时候,Office将自动安装或更新他们的本地计算机上的扩展包文件。典型情况下扩展包安装在C:\Documents and Settings\All Users\Application Data\Microsoft\Schemas目录中,但是在未来的Office版本中可能改变这种情况。如果用户没有系统管理员权限,扩展包就安装在相应的每个用户的应用程序数据目录中(例如C:\Documents and Settings\Mike\Local Settings\Application Data\Microsoft\Schemas)。该XML扩展包中的用<runFromServer>true</runFromServer>标记的文件不会被下载并安装在用户的计算机上,而是每次使用时从服务器位置上直接打开。
如果你已经在本地计算机上开发了一个解决方案,你会发现在把它复制到布署服务器之后,Office仍然在你的开发计算机上使用的路径中查找清单文件。我也碰到了这个问题,最后发现Office把解决方案的路径加密存储在称为Solution URL的自定义文档属性中了。你把这个文件布署到服务器之后,需要把这个属性改变为服务器路径或使用“XML扩展包”对话框从布署服务器上附加该扩展包(这样将重新设置该属性的值)。接着你可以把拥有解决方案文件的服务器路径Excel工作薄保存回服务器。
为了作为用户测试这种情形,你应该关闭工作薄,选择Data | XML | XML Expansion Packs(Word中在Tools | Templates and Add-Ins下面),并从本地计算机上删除ScheduleSmartDocument扩展包文件。这使得你的开发计算机看起来像一台正常的用户计算机,即不知道扩展包的任何信息。下一步,从服务器上打开电子表格。这时候会出现一个对话框,询问你是否希望下载XML扩展包,你应该点击“是”。Office将下载扩展包清单中列举的文件并把它们安装在本地计算机上。
XML扩展包的特性比我们的简单的解决方案需要的特性多一些。实际上它们可以用于从服务器到客户端分发任何类型的文件,甚至于可以被链接成“清单集合”,这会引起Word或Excel引用几个链接的清单,就好像它们是一个大的清单一样。
查看本文来源