我正在寻找基于在Biztalk业务流程中使用的预定义XSD架构来创建新消息实例的最佳解决方案.
额外的投票通过质量参考链接获得清晰有效的示例或答案的答案.
Dav*_*all 17
想要在BizTalk业务流程中创建消息的新实例时,有几个选项.
我已经描述了我通常最终使用的三个,并在答案的底部添加了一些链接.
如何定义哪个是最好的方法真正依赖 - XMLDocument方法在某些方面是最整洁的,除非你的架构发生了变化,这可能会在你不知道的情况下中断.Scott Colestock描述了一些降低风险的方法.
BizTalk Mapping方法可能是最容易理解的,并且在架构更改时不会中断.对于小型模式,这可能是一个不错的选择.
对于所有这些方法,要记住的一件重要事情是,如果要使用区分字段或提升属性,则需要创建要填充的空元素.XLANG
如果您尝试将值分配给缺少的元素(即使这些元素可能是可选的),您将遇到运行时错误
最简单的选择是只使用BizTalk映射 - 您甚至不需要将任何内容映射到创建的实例中.
要创建空元素,您只需将字符串连接functoid映射到空字符串参数即可.
如果要创建消息的新实例,只需将消息分配形状中的一个消息复制到同一模式的另一个消息即可.
为此,您创建一个类型的编排变量,XMLDocument
然后message assignment
使用该LoadXML
方法加载与您的模式匹配的XML片段.然后,您将分配XMLDocument
到所需的BizTalk消息.
varXMLDoc.LoadXml(@"<ns0:SomeXML><AnElementToPopulate></AnElementToPopulate></SomeXML>");
msgYourMessage = varXMLDom;
Run Code Online (Sandbox Code Playgroud)
包含AnElementToPopulate
允许您使用属性提升分配给它.
我很少记得在我的脑海中做到这一点的语法,这是我去博客条目提醒我自己的语法.
另一个链接在这里详细介绍的一些方法.
您到底在寻找什么?它只是创建一条具有固定内容的新消息(就像某种模板)吗?还是基于其他东西?您确实需要澄清问题并更加具体才能得到正确的答案。
如果您指的是基于某种硬编码内容(或接近硬编码内容)从头开始创建消息,那么我发现将它们作为嵌入式资源放入辅助 C# 程序集中是一种非常干净的方法。