BizTalk WCF-WebHttp отображает переменную формы данных из многократных узлов - PullRequest
0 голосов
/ 22 декабря 2018

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

Моя проблема заключается в отображении переменной URL для poNumber при отправкеконфигурация порта.Я хочу сделать что-то вроде этого:

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

Учитывая, что только отдельные узлы вхождения могут быть продвинуты через схему свойств, я не могу сопоставить данные poNumber с теми же узлами, которые я сопоставляю переменным тела сообщения, ния хочу, чтобы имя / значение poNumber было включено в тело сообщения.

Достигли ли я ограничения этого конкретного адаптера?

1 Ответ

0 голосов
/ 24 декабря 2018

Предполагая, что повторяющийся узел, о котором вы говорите, находится в схеме назначения, идущей к адпатеру WCF-WebHttp, и что 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

...