配置
尽管通过 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 实现,但必须使用不同的别名进行注册。作业实例将在运行时使用自己的配置数据进行初始化,并可以检测所使用的表示法。
![]() |
您不能使用常规的 UNO 服务名称 com.sun.star.task.Job 或 com.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 服务调用 |
JobList
|
TimeStamp 条目集。此集包含绑定到此事件的作业的所有 Alias 名称列表。每个作业注册都可以与时间戳值组合。如果需要更多信息,请参阅下面对模板 TimeStamp 的介绍。
|
作为一项可选功能,绑定到事件的每个作业注册都可以通过两个时间戳值启用或禁用。在共享的 OpenOffice.org 中,管理员可以使用 AdminTime
值为每个新启动的用户办公软件实例重新启动作业,而不考虑这些作业以前的执行。这样做很有用,例如,如果新功能已加入到共享安装中,则对更新用户安装非常有用。
TimeStamp 模板的属性 | |
---|---|
AdminTime
|
字符串型。此值必须按照 ISO 8601 进行格式化。它包含只能由管理员调整的时间戳,可以用来重新激活此作业。 |
UserTime
|
字符串型。此值必须按照 ISO 8601 进行格式化。它包含此作业上一次根据配置的事件成功完成的时间。 |
使用此时间戳功能有时会很复杂。例如,假定有一个使用扩展管理器安装的作业。默认情况下,作业为已注册事件启用,但在第一次执行后将被禁用。默认情况下,不会存在用于已配置的事件的两个值(AdminTime
和 UserTime
)。作为软件包文件一部分的 Jobs.xcu 片断,必须也不包含 AdminTime
和 UserTime
条目。因为两个值都不存在,所以不会进行检查,而且作业将启用。作业成功完成其任务(取决于 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 粒子时有可能导致事件绑定缺失。
Content on this page is licensed under the Public Documentation License (PDL). |