IBM Host On Demand Macro <condition>元素语法错误排查求助
IBM Host On Demand Macro 循环错误修复
错误原因分析
你遇到的Element type "condition" must be followed by either attribute specifications, ">" or "/>"错误,核心是<condition>元素的XML语法完全不符合规范:
- 直接将条件表达式
$Label_Request$!=$Label_Count$写在标签名后,没有用属性包裹,XML要求元素必须以属性声明、>或/>结尾。 - 同时使用了自闭合的
<condition ... />和单独的</condition>结束标签,属于XML语法冲突,自闭合标签不需要额外的结束标签。
修正后的代码
IBM Host On Demand Macro的<condition>元素需要通过value属性指定条件表达式,以下是修正后的完整代码,同时调整了循环逻辑,让流程能正确根据计数判断继续循环或结束:
<HAScript name="new label" description="" timeout="60000" pausetime="300" promptall="true" blockinput="true" author="nikbrems" creationdate="26 Jan 2022, 01:16:16" supressclearevents="false" usevars="true" ignorepauseforenhancedtn="true" delayifnotenhancedtn="0" ignorepausetimeforenhancedtn="true" continueontimeout="false"> <vars> <create name="$HU_Profile$" type="string" value="" /> <create name="$Transit_Final_Dest$" type="string" value="" /> <create name="$Copy_HPC$" type="string" value="" /> <create name="$Label_Request$" type="integer" value="3" /> <create name="$Label_Count$" type="integer" value="0" /> </vars> <screen name="Screen1" entryscreen="true" exitscreen="false" transient="false"> <description > <oia status="NOTINHIBITED" optional="false" invertmatch="false" /> </description> <actions> <prompt name="'Labels Required'" description="" row="10" col="15" len="1" default="" clearfield="true" encrypted="false" movecursor="true" xlatehostkeys="false" assigntovar="$Label_Request$" varupdateonly="true" required="true" title="" /> <prompt name="'HU Profile'" description="" row="11" col="215" len="9" default="" clearfield="true" encrypted="false" movecursor="true" xlatehostkeys="false" assigntovar="$HU_Profile$" varupdateonly="true" required="true" title="" /> <prompt name="'Transit & Final Dest'" description="" row="12" col="015" len="9" default="" clearfield="true" encrypted="false" movecursor="true" xlatehostkeys="false" assigntovar="$Transit_Final_Dest$" varupdateonly="true" required="true" title="" /> <prompt name="'Copy HPC'" description="" row="13" col="15" len="11" default="" clearfield="true" encrypted="false" movecursor="true" xlatehostkeys="false" assigntovar="$Copy_HPC$" varupdateonly="true" required="true" title="" /> </actions> <nextscreens timeout="0" > <nextscreen name="Screen2" /> </nextscreens> </screen> <screen name="Screen2" entryscreen="false" exitscreen="false" transient="false"> <description uselogic="(1 and 2)"> <oia status="NOTINHIBITED" optional="false" invertmatch="false" /> <condition value="$Label_Request$ != $Label_Count$" /> </description> <actions> <varupdate name="$Label_Count$" value="$Label_Count$+1" /> <input value="'[pf10]'" row="0" col="0" movecursor="true" xlatehostkeys="true" encrypted="false" /> <input value="$HU_Profile$" row="4" col="25" movecursor="true" xlatehostkeys="true" encrypted="false" /> <input value="$Transit_Final_Dest$" row="4" col="70" movecursor="true" xlatehostkeys="true" encrypted="false" /> <input value="$Copy_HPC$" row="7" col="27" movecursor="true" xlatehostkeys="true" encrypted="false" /> <input value="'N'" row="6" col="70" movecursor="true" xlatehostkeys="true" encrypted="false" /> <input value="'[enter]'" row="0" col="0" movecursor="true" xlatehostkeys="true" encrypted="false" /> <input value="'[pf12]'" row="0" col="0" movecursor="true" xlatehostkeys="true" encrypted="false" /> </actions> <nextscreens timeout="0" > <nextscreen name="Screen3" /> </nextscreens> </screen> <screen name="Screen3" entryscreen="false" exitscreen="false" transient="false"> <description> <oia status="NOTINHIBITED" optional="false" invertmatch="false" /> </description> <nextscreens timeout="0" > <!-- 未达到请求次数时回到Screen2继续循环 --> <nextscreen name="Screen2" condition="$Label_Request$ != $Label_Count$" /> <!-- 达到次数时进入结束屏幕 --> <nextscreen name="Screen4" condition="$Label_Request$ == $Label_Count$" /> </nextscreens> </screen> <screen name="Screen4" entryscreen="false" exitscreen="true" transient="false"> <description> <oia status="NOTINHIBITED" optional="false" invertmatch="false" /> </description> <actions> <message title="'END'" value="$Label_Count$+' labels created for '+$HU_Profile$" /> </actions> <nextscreens timeout="0" > </nextscreens> <recolimit value="10000" /> </screen> </HAScript>
关键修正点
<condition>语法修正:将条件表达式放在value属性中,使用<condition value="表达式" />的正确XML格式,删除多余的</condition>结束标签。- 循环逻辑优化:新增Screen4作为专门的结束屏幕,Screen3通过
nextscreen的condition属性判断跳转方向,避免原逻辑中屏幕同时承担判断和结束的冲突。 - 流程控制简化:直接在
nextscreen元素中使用condition属性控制跳转,这是IBM Host On Demand Macro中实现分支逻辑的标准方式。
内容的提问来源于stack exchange,提问作者Vraetzught
相关产品推荐
相关产品推荐

