BizTalk获取“;无效令牌";尝试使用下面的表达式运行业务流程时

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

我有一项任务涉及使用编排对多记录XML文件进行批处理,然后根据一个字段的值对其进行排序。循环外的第一个表达式获取记录计数:

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语句将是错误的,因此无法工作。请学习如何调试编排