BizTalk获得"无效令牌"尝试使用以下

时间:2017-07-18 04:03:55

标签: biztalk biztalk-orchestrations

我有一项任务涉及使用Orchestration对多记录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;

循环中的Next表达式设置Xpath值:

sXPath = System.String.Format("/*[local-name()='Root' and namespace-uri()='']/*[local-name()='People' and namespace-uri()='']/*[local-name()='Customer' and namespace-uri()='']", recordNumber);

Next Expression定义最终消息:

InternalCust = xpath(CustFile,sXPath);

最后的表达式将循环的记录计数器递增回来,然后用下一条记录重新开始:

counter = counter + 1;

我想我可以管理输出消息的排序,但是当我尝试按原样运行它时,我在控制台中收到以下错误:

  

xlang / s引擎事件日志条目:未捕获的异常(请参阅下面的'内部异常')已暂停服务实例' BizTalk_SelfStudy_Week_4_Project.BizTalk_Orchestration1(ae65e0c4-9db7-6f19-1e08-6f4fbe08affe )&#39 ;.   在管理恢复或终止之前,服务实例将保持暂停状态。   如果恢复,则实例将从其上一个持久状态继续,并可能重新抛出相同的意外异常。

     

InstanceId:4a2d7256-4882-4853-8f7c-6e6054e78c4c

     

形状名称:发布消息

     

ShapeId:6ee14c8d-e55b-408b-be63-e5d83fa412a6

     

抛出异常:段1,进度19

     

内部例外:部分'部分'消息' InternalCust'在构造块的末尾包含一个空值。

     

异常类型:NullPartException   资料来源:Microsoft.XLANGs.Engine   目标站点:Void ConstructionCompleteEvent(布尔值)   以下是堆栈跟踪,用于标识发生异常的位置

     

at Microsoft.XLANGs.Core.Part.ConstructionCompleteEvent(Boolean fKillUnderlyingPart)      在Microsoft.XLANGs.Core.XMessage.ConstructionCompleteEvent(Boolean killUnderlyingPartWhenDirty)      在BizTalk_SelfStudy_Week_4_Project.BizTalk_Orchestration1.segment1(StopConditions stopOn)      在Microsoft.XLANGs.Core.SegmentScheduler.RunASegment(Segment s,StopConditions stopCond,Exception& exp)

我很茫然,因为我已经尝试验证xpath,而我得到的只是验证器上的无效令牌消息。想法有人吗?

1 个答案:

答案 0 :(得分:0)

正如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替换为。

它可能应该如下所示,它告诉它选择哪个Customer实例。

sXPath = System.String.Format("/*[local-name()='Root' and namespace-uri()='']/*[local-name()='People' and namespace-uri()='']/*[local-name()='Customer' and namespace-uri()=''][{0}]", recordNumber);

它还有助于Debug an Orchestration允许您看到XPath没有包含记录编号并测试生成的X路径,对此有用的工具是Dan Sharps XML Viewer < / p>