当我运行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
答案 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中查看上下文。