【问题标题】:Biztalk Scripting Functoid and DocumentsBiztalk 脚本 Functoid 和文档
【发布时间】:2015-04-28 22:06:38
【问题描述】:

我在地图上有一个脚本functoid。我需要将消息传递给方法的参数,并返回关联的文档。我认为可行的方法是这样的:

public XLANGMessage Map(XLANGMessage src);

但是,我找不到确认;我可以通过映射工具传递整条消息,将其视为文档,然后返回响应吗?我的方法正确吗?

【问题讨论】:

    标签: biztalk biztalk-2013r2


    【解决方案1】:

    Scripting functoids 只能接受字符串并返回字符串。您必须在编排或帮助程序库中执行您想要执行的操作,或者使用内联 XSLT(它可以选择一个节点集并基于它生成输出)。

    在编排中,我会在 MessageAssignment 形状中执行类似的操作:

    msg_NewMsg = new System.Xml.XmlDocument();
    UtilityClass.Map(msg_OldMsg, msg_NewMsg);
    msg_MapOutput.FieldToAssign = msg_NewMsg.OuterXml();
    

    其中 FieldToAssign 是消息中的一个可区分字段。在实用程序类中,您将执行以下操作:

    public static void Map(XLANGMessage from, XLANGMessage to)
    {
      using(MemoryStream ms = from[0].RetreiveAs(typeof(Stream)))
      {
        using (StreamReader reader = new StreamReader(ms))
        {
          string x = reader.ReadToEnd();
          // do stuff with x; alternative,  XDocument xd = XDocument.Parse(reader.ReadToEnd());
        }
      }
      to[0].LoadFrom(new StringReader(x));
      // alt: save the XDocument to a memory stream and call LoadFrom on the memory stream
    }
    

    【讨论】:

    • 好的,我如何从编排中触发它,然后返回一些我可以注入到消息中的东西?
    • 我现在从你的例子中看到你在说什么,这是有道理的。所以转换代码(你的第一个代码)可以从表达式中调用,对吧?我是否必须将目标消息存储在变量中,还是可以在构造块中执行此操作?
    • 它必须是消息分配形状 - 您正在构建一条新消息。将它放在表达式中会导致异常。 msg_NewMsg、msg_OldMsg 和 msg_MapOutput 是消息,而不是变量(即使它们看起来像变量)。
    猜你喜欢
    • 2017-06-04
    • 2018-08-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-01
    相关资源
    最近更新 更多