示例: 资源监视器定义的变量替换

使用 XML 和 IBM® MQ Explorer对资源监视器定义进行变量替换的示例。

用于演示变量替换工作方式的示例

假定匹配触发器文件的文件路径为 c:\MONITOR\REPORTS\Paris\Report2009.doc (在 Windows 上) 和 /MONITOR/REPORTS/Paris/Report2009.doc (在 AIX® and Linux® 平台上) ,那么将替换变量,如下表中所示。
表 1. 变量替换方式
变量规范 变量替换后
${FilePath} Windows :c:\MONITOR\REPORTS\Paris\Report2009.doc

AIX and Linux :/MONITOR/REPORTS/Paris/Report2009.doc

${FilePath{token=1}{separator=.}} Windows :c:\MONITOR\REPORTS\Paris\Report2009

AIX and Linux :/MONITOR/REPORTS/Paris/Report2009

${FilePath{token=2}{separator=.}} Windows :doc

AIX and Linux :doc

${FilePath{token=3}} Windows REPORTS

AIX and Linux : 巴黎

也可以指定负标记索引,以选择相对于最后一个变量字符的标记,如下表所示。 表中的示例使用相同的变量值 c:\MONITOR\REPORTS\Paris\Report2009.doc (在 Windows 上) 和 /MONITOR/REPORTS/Paris/Report2009.doc (在 AIX and Linux上)。
表 2. 使用负标记索引的示例
变量规范 变量替换后
${FilePath} Windows :c:\MONITOR\REPORTS\Paris\Report2009.doc

AIX and Linux :/MONITOR/REPORTS/Paris/Report2009.doc

${FilePath{token=-2}{separator=.}} Windows :c:\MONITOR\REPORTS\Paris\Report2009

AIX and Linux :/MONITOR/REPORTS/Paris/Report2009

${FilePath{token=-2}{separator=\}} Windows : 巴黎

AIX and Linux : 巴黎

${FilePath{token=-4}} Windows : 监视器

AIX and Linux : 监视器

用于替换的变量仅适用于以下正触发条件和noSizeChange选项,后者是正触发条件规则的例外:
  • match
  • fileSize
  • noSizeChange
如果使用了 noMatch 条件,并且任务定义中存在替换变量名称,那么不会调用任务,并且监视器会产生返回码 110 和错误消息BFGDM0060E.

使用 XML 的示例

以下示例任务定义 XML 将监视器代理名称用作传输的源代理 (Paris),将文件路径中的倒数第二个目录名用作传输的目标代理名称 (Report2009),并将所传输的文件重命名为扩展名为 .rpt 的触发器文件名的根。
<?xml version="1.0" encoding="UTF-8" ?>
<request version="4.00" xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance" 
  xsi:noNamespaceSchemaLocation="FileTransfer.xsd">
   <managedTransfer>
     <originator>
       <hostName>reportserver.com</hostName>
       <userID>USER1</userID>
     </originator>
     <sourceAgent agent="${AgentName}" QMgr="QM1" />
     <destinationAgent agent="${FilePath{token=-2}}" QMgr="QMD" />
     <transferSet>
       <item mode="binary" checksumMethod="MD5">
         <source recursive="false" disposition="leave">
           <file>c:/incoming/reports/summary/report.doc</file>
         </source>
         <destination type="file" exist="overwrite">
           <file>/reports/${FileName{token=1}{separator=.}}.rpt</file>
         </destination>
       </item>
     </transferSet>
   </managedTransfer>
</request>
这导致任务 XML 转换为:
<?xml version="1.0" encoding="UTF-8" ?>
<request version="4.00" xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance" 
  xsi:noNamespaceSchemaLocation="FileTransfer.xsd">
   <managedTransfer>
     <originator>
       <hostName>reportserver.com</hostName>
       <userID>USER1</userID>
     </originator>
     <sourceAgent agent="AGENT1" QMgr="QM1" />
     <destinationAgent agent="Paris" QMgr="QMD" />
     <transferSet>
       <item mode="binary" checksumMethod="MD5">
         <source recursive="false" disposition="leave">
           <file>c:/incoming/reports/summary/report.doc</file>
         </source>
         <destination type="file" exist="overwrite">
           <file>/reports/Report2009.rpt</file>
         </destination>
       </item>
     </transferSet>
   </managedTransfer>
</request>

<destinationAgent> 元素的 agent 属性中的变量 ${FilePath{token=-2}} 将替换为值 Paris。 将采用不区分大小写的方式处理该值,并且会将该值解释为对代理 PARIS 的引用。

使用 IBM MQ Explorer 的示例

通过 IBM MQ Explorer创建资源监视器时,一旦指定了监视器属性和触发条件,就会提供将传输项添加到监视器的选项。 以下示例演示如何在 "添加传输项" 面板 中使用 ${FilePath} 和 ${FileName} 变量来定制由资源监视器匹配生成的传输。

示例 1

要在满足触发条件时仅仅将源文件传输到其他位置,可使用 ${FilePath} 变量:
  • 将源文件名设置为 ${FilePath}
  • 从目标的类型下拉菜单中,选择目录
  • 将目标文件名设置为要将源文件传输到的位置,例如,C:\MFT\out\

示例 2

要将源文件传输到其他位置并更改该文件的扩展名,可结合使用 ${FileName} 变量和 ${FilePath} 变量:

在以下示例中,假设源文件的文件路径为 C:\MONITOR\REPORTS\Paris\Report2009.doc
  • 将源文件名设置为 ${FilePath}
  • 将目标文件名设置为要将源文件传输到的位置,后接 ${FileName{token=1}{separator=.}},再后接该文件的新扩展名。 例如,C:\MFT\out\${FileName{token=1}{separator=.}}.rpt,这等同于源文件名的 C:\MFT\out\Report2009.rpt

示例 3

要使用源文件的文件路径的一部分来确定传输的目标,可结合使用 ${FilePath} 变量与标记和分隔符规范。

在以下示例中,假设源文件的文件路径为 C:\MONITOR\REPORTS\Paris\Report2009.doc

可以使用源文件路径的一部分来确定该文件的目标。 如果使用文件路径示例 C:\MONITOR\REPORTS\Paris\Report2009.doc,并且要将文件传输到取决于源文件位置的文件夹(在此示例中为 Paris),那么可执行以下操作:
  • 将源文件名设置为 ${FilePath}
  • 将目标文件名设置为用于放置每个位置的文件夹的目标,然后附加文件路径的目标部分和文件名。 例如,C:\MFT\out\${FilePath{token=-2}{separator=\}}\${FileName},这等同于源文件名的 C:\MFT\out\Paris\Report2009.doc