我的客户的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)定义平面文件架构很容易。
我的问题是发送端口配置中poNumber的URL变量映射。我想做这样的事情:
<BtsHttpUrlMapping>
<Operation Name = "POSHIPPED" Method="POST" Url="/poNumber/{poNumber}/complete"/>
</BtsHttpUrlMapping>
鉴于只能通过属性模式升级单个出现节点,所以我无法将poNumber数据映射到映射消息正文变量的相同节点,也不想让poNumber名称/值包含在消息正文中。
我达到了此特定适配器的限制吗?
答案 0 :(得分:0)
假设您正在谈论的重复节点位于转到WCF-WebHttp adatper的目标模式中,并且poNumber位于要映射的模式上的非重复节点中。
您需要做的是创建一个属性架构,在其中将poNumber定义为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>
在两者之间创建地图。
地图
<?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()='<Schema>']/*[local-name()='Root']/*[local-name()='carrier']" LinkTo="1" />
<Link LinkID="2" LinkFrom="/*[local-name()='<Schema>']/*[local-name()='Root']/*[local-name()='trackingNumber']" LinkTo="1" />
<Link LinkID="3" LinkFrom="/*[local-name()='<Schema>']/*[local-name()='Root']/*[local-name()='shipDate']" LinkTo="1" />
<Link LinkID="4" LinkFrom="/*[local-name()='<Schema>']/*[local-name()='Root']/*[local-name()='carrier']" LinkTo="/*[local-name()='<Schema>']/*[local-name()='HttpRequestBody']/*[local-name()='FromValue']/*[local-name()='Value']" />
<Link LinkID="5" LinkFrom="/*[local-name()='<Schema>']/*[local-name()='Root']/*[local-name()='trackingNumber']" LinkTo="/*[local-name()='<Schema>']/*[local-name()='HttpRequestBody']/*[local-name()='FromValue']/*[local-name()='Value']" />
<Link LinkID="6" LinkFrom="/*[local-name()='<Schema>']/*[local-name()='Root']/*[local-name()='shipDate']" LinkTo="/*[local-name()='<Schema>']/*[local-name()='HttpRequestBody']/*[local-name()='FromValue']/*[local-name()='Value']" />
<Link LinkID="7" LinkFrom="/*[local-name()='<Schema>']/*[local-name()='Root']/*[local-name()='carrier']" LinkTo="/*[local-name()='<Schema>']/*[local-name()='HttpRequestBody']/*[local-name()='FromValue']/*[local-name()='Id']" Compiler-Copy-Directive="CopyName" />
<Link LinkID="8" LinkFrom="/*[local-name()='<Schema>']/*[local-name()='Root']/*[local-name()='trackingNumber']" LinkTo="/*[local-name()='<Schema>']/*[local-name()='HttpRequestBody']/*[local-name()='FromValue']/*[local-name()='Id']" Compiler-Copy-Directive="CopyName" />
<Link LinkID="9" LinkFrom="/*[local-name()='<Schema>']/*[local-name()='Root']/*[local-name()='shipDate']" LinkTo="/*[local-name()='<Schema>']/*[local-name()='HttpRequestBody']/*[local-name()='FromValue']/*[local-name()='Id']" Compiler-Copy-Directive="CopyName" />
<Link LinkID="10" LinkFrom="1" LinkTo="/*[local-name()='<Schema>']/*[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>
邮件中的上下文属性 从输入模式中,它将提升属性,并且在映射执行后,该属性仍将存在。
在发送端口上的映射之后,显示上下文属性仍然存在