来自多出现节点的BizTalk WCF-WebHttp映射表单数据变量

时间:2018-12-21 23:20:43

标签: biztalk biztalk-2013

我的客户的API需要通过HTTP POST将可变数据传递给他们。这些数据中的一些映射到URL,而某些数据在消息正文形式变量中:

Url: http://myclientapi.com/poNumber/111222/complete

Message body variables: carrier=FEDEX&trackingNumber=4XXXXXX&shipDate=2018-12-17

WCF-WebHttp端口似乎是故障单。为消息正文变量(carrier,trackingNumber和shipDate)定义平面文件架构很容易。

btsnip

我的问题是发送端口配置中poNumber的URL变量映射。我想做这样的事情:

<BtsHttpUrlMapping>
    <Operation Name = "POSHIPPED" Method="POST" Url="/poNumber/{poNumber}/complete"/>
</BtsHttpUrlMapping>

鉴于只能通过属性模式升级单个出现节点,所以我无法将poNumber数据映射到映射消息正文变量的相同节点,也不想让poNumber名称/值包含在消息正文中。

我达到了此特定适配器的限制吗?

1 个答案:

答案 0 :(得分:0)

假设您正在谈论的重复节点位于转到WCF-WebHttp adatper的目标模式中,并且poNumber位于要映射的模式上的非重复节点中。

您需要做的是创建一个属性架构,在其中将poNumber定义为MessageContextPropertyBase

属性架构

MessageContextPropertyBase

<?xml version="1.0" encoding="utf-16"?>
<xs:schema xmlns="http://Scratch.SO53891801propertyschema" xmlns:b="http://schemas.microsoft.com/BizTalk/2003" targetNamespace="http://Scratch.SO53891801propertyschema" xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:annotation>
    <xs:appinfo>
      <b:schemaInfo schema_type="property" />
    </xs:appinfo>
  </xs:annotation>
  <xs:element name="poNumber" type="xs:string">
    <xs:annotation>
      <xs:appinfo>
        <b:fieldInfo propertyGuid="3acc0f2f-64b0-4057-bc59-b8c76ab220a1" propSchFieldBase="MessageContextPropertyBase" />
      </xs:appinfo>
    </xs:annotation>
  </xs:element>
</xs:schema>

您将此属性架构添加到输入架构。从您的orderNumber在非重复节点中的输入中,将poNumber链接到属性。

示例输入模式

<?xml version="1.0" encoding="utf-16"?>
<xs:schema xmlns="http://Scratch.SO53891801_input" xmlns:b="http://schemas.microsoft.com/BizTalk/2003" xmlns:ns0="http://Scratch.SO53891801propertyschema" targetNamespace="http://Scratch.SO53891801_input" xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:annotation>
    <xs:appinfo>
      <b:imports>
        <b:namespace prefix="ns0" uri="http://Scratch.SO53891801propertyschema" location=".\SO53891801propertyschema.xsd" />
      </b:imports>
    </xs:appinfo>
  </xs:annotation>
  <xs:element name="Root">
    <xs:annotation>
      <xs:appinfo>
        <b:properties>
          <b:property name="ns0:poNumber" xpath="/*[local-name()='Root' and namespace-uri()='http://Scratch.SO53891801_input']/*[local-name()='poNumber' and namespace-uri()='']" />
        </b:properties>
      </xs:appinfo>
    </xs:annotation>
    <xs:complexType>
      <xs:sequence>
        <xs:element name="poNumber" type="xs:string" />
        <xs:element name="carrier" type="xs:string" />
        <xs:element name="trackingNumber" type="xs:string" />
        <xs:element name="shipDate" type="xs:date" />
      </xs:sequence>
    </xs:complexType>
  </xs:element>
</xs:schema>

示例输入文件

<ns0:Root xmlns:ns0="http://Scratch.SO53891801_input">
  <poNumber>poNumber_0</poNumber>
  <carrier>carrier_0</carrier>
  <trackingNumber>trackingNumber_0</trackingNumber>
  <shipDate>1999-05-31</shipDate>
</ns0:Root>

示例输出模式

<?xml version="1.0" encoding="utf-16"?>
<xs:schema xmlns="http://Scratch.SO53891801" xmlns:b="http://schemas.microsoft.com/BizTalk/2003" targetNamespace="http://Scratch.SO53891801" xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="HttpRequestBody">
    <xs:complexType>
      <xs:sequence>
        <xs:element maxOccurs="unbounded" name="FromValue">
          <xs:complexType>
            <xs:sequence>
              <xs:element name="Id" type="xs:string" />
              <xs:element name="Value" type="xs:string" />
            </xs:sequence>
          </xs:complexType>
        </xs:element>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
</xs:schema>

在两者之间创建地图。

地图

Map

<?xml version="1.0" encoding="utf-16"?>
<mapsource Name="BizTalk Map" Version="2" BizTalkServerMapperTool_Version="3.0" XRange="100" YRange="420" OmitXmlDeclaration="Yes" UseXSLTransform="Undefined" TreatElementsAsRecords="No" OptimizeValueMapping="Yes" GenerateDefaultFixedNodes="Yes" PreserveSequenceOrder="No" IgnoreNamespacesForLinks="Yes" method="xml" CopyPIs="No" xmlVersion="1.0">
    <SrcTree RootNode_Name="Root">
        <Reference Location=".\SO53891801-input.xsd" />
    </SrcTree>
    <TrgTree RootNode_Name="HttpRequestBody">
        <Reference Location=".\SO53891801.xsd" />
    </TrgTree>
    <ScriptTypePrecedence>
        <CSharp Enabled="Yes" />
        <ExternalAssembly Enabled="Yes" />
        <VbNet Enabled="Yes" />
        <JScript Enabled="Yes" />
        <XsltCallTemplate Enabled="Yes" />
        <Xslt Enabled="Yes" />
    </ScriptTypePrecedence>
    <TreeValues>
        <TestValues />
        <ConstantValues />
    </TreeValues>
    <Pages>
        <Page Name="Page 1">
            <Links>
                <Link LinkID="1" LinkFrom="/*[local-name()='&lt;Schema&gt;']/*[local-name()='Root']/*[local-name()='carrier']" LinkTo="1" />
                <Link LinkID="2" LinkFrom="/*[local-name()='&lt;Schema&gt;']/*[local-name()='Root']/*[local-name()='trackingNumber']" LinkTo="1" />
                <Link LinkID="3" LinkFrom="/*[local-name()='&lt;Schema&gt;']/*[local-name()='Root']/*[local-name()='shipDate']" LinkTo="1" />
                <Link LinkID="4" LinkFrom="/*[local-name()='&lt;Schema&gt;']/*[local-name()='Root']/*[local-name()='carrier']" LinkTo="/*[local-name()='&lt;Schema&gt;']/*[local-name()='HttpRequestBody']/*[local-name()='FromValue']/*[local-name()='Value']" />
                <Link LinkID="5" LinkFrom="/*[local-name()='&lt;Schema&gt;']/*[local-name()='Root']/*[local-name()='trackingNumber']" LinkTo="/*[local-name()='&lt;Schema&gt;']/*[local-name()='HttpRequestBody']/*[local-name()='FromValue']/*[local-name()='Value']" />
                <Link LinkID="6" LinkFrom="/*[local-name()='&lt;Schema&gt;']/*[local-name()='Root']/*[local-name()='shipDate']" LinkTo="/*[local-name()='&lt;Schema&gt;']/*[local-name()='HttpRequestBody']/*[local-name()='FromValue']/*[local-name()='Value']" />
                <Link LinkID="7" LinkFrom="/*[local-name()='&lt;Schema&gt;']/*[local-name()='Root']/*[local-name()='carrier']" LinkTo="/*[local-name()='&lt;Schema&gt;']/*[local-name()='HttpRequestBody']/*[local-name()='FromValue']/*[local-name()='Id']" Compiler-Copy-Directive="CopyName" />
                <Link LinkID="8" LinkFrom="/*[local-name()='&lt;Schema&gt;']/*[local-name()='Root']/*[local-name()='trackingNumber']" LinkTo="/*[local-name()='&lt;Schema&gt;']/*[local-name()='HttpRequestBody']/*[local-name()='FromValue']/*[local-name()='Id']" Compiler-Copy-Directive="CopyName" />
                <Link LinkID="9" LinkFrom="/*[local-name()='&lt;Schema&gt;']/*[local-name()='Root']/*[local-name()='shipDate']" LinkTo="/*[local-name()='&lt;Schema&gt;']/*[local-name()='HttpRequestBody']/*[local-name()='FromValue']/*[local-name()='Id']" Compiler-Copy-Directive="CopyName" />
                <Link LinkID="10" LinkFrom="1" LinkTo="/*[local-name()='&lt;Schema&gt;']/*[local-name()='HttpRequestBody']/*[local-name()='FromValue']" />
            </Links>
            <Functoids>
                <Functoid FunctoidID="1" Functoid-FID="424" X-Cell="53" Y-Cell="173">
                    <Input-Parameters>
                        <Parameter Type="link" Value="1" linkIndex="0" Guid="7932e28c-0c98-4f47-aea8-f9a3a709eef0" />
                        <Parameter Type="link" Value="2" linkIndex="1" Guid="44112afb-3729-4d14-ba00-9053c96964a4" />
                        <Parameter Type="link" Value="3" linkIndex="2" Guid="eaecaba3-61c0-4cea-ae1b-16316322cea6" />
                    </Input-Parameters>
                </Functoid>
            </Functoids>
        </Page>
    </Pages>
</mapsource>

邮件中的上下文属性 从输入模式中,它将提升属性,并且在映射执行后,该属性仍将存在。

在发送端口上的映射之后,显示上下文属性仍然存在

Context Property