配置

From Apache OpenOffice Wiki
Jump to: navigation, search


尽管通过 vnd.sun.star.jobs: URL 由其实现名称调用的作业不需要配置,但作业通常都具有配置数据。配置软件包 org.openoffice.Office.Jobs 包含所有必要信息:

<?xml version="1.0" encoding="UTF-8"?>
  <!DOCTYPE oor:component-schema SYSTEM "../../../../component-schema.dtd">
  <oor:component-schema xmlns:oor="http://openoffice.org/2001/registry" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" oor:name="Jobs" oor:package="org.openoffice.Office" xml:lang="en-US">
      <templates>
          <group oor:name="Job">
              <prop oor:name="Service" oor:type="xs:string"/>
              <group oor:name="Arguments" oor:extensible="true"/>
          </group>
          <group oor:name="TimeStamp">
              <prop oor:name="AdminTime" oor:type="xs:string"/>
              <prop oor:name="UserTime" oor:type="xs:string"/>
          </group>
          <group oor:name="Event">
              <set oor:name="JobList" oor:node-type="TimeStamp"/>
          </group>
      </templates>
      <component>
          <set oor:name="Jobs" oor:node-type="Job"/>
          <set oor:name="Events" oor:node-type="Event"/>
      </component>
  </oor:component-schema>


Job 模板包含描述作业组件的所有属性。此模板的实例位于配置集 Jobs 中。

Job 模板的属性
Alias 字符串型。此属性被声明为配置集 Jobs 中相应集节点的名称。它的名称必须是唯一的,用于表示作业的结构化信息。在下面的示例 .xcu 文件中,其值是 "SyncJob"。在作业执行参数中,此属性作为 Config - Alias 传送
Service 字符串型。表示作业组件的 UNO 实现名称。在作业执行参数中,此属性作为 Config - Service 传送
Arguments any 条目集。此列表可以使用任意值填充,并表示此作业的专用配置数据集。在作业执行参数中,此属性作为 JobConfig 传送


作业属性 Alias 的创建可以为您开发组件提供更大的灵活性。您可以使用相同的 UNO 实现,但必须使用不同的别名进行注册。作业实例将在运行时使用自己的配置数据进行初始化,并可以检测所使用的表示法。


Documentation caution.png 您不能使用常规的 UNO 服务名称 com.sun.star.task.Jobcom.sun.star.task.AsyncJob 作为 Service 作业属性,因为作业执行程序无法通过服务名称找到正确的作业实现。为避免模糊,请使用组件的 UNO 实现名称。


每个作业实例都可以绑定到多个事件。一个事件指示一个特殊的办公软件状态,这些事件可以在运行时检测到(例如,OnFirstVisibleTask),还可以在显示第一个文档窗口时,由对作业执行程序的调用触发。

Event 模板的属性
EventName 字符串型。此属性被声明为配置集 Events 中相应节点的名称。它必须是唯一名称,用来描述一个功能状态。在下面的示例 .xcu 文件中,其值是 "onFirstVisibleTask"。

编写 UNO 组件 - 将组件集成到 OpenOffice.org - 作业 - 支持的事件的列表 总结了当前由办公软件触发的事件。此外,开发者可以利用 vnd.sun.star.jobs: URL 或通过在 com.sun.star.task.JobExecutor 服务调用 trigger() 来使用任意事件字符串。

JobList TimeStamp 条目集。此集包含绑定到此事件的作业的所有 Alias 名称列表。每个作业注册都可以与时间戳值组合。如果需要更多信息,请参阅下面对模板 TimeStamp 的介绍。


作为一项可选功能,绑定到事件的每个作业注册都可以通过两个时间戳值启用或禁用。在共享的 OpenOffice.org 中,管理员可以使用 AdminTime 值为每个新启动的用户办公软件实例重新启动作业,而不考虑这些作业以前的执行。这样做很有用,例如,如果新功能已加入到共享安装中,则对更新用户安装非常有用。

TimeStamp 模板的属性
AdminTime 字符串型。此值必须按照 ISO 8601 进行格式化。它包含只能由管理员调整的时间戳,可以用来重新激活此作业。
UserTime 字符串型。此值必须按照 ISO 8601 进行格式化。它包含此作业上一次根据配置的事件成功完成的时间。


使用此时间戳功能有时会很复杂。例如,假定有一个使用扩展管理器安装的作业。默认情况下,作业为已注册事件启用,但在第一次执行后将被禁用。默认情况下,不会存在用于已配置的事件的两个值(AdminTimeUserTime)。作为软件包文件一部分的 Jobs.xcu 片断,必须也不包含 AdminTimeUserTime 条目。因为两个值都不存在,所以不会进行检查,而且作业将启用。作业成功完成其任务(取决于 Deactivate 返回值)之后,则可通过全局作业执行程序关闭作业。在此情况下,将生成 UserTime 条目,并设定为当前时间。管理员可以设定更新的且有效的 AdminTime 值,以便再次重新激活作业,或者用户可以手动从用户安装的配置文件中删除其 User-Time 条目。


以下 Jobs.xcu 文件显示了作业配置的示例:

<?xml version="1.0" encoding="UTF-8"?>
  <!DOCTYPE oor:component-data SYSTEM "../../../../component-update.dtd">
  <oor:component-data oor:name="Jobs" oor:package="org.openoffice.Office" xmlns:oor="http://openoffice.org/2001/registry" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
      <node oor:name="Jobs">
          <node oor:name="SyncJob" oor:op="replace">
              <prop oor:name="Service">
                  <value>com.sun.star.comp.framework.java.services.SyncJob</value>
              </prop>
              <node oor:name="Arguments">
                  <prop oor:name="arg_1" oor:type="xs:string" oor:op="replace">
                      <value>val_1</value>
                  </prop>
              </node>
          </node>
      </node>
      <node oor:name="Events">
          <node oor:name="onFirstVisibleTask" oor:op="fuse">
              <node oor:name="JobList">
                  <node oor:name="SyncJob" oor:op="replace"/>
              </node>
          </node>
      </node>
  </oor:component-data>


此示例作业具有以下特点:

  • 其别名是 "SyncJob"。
  • 组件的 UNO 实现名称是 com.sun.star.comp.framework.java.services.SyncJob
  • 作业有自己的配置数据集,只有一个条目。该条目是一个 string,名称是 arg_1,值是 "val_1"。
  • 作业绑定到全局事件 onFirstVisibleTask,该事件在显示新 OpenOffice.org 实例的第一个文档窗口时被触发。此作业的下一执行得到保证,因为未显示时间戳值。


当在说明作业所绑定的事件时,使用 oor:op="fuse" 是至关重要的,这样多个 Jobs.xcu 粒子才能无损地合并。但是需要注意的是 oor:op="fuse" 只在 OpenOffice.org 2.0.3 之后的版本中可用,而且 Jobs.xcu 文件不能在较早版本的 OpenOffice.org 中使用。 对于较早版本的 OpenOffice.org,通常使用 oor:op="replace" 来替换 oor:op="fuse",但是这在合并多个 Jobs.xcu 粒子时有可能导致事件绑定缺失。


Documentation caution.png 作业不会在其已自行关闭时执行,而是在以后通过 vnd.sun.star.jobs:event=... 命令 URL 调用。这会使用户感到混乱,特别是对加载项,因为看起来自定义的 UI 项目不起作用。
Content on this page is licensed under the Public Documentation License (PDL).
Personal tools
In other languages