BizTalk获取“;无效令牌";尝试使用下面的表达式运行业务流程时
我有一项任务涉及使用编排对多记录XML文件进行批处理,然后根据一个字段的值对其进行排序。循环外的第一个表达式获取记录计数:BizTalk获取“;无效令牌";尝试使用下面的表达式运行业务流程时,biztalk,biztalk-orchestrations,Biztalk,Biztalk Orchestrations,我有一项任务涉及使用编排对多记录XML文件进行批处理,然后根据一个字段的值对其进行排序。循环外的第一个表达式获取记录计数: recordCount = System.Convert.ToInt32(xpath(CustFile,("count/*[local-name()='Root' and namespace-uri()='']/*[local-name()='People' and namespace-uri()='']/*[local-name()='Customer' and name
recordCount = System.Convert.ToInt32(xpath(CustFile,("count/*[local-name()='Root' and namespace-uri()='']/*[local-name()='People' and namespace-uri()='']/*[local-name()='Customer' and namespace-uri()='']")));
counter = 0;
recordNumber = 0;
循环中的下一个表达式设置Xpath值:
sXPath = System.String.Format("/*[local-name()='Root' and namespace-uri()='']/*[local-name()='People' and namespace-uri()='']/*[local-name()='Customer' and namespace-uri()='']", recordNumber);
下一个表达式定义了最终消息:
InternalCust = xpath(CustFile,sXPath);
最后一个表达式递增循环的记录计数器,使其返回并使用下一条记录重新开始:
counter = counter + 1;
我想我可以管理输出消息的排序,但当我尝试按原样运行时,控制台中出现以下错误:
xlang/s引擎事件日志条目:未捕获异常(请参见下面的“内部异常”)已挂起服务“BizTalk\u自学习\u周4\u项目。BizTalk\u编排1(ae65e0c4-9db7-6f19-1e08-6f4fbe08affe)”的实例。
服务实例将保持挂起状态,直到以管理方式恢复或终止。
如果恢复,实例将从最后一个持久化状态继续,并可能重新引发相同的意外异常
实例ID:4a2d7256-4882-4853-8f7c-6e6054e78c4c
形状名称:解块消息
形状ID:6ee14c8d-e55b-408b-be63-e5d83fa412a6
从以下位置引发异常:段1,进度19
内部异常:消息“InternalCust”的“part”部分在构造块的末尾包含空值
异常类型:NullPartException
来源:Microsoft.XLANGs.Engine
目标站点:Void ConstructionCompleteEvent(布尔值)
下面是一个堆栈跟踪,用于标识发生异常的位置
位于Microsoft.XLANGs.Core.Part.ConstructionCompleteEvent(布尔FkillUnderlinedPart)
位于Microsoft.XLANGs.Core.XMessage.ConstructionCompleteEvent(布尔KillUnderlineingPartWhenEntry)
在BizTalk_自学_周_4_项目中。BizTalk_编排1.segment1(停止条件停止)
在Microsoft.XLANGs.Core.SegmentScheduler.RunASegment(段s、StopConditions、stopCond、Exception和exp)
我不知所措,因为我试图验证xpath,但得到的只是验证器上的无效令牌消息。有人吗 正如Johns-305所指出的,您对XPath的构造是错误的
sXPath = System.String.Format("/*[local-name()='Root' and namespace-uri()='']/*[local-name()='People' and namespace-uri()='']/*[local-name()='Customer' and namespace-uri()='']", recordNumber);
它缺少一个占位符,例如,{0},它将把recordNumber替换为该占位符
它可能应该如下所示,告诉它要选择哪个客户实例
sXPath = System.String.Format("/*[local-name()='Root' and namespace-uri()='']/*[local-name()='People' and namespace-uri()='']/*[local-name()='Customer' and namespace-uri()=''][{0}]", recordNumber);
这也有助于您了解XPath没有包含记录编号,为了测试生成的XPath,一个有用的工具是您可以添加形状的名称吗?它失败的地方是“退赛信息”。在编排中设置一个断点,然后单步执行并查看变量。使用Dan Sharps XML viewer测试生成的XPath注意,Format()无效,因为缺少替换标记。问:为什么不能使用XmlDiscombler?端口练习中使用了XmlDiscombler——目标是使用编排来处理所有问题。正如约翰所指出的。Format语句是错误的,因为它在字符串中没有recordNumber的占位符,所以XPath语句将是错误的,因此无法工作。请学习如何调试编排