使用变量替换定制 MFT 资源监视器任务

在满足活动资源监视器的触发条件时,会调用已定义的任务。 除了每次使用相同的目标代理或相同的目标文件名调用传输或命令任务之外,您还可以在运行时修改任务定义。 可通过将变量名插入到任务定义 XML 中来实现此目的。 在监视器确定已满足触发条件并且任务定义包含变量名时,将用变量值替换变量名,然后调用任务。

注意: 变量名称不区分大小写。

用于替换的变量只能用于正触发条件。 只有 matchfileSize 触发条件会使得变量被替换。 如果使用了 noMatch 条件,并且任务定义中存在替换变量名称,那么不会调用任务,并且监视器会产生返回码 110 和错误消息BFGDM0060E.

如果受监视的资源是队列

可以在任务 XML 定义中替换要从受监视队列中读取的第一条消息中的任何 IBM® MQ 消息属性的值。

用户定义的消息属性的前缀为 usr.,但在变量名中不包含此前缀。 变量名前面必须加美元符号 ($) 字符并用花括号 {} 括起来。

例如,${destFileName} 将替换为要从源队列读取的第一条消息的 usr.destFileName 消息属性的值。 有关更多信息,请参阅 MFT 从源队列上的消息读取的 MQ 消息属性监视队列并使用变量替换

如果未将变量定义为消息属性,那么监视器将报告 BFGDM0060E 错误并返回返回码 110 (Monitor 任务变量替换失败)。 除此之外,代理程序还会将以下错误消息写入其事件日志 (outputN.log):
BFGDM0113W: Trigger failure for <monitor name> for reason BFGDM0060E: A monitor task could 
not complete as a variable substitution <variable name> was not present.If moderate or verbose resource monitor logging is enabled for the monitor, the monitor writes the following message to the resource monitor event log of the agent (resmoneventN.log):BFGDM0060E: A monitor task could not complete as a variable substitution 
<variable name> was not present.
 

有关资源监视器日志记录的更多信息,请参阅 日志记录 MFT 资源监视器

下表显示了缺省情况下提供的替换变量。 例如,${AGENTNAME} 将替换为资源监视器代理的名称。
表 1. 缺省情况下提供的替换变量
变量 描述
AGENTNAME 资源监视器代理的名称。
queueName 正在监视的队列的名称。
ENCODING 队列上第一条消息或组中第一条消息的字符编码。
MESSAGEID 队列上第一条消息或组中第一条消息的 IBM MQ 消息标识。
GROUPID 组的 IBM MQ 组标识或消息标识 (如果仅找到一条消息)。 只有在监视整个组时才会设置此变量。
CurrentTimeStamp 基于触发监视器的本地时间的时间戳记。 此时间戳记值对于代理是唯一的。
CurrentTimeStampUTC 基于触发监视器的 UTC 时区中的时间的时间戳记。 此时间戳记值对于代理是唯一的。

如果受监视资源是目录

下表显示了任务 XML 定义中可替换的变量名集。
表 2. 可替换的变量
变量 描述
FilePath 触发器文件的完整路径名。
FileName 触发器的文件名部分。
LastModifiedTime 上次修改触发器文件的时间。 该时间表示为用于运行代理的时区的本地时间,采用 ISO 8601 时间格式。
LastModifiedDate 上次修改触发器文件的日期。 该日期表示为用于运行代理的时区的本地日期,采用 ISO 8601 日期格式。
LastModifiedTimeUTC 上次修改触发器文件的时间。 该时间表示为已转换为 UTC 时区的本地时间,采用 ISO 8601 时间格式。
LastModifiedDateUTC 上次修改触发器文件的日期。 该日期表示为已转换为 UTC 时区的本地日期,采用 ISO 8601 日期格式。
AgentName 资源监视器代理的名称。
CurrentTimeStamp 基于触发监视器的本地时间的时间戳记。 此时间戳记值对于代理是唯一的。
CurrentTimeStampUTC 基于触发监视器的 UTC 时区中的时间的时间戳记。 此时间戳记值对于代理是唯一的。

如果受监视资源是触发器文件

下表显示了当资源监视器使用触发器文件的内容来确定需要传输的文件时可以替换的变量名称集。
表 3. 使用触发器文件时可以替换的变量
变量 描述
contentSource 源文件的完整路径名。
contentDestination 目标文件的完整路径名。

变量名称必须以美元符号 ($) 字符开头,并括在花括号 {} 中。例如, ${FilePath} 将替换为匹配触发器文件的标准文件路径。

可以对变量名应用两个特殊关键字以提供进一步的优化。 这些字段为:
标记
用于替换的标记索引(左侧从 1 开始,右侧从 -1 开始)
分隔符
用于标记变量值的单个字符。 缺省值是 UNIX 平台上的正斜杠字符 (/) 或 Windows 平台上的反斜杠字符 (\) ,但分隔符可以是变量值中可能出现的任何有效字符。

如果在变量名中指定了分隔符关键字,那么会根据分隔符将变量值分割为标记。

分配给标记关键字的值将用作索引,以选择用于替换变量名的标记。 令牌索引相对于变量中的第一个字符,并且以 1 开头。 如果未指定 token 关键字,那么将插入整个变量。

采用不区分大小写的方式处理用于替换消息 XML 中代理名称的任何值。 所有 Managed File Transfer Agent 名称都是大写。 如果用值 Paris 替换消息 XML 中的代理属性,那么会将该值解释为对代理 PARIS 的引用。