扩展层

From Apache OpenOffice Wiki
Jump to: navigation, search


扩展管理器使用两个扩展层,即用户和共享层。在共享层安装的扩展可以被所有用户使用,而哪些在用户层的扩展只能被该安装用户使用。扩展可以安装在当中任一层或同时在两个层中。在后一种情况,因为扩展无法选择层,所以当客户端需要使用扩展时必需确认到底使用的是何种扩展。


层的概念是上层的扩展模糊在下层的相同扩展。换句话说,高层扩展将给予优先权。因为用户层是上层,因此共享扩展只在用户层不存在相同扩展时才被使用。


这也只是一个简单化的模型。扩展永远不会作为一个整体来使用。实际上客户端程序访问特定的内容,比如组件,配置数据等等。而这些内容模糊下层的相同内容。例如,扩展包含某 UNO 服务,并被安装到了两个层中。当客户端初始化它时,只有上层的那个才会被使用。


扩展的版本对“选择过程”没有影响。即使共享层保留有比用户层还要新版的扩展,这个扩展也不会被使用。可是,有一种情况会使用共享扩展的内容。假设扩展有版本1和版本2,而不同版本可能包含不同的内容。例如,版本1可能包含一个不被包含在版本2中的服务 foo。如果现在版本1安装在共享层而版本2安装在用户层,这样客户端程序则可以从共享层实例化 foo。这仅仅在 foo 服务在用户层不存在的情况才可能发生。


当检查配置项的问题变得更明显了。我们假设扩展版本1添加了一个菜单 foo 和 版本2添加了菜单 bar。如果扩展安装在共享层而另一个在用户层,那么两个菜单都会出现。这是因为配置文件的节点被合并到配置中而不是 xcu 文件本身。于是,如果扩展包含相同名称的 xcu 文件,那么最后被安装的扩展的 xcu 文件将不会替换另一个扩展的 xcu 文件。第二个 xcu 文件无论怎样都可以改变第一个 xcu 文件定义节点的值。


未处理的内容

这部分内容像标题所示的一样完全没有被处理过。当安装扩展时,它将被复制到安装律己 This is content which, as the title indicates, is not processed at all. When installing the extension it is just copied to the install location. 永远不要尝试直接访问这个内容,相反应该创建一个配置相作为相同扩展的一部分,此扩展包含内容的位置。当访问配置项时,会使用适当的层并且获取数据的正确位置信息。


不管怎样,有一些复杂的情况。例如:对之前的例子做一些扩展,扩展版本1包含版本2没有的 foo 服务。版本1安装在共享层,版本2安装在用户层。foo 使用的一些数据也包含在扩展中。foo 可以使用 PackageInformationProvider 来查找到这些数据。此例子中这个服务将返回用户层扩展的位置。但版本2中可能存在或不存在这些数据,或与版本1中的数据不兼容。因为 foo 是版本1的一部分,所以能否与来自版本2的数据一起工作是不确定。另一个可能是一个配置项指向一个文件。但如果节点名在扩展的两个版本都一样的话,那么与之前一样,将获取用户扩展的数据。很明显,节点名称必需不同,这样 foo 才能获取对应扩展的对应数据。

Content on this page is licensed under the Public Documentation License (PDL).
Personal tools
In other languages