初始化
From Apache OpenOffice Wiki
作业的初始化通过调用其主接口方法完成,该调用还将启动作业。对于同步作业,执行环境将调用 <idlml>com.sun.star.task.XJob:execute</idlml>(),而异步作业则通过 <idlml>com.sun.star.task.XAsyncJob:executeAsync</idlml>() 运行。
这两种方法都接受一个参数 Arguments,它是 com.sun.star.beans.NamedValue 结构的序列。此序列描述了作业上下文。
它包含作业运行的环境,环境可以通知作业是由作业执行程序、分发框架,还是由全局事件广播器服务调用,并可能提供要处理的作业的框架或文档模型。
编写 UNO 组件 - 将组件集成到 OpenOffice.org - 协议处理程序 - 实现 说明如何使用框架来获取与其相关的文档模型。 |
如果已在配置分支 org.openoffice.Office.Jobs 中配置了作业,Arguments 参数还将生成配置数据。此数据将被分为存储在配置中的基本配置和附加参数。作业配置将在 编写 UNO 组件 - 将组件集成到 OpenOffice.org - 作业 - 配置 中介绍。
最后,Arguments 可以包含在运行时给定作业的动态参数。例如,如果作业已由分发框架调用,并且分发的命令 URL 使用了参数,这些参数可以通过执行参数传送给作业。
下表显示了执行 Arguments
的具体规范:
执行 Arguments 序列的元素 | ||
---|---|---|
Environment
|
< com.sun.star.beans.NamedValue > 序列。包含环境数据。定义了以下命名值: | |
EnvType
|
字符串型。确定在哪个环境中执行作业。定义的值:
" | |
EventName
|
[optional] 字符串型。仅当 EnvType 为 "EXECUTOR " 或 "DOCUMENTEVENT " 时存在。包含此作业在配置中为其注册的事件的名称。在运行时期间,相同的组件实现可以使用此信息来处理不同的函数集。
| |
Frame
|
[optional] com.sun.star.frame.XFrame。仅当 EnvType 为 "DISPATCH " 时存在。包含此作业的框架上下文。而且,子列表 DynamicData 可以包含相应 com.sun.star.frame.XDispatch:dispatch() 请求的可选参数列表。
| |
Model
|
[optional] com.sun.star.frame.XModel。仅当 EnvType 为 "DOCUMENTEVENT " 时存在。包含可由作业使用的文档模型。
| |
Config
|
[optional] [sequence< com.sun.star.beans.NamedValue >]。包含作业配置属性的常规集(在 编写 UNO 组件 - 将组件集成到 OpenOffice.org - 作业 - 配置 中介绍),但不是作业特定的数据集,即,此子列表仅包括属性 Alias 和 Service ,不包括属性 Arguments 。属性 Arguments 在元素 JobConfig 中反映(请参阅下一个元素)。注意:此子列表仅在作业使用此数据配置时存在。
| |
Alias
|
字符串型。此属性声明为配置集 Jobs 中相应集节点的名称。它必须是唯一名称,表示作业的结构化信息。 | |
Service
|
字符串型。表示作业组件的 UNO 实现名称。 | |
JobConfig | [optional] [sequence< com.sun.star.beans.NamedValue >] 此子列表包含在作业配置的 Arguments 属性中指定的特定于作业的一组配置数据。其条目取决于作业实现。注意:此子列表仅在作业使用此数据配置时存在。
| |
DynamicData
|
[optional] [sequence< com.sun.star.beans.NamedValue >]。包含启动此作业执行的调用的可选参数。此外,如果 Environment-EnvType 为 "DISPATCH ",它可以包含 com.sun.star.frame.XDispatch:dispatch 请求的参数。
|
以下示例显示作业如何分析给定的参数,以及如何检测执行作业时所在的环境:
public synchronized java.lang.Object execute(com.sun.star.beans.NamedValue[] lArgs) throws com.sun.star.lang.IllegalArgumentException, com.sun.star.uno.Exception { // extract all possible sub list of given argument list com.sun.star.beans.NamedValue[] lGenericConfig = null; com.sun.star.beans.NamedValue[] lJobConfig = null; com.sun.star.beans.NamedValue[] lEnvironment = null; com.sun.star.beans.NamedValue[] lDispatchArgs = null; int c = lArgs.length; for (int i=0; i<c; ++i) { if (lArgs[i].Name.equals("Config")) lGenericConfig = (com.sun.star.beans.NamedValue[]) com.sun.star.uno.AnyConverter.toArray(lArgs[i].Value); else if (lArgs[i].Name.equals("JobConfig")) lJobConfig = (com.sun.star.beans.NamedValue[]) com.sun.star.uno.AnyConverter.toArray(lArgs[i].Value); else if (lArgs[i].Name.equals("Environment")) lEnvironment = (com.sun.star.beans.NamedValue[]) com.sun.star.uno.AnyConverter.toArray(lArgs[i].Value); else if (lArgs[i].Name.equals("DynamicData")) lDispatchArgs = (com.sun.star.beans.NamedValue[]) com.sun.star.uno.AnyConverter.toArray(lArgs[i].Value); else // It is not realy an error - because unknown items can be ignored ... throw new com.sun.star.lang.IllegalArgumentException("unknown sub list detected"); } // Analyze the environment info. This sub list is the only guarenteed one! if (lEnvironment==null) throw new com.sun.star.lang.IllegalArgumentException("no environment"); java.lang.String sEnvType = null; java.lang.String sEventName = null; com.sun.star.frame.XFrame xFrame = null; com.sun.star.frame.XModel xModel = null; c = lEnvironment.length; for (int i=0; i<c; ++i) { if (lEnvironment[i].Name.equals("EnvType")) sEnvType = com.sun.star.uno.AnyConverter.toString(lEnvironment[i].Value); else if (lEnvironment[i].Name.equals("EventName")) sEventName = com.sun.star.uno.AnyConverter.toString(lEnvironment[i].Value); else if (lEnvironment[i].Name.equals("Frame")) xFrame = (com.sun.star.frame.XFrame)com.sun.star.uno.AnyConverter.toObject( new com.sun.star.uno.Type(com.sun.star.frame.XFrame.class), lEnvironment[i].Value); else if (lEnvironment[i].Name.equals("Model")) xModel = (com.sun.star.frame.XModel)com.sun.star.uno.AnyConverter.toObject( new com.sun.star.uno.Type(com.sun.star.frame.XModel.class), lEnvironment[i].Value); } // Further the environment property "EnvType" is required as minimum. if ( (sEnvType==null) || ( (!sEnvType.equals("EXECUTOR" )) && (!sEnvType.equals("DISPATCH" )) && (!sEnvType.equals("DOCUMENTEVENT")) ) ) { throw new com.sun.star.lang.IllegalArgumentException("no valid value for EnvType"); } // Analyze the set of shared config data. java.lang.String sAlias = null; if (lGenericConfig!=null) { c = lGenericConfig.length; for (int i=0; i<c; ++i) { if (lGenericConfig[i].Name.equals("Alias")) sAlias = com.sun.star.uno.AnyConverter.toString(lGenericConfig[i].Value); } } }
Content on this page is licensed under the Public Documentation License (PDL). |