【问题标题】:Biztalk Getting 'NullPartException' error when using xpathBiztalk 使用 xpath 时出现“NullPartException”错误
【发布时间】:2011-12-21 16:24:57
【问题描述】:

简介:Windows 2008 Server SP2(开发平台)上的 Biztalk 2009 更新 4 嗨,当使用 xpath 使用带有以下代码的消息构造和消息分配来映射我的输出时:

    sXPath = System.String.Format("/*[local-name()='ProcessSalesOrder' and namespace-uri()='http://www.TestSchemas.net/TestSchemas_V2_2/schemas']/*[local-name()='header' and namespace-uri()='http://www.TestSchemas.net/TestSchemas_V2_2/schemas']/*[local-name()='detail' and namespace-uri()='http://www.TestSchemas.net/TestSchemas_V2_2/schemas' and position()={0}]", nLoopCount);
    System.Diagnostics.Debug.WriteLine(sXPath);
    SingleInput = xpath(Input, sXPath);

我在事件查看器中遇到异常;

    Exception thrown from: segment 1, progress 15
    Inner exception: The part 'part' of message 'SingleInput' contained a null value at the end of the construct block.

    Exception type: NullPartException
    Source: Microsoft.XLANGs.Engine
    Target Site: Void ConstructionCompleteEvent(Boolean)

我有一个简单的编排,一个接收端口一个发送端口使用两个模式。我将无限“详细信息”的记录计数放入一个名为nRecordCount 的变量中,并且我在MessageLoop 中使用循环计数器来增加这个放置在表达式对象末尾的值,其中nLoopCount = nLoopCount + 1; 作为表达式。

第二个架构(名称:SalesOrderDetail_V2_2.xsd)的详细结构与第一个(名称:SalesOrderRequest_V2_2.xsd)相同,但删除了所有标题标签。

以及下面的 SalesOrderRequest_V2_2.xsd

似乎方形钉正试图映射到圆孔。我曾尝试对此进行调试,但在 file0.cs 中的以下代码处失败,如下所示;

我在编排调试中也找不到任何有用的东西。 任何人都可以进一步了解我在使用 Xpath 时可能遗漏的内容吗?

完整的工程已经压缩,可在以下地址下载

https://skydrive.live.com/redir.aspx?cid=533fd5a521c8c878&resid=533FD5A521C8C878!1848&parid=533FD5A521C8C878!119&authkey=!AE4gYqCoqmZd8xs

请查看此链接以获取可能的修复。如果我更改架构结构 (XSD) 文件,我已经设法获得了一个可行的解决方案。

这里是链接: xpath - How to get Method B to work?

【问题讨论】:

  • 您好 Filburt,现实情况是,上述项目和结构与简单的 XSD 模式定义配合良好,在详细节点下只有五个元素,没有其他标题元素。如果我增加 XSD 模式的复杂性,如屏幕截图所示,在标头节点以及详细节点中有许多节点和元素,那么我会遇到异常错误的情况。据我所见,带有详细节点的两个模式是相同的。
  • 在调试中,我可以看到 nRecordCount 变量在 GetRecordCount 表达式中填充了正确数量的详细信息元素。它进入 MessageLoop 但在“SingleInput = xpath(Input, sXPath);”处失败表达式被执行。 SingleInput 消息基于 SalesOrderDetail 模式,sXPath 是从表达式“System.String.Format(”/*[local-name()='ProcessSalesOrder' and namespace.......”中检索的结果.
  • 我相信使用 xpath 函数存在一些不匹配,我无法使用我拥有的这个 Orchestration 版本中的复杂模式来解决。它一定很简单,但我似乎对这个视而不见。

标签: .net biztalk biztalk-2009 biztalk-orchestrations


【解决方案1】:

我最近有一个非常相似的场景(从单个输入消息创建一批消息),最终得到的解决方案略有不同:

在循环中,我创建了一个简单的计数器消息,分配当前计数器值。

接下来在 Construct Message 形状中,我有一个 Map,它使用 Counter 消息和原始源消息作为输入消息,并使用批处理消息模式作为输出。

在地图中,我使用“调用 Xslt 模板”脚本函数,它从计数器消息中接收计数器值作为 Xslt 参数。我使用这个参数来提取所需的源节点,它与你的 XPath 基本相同(即 position()=$param)。

我知道,由于字段数量众多,您可能无法选择使用 Call Xslt Template。

我没有准备好 BizTalk 开发环境的 atm,但使用“普通”functoids 而不是调用 Xslt 模板也应该可以提取序列节点。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-07-25
    • 1970-01-01
    • 2011-05-08
    • 1970-01-01
    • 2018-08-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多