2011-12-21 68 views
1

配置文件:Windows 2008 Server SP2(开发平台)上的Biztalk 2009更新4 嗨当​​使用xpath使用消息构造和消息分配使用以下代码映射输出时:Biztalk使用xpath时出现'NullPartException'错误

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;的表达式对象的末尾。

Orchestration

所述第二模式的细节结构(名称:SalesOrderDetail_V2_2.xsd)是一样的第一(名称:SalesOrderRequest_V2_2.xsd),但所有的标题标记除去。

enter image description here

及以下

enter image description here

这似乎是一个广场PEG试图映射到一个圆孔SalesOrderRequest_V2_2.xsd。我试图调试这个,但在下面显示的位置file0.cs中的以下代码失败;

enter image description here

我就是找不到在业务流程调试有用的东西。 任何人都可以进一步了解我使用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?

+0

嗨Filburt,现实是上述项目和结构适用于简单的XSD模式定义,只有五个元素在detail节点下,没有其他头元素。如果我在头节点中的许多节点和元素以及细节节点的屏幕快照中增加了XSD模式的复杂性,那么我会得到异常错误的情况。据我所见,具有详细节点的两个模式是相同的。 – Chrisk 2011-12-21 19:53:11

+0

在调试中,我可以看到在GetRecordCount表达式中填充了正确数量的详细元素的nRecordCount变量。它进入MessageLoop,但在“SingleInput = xpath(Input,sXPath);”表达式被执行。 SingleInput消息基于SalesOrderDetail模式,sXPath是从表达式“System.String.Format(”/ * [local-name()='ProcessSalesOrder')和命名空间.......“中检索的结果。 – Chrisk 2011-12-21 19:53:36

+0

我相信在使用这个Orchestration版本中的复杂模式时,我不能解决使用xpath函数时出现的一些不匹配问题,它必须很简单,但我似乎对此一窍不通。 – Chrisk 2011-12-21 19:54:09

回答

0

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

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

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

在映射内部我使用“Call Xslt Template”脚本函数,它从计数器消息接收计数器值作为Xslt参数。这个参数用来像你一样提取基本上相同的XPath(即position()= $ param)所需的源节点。

我知道使用Call Xslt模板可能不是您的选择,只是由于大量的字段。

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