BizTalk:在推荐属性中出错

时间:2013-12-02 05:05:14

标签: xsd biztalk biztalk-2010 orchestration biztalk-orchestrations

当我运行Orchestration并尝试通过读取另一个提升属性的值为升级属性赋值时,我收到以下错误。

  

Suspended Orchestration中的错误:

     

内部异常:消息中没有与属性BankProcesses.Schemas.Internal_ID相关联的值。

详细

我有2个XSD架构,1个用于调用存储过程并读取其响应,另一个用于将其写入平面文件。 SP响应中返回的内部ID需要传递到另一个XSD架构中的节点,以写入平面文件格式。

我已经从响应模式中提升了一个元素,并且还从模式中提升了一个元素以写入平面文件。我将值分配给推广的propeties如下:

strInternalId = msgCallHeaderSP_Response(BankProcesses.Schemas.Internal_ID);

msgCallSP(BankProcesses.Schemas.Header_Internal_ID) = strInternalId;

但是当我运行业务流程时,我得到了上面提到的错误。我已经检查了存储过程的响应,并且响应XML确实包含一些值,但我无法将该值分配给另一个模式。请建议

谢谢, MAYUR

3 个答案:

答案 0 :(得分:2)

您可以使用exists检查属性是否存在。

if(BankProcesses.Schemas.Internal_ID exists msgCallHeaderSP_Response)
{
    strInternalId = msgCallHeaderSP_Response(BankProcesses.Schemas.Internal_ID);

    msgCallSP(BankProcesses.Schemas.Header_Internal_ID) = strInternalId;
}

答案 1 :(得分:0)

可能导致此错误的一种情况是您尝试修改的邮件中没有Header_Internal_ID元素。您是否可以在修改之前检查消息,以确保有一个元素的值应该更改 - 可能会将消息放到文件位置。

如果是这种情况,那么只要确保在第一次实例化r消息时创建此元素 - 即使您最初将其设置为空元素。

HTH

答案 2 :(得分:0)

要检查属性是否存在,可以使用以下语法:

BMWFS.LS.BizTalk.CFS.BankProcesses.Schemas.Internal_ID存在msgCallHeaderSP_Response

但是,如果情况是源字段始终存在,则必须向后工作以找出该属性未出现在上下文中的原因。

如果它来自端口,那么消息是否通过XmlDisassembler组件传递?如果它来自另一个Orchestration,您实际上是在设置该属性吗?

查看Context的最简单方法是将Message,msgCallHeaderSP_Response路由到Stopped Send Port。然后,您可以在BizTalk Administrator中查看上下文。