Orchestration Shape中Message Context Property的读取问题
Posted on 2008-12-06 16:09 鸡尾虾的壳 阅读(148) 评论(0) 编辑 收藏 举报在Pipeline Message中,如果某属性不存在于消息流中,Message.Property会返回empty。但是在Orchestration Shape中,如果属性不存在,Engine会抛出异常。
在Message Assign Shape中,消息属性读取常常用到。但是这种Shape是不支持if语句的,因此无法用exists语句来判断。比较好的解决方法是把消息传到外部Class中进行处理。外部方法接收XLANGMessage类型,返回XmlDocument类型。XLANGMessage位于Microsoft.XLANGs.BaseTypes.dll中。然后通过XLANGMessage的GetPropertyValue方法读取属性值。一段实例代码如下:
object objAckFailureDes=originalMessage.GetPropertyValue(typeof(BTS.AckDescription));
if (objAckFailureDes != null)
{
strFailureDesp = (string)objAckFailureDes;
}
BTS.AckDescription是系统自带的属性。当添加Microsoft.BizTalk.GlobalPropertySchemas.dll引用后,VS会认为它是一个类。同样,对于自定义Property Schema中的属性,需要添加对它的引用,否则无法编译。