Разрешена ли переменная схемы Biztalk число столбцов в файле с разделителями? - PullRequest
2 голосов
/ 01 июня 2011

Hiyas. У меня есть клиент, который отправляет нам заказы в виде плоского файла. Нет ничего сложного в этом файле, но есть некоторые несоответствия от файла к файлу.

Формат файла примерно такой:

1,2,3 [CRLF]
1,2,3 [CRLF]

Нет проблем при создании схемы вокруг этой структуры, однако время от времени они будут добавлять новый столбец.

1,2,3, 4 [CRLF]
1,2,3, 4 [CRLF]

К сожалению, они не делают свои изменения каскадно в обратном направлении, поэтому мы ожидали, что поддержим оба формата - 3 и 4 столбца. Оба формата потенциально могут проходить через один и тот же конвейер, поэтому у меня нет возможности создавать отдельные схемы / конвейеры. Они всегда добавляют новые поля в конец строки, так что, по крайней мере, многое согласуется.

Единственное, что я могу придумать, - это разработать тщательно продуманное «выяснение того, какая схема применяется и направить соответствующий компонент конвейера», но прежде чем идти по этому пути, я хотел посмотреть, возможно, у кого-нибудь есть какие-нибудь мысли о том, как заставить его работать с одной плоской файловой схемой (я попытался установить для свойства minOccurs необязательных столбцов значение 0, но это не помогло).

Заранее спасибо за любой совет.

1 Ответ

0 голосов
/ 03 июня 2011

Один из способов - определить «внешнюю» схему и импортировать схемы для различных версий , которые необходимо поддерживать. «Внешняя» схема предложит блок choice, содержащий ссылки на импортированные схемы версий.

Если вам нужно добавить следующую версию, вам просто нужно импортировать новую схему и добавить ее в choice.

Сложная часть, конечно, состоит в том, как вы можете определить, как обрабатывать разные версии. Возможно, самый простой способ - создать карту для каждого выделенного типа, с которым вам нужно работать. С другой стороны, вы можете расширить «самый последний и самый лучший» внутренний тип сообщения и принять решение на основе содержимого сообщения.

"внешняя" схема

<!-- language: xml-schema -->

<?xml version="1.0" encoding="utf-16"?>
<xs:schema xmlns:ns0="http://ACME.Version_001" xmlns:b="http://schemas.microsoft.com/BizTalk/2003" xmlns="http://ACME.Outer" xmlns:ns1="http://ACME.Version_002" targetNamespace="http://ACME.Outer" xmlns:xs="http://www.w3.org/2001/XMLSchema">
    <xs:import schemaLocation=".\version_002.xsd" namespace="http://ACME.Version_002" />
    <xs:import schemaLocation=".\version_001.xsd" namespace="http://ACME.Version_001" />
    <xs:annotation>
        <xs:appinfo>
            <b:schemaInfo standard="Flat File" root_reference="Root" />
            <schemaEditorExtension:schemaInfo namespaceAlias="b" extensionClass="Microsoft.BizTalk.FlatFileExtension.FlatFileExtension" standardName="Flat File" xmlns:schemaEditorExtension="http://schemas.microsoft.com/BizTalk/2003/SchemaEditorExtensions" />
            <b:references>
                <b:reference targetNamespace="http://ACME.Version_001" />
                <b:reference targetNamespace="http://ACME.Version_002" />
            </b:references>
        </xs:appinfo>
    </xs:annotation>
    <xs:element name="Root">
        <xs:annotation>
            <xs:appinfo>
                <b:recordInfo structure="delimited" sequence_number="1" child_delimiter_type="hex" child_order="postfix" child_delimiter="0x0D 0x0A" />
            </xs:appinfo>
        </xs:annotation>
        <xs:complexType>
            <xs:sequence>
                <xs:choice minOccurs="1">
                    <xs:element ref="ns0:Version_001">
                        <xs:annotation>
                            <xs:appinfo>
                                <b:recordInfo sequence_number="1" structure="delimited" />
                            </xs:appinfo>
                        </xs:annotation>
                    </xs:element>
                    <xs:element ref="ns1:Version_002">
                        <xs:annotation>
                            <xs:appinfo>
                                <b:recordInfo sequence_number="2" structure="delimited" />
                            </xs:appinfo>
                        </xs:annotation>
                    </xs:element>
                </xs:choice>
            </xs:sequence>
        </xs:complexType>
    </xs:element>
</xs:schema>

Импортированная схема "Version_001"

<!-- language: xml-schema -->

<?xml version="1.0" encoding="utf-16"?>
<xs:schema xmlns:b="http://schemas.microsoft.com/BizTalk/2003" xmlns="http://ACME.Version_001" targetNamespace="http://ACME.Version_001" xmlns:xs="http://www.w3.org/2001/XMLSchema">
    <xs:annotation>
        <xs:appinfo>
            <b:schemaInfo standard="Flat File" root_reference="Version_001" />
            <schemaEditorExtension:schemaInfo namespaceAlias="b" extensionClass="Microsoft.BizTalk.FlatFileExtension.FlatFileExtension" standardName="Flat File" xmlns:schemaEditorExtension="http://schemas.microsoft.com/BizTalk/2003/SchemaEditorExtensions" />
        </xs:appinfo>
   </xs:annotation>
   <xs:element name="Version_001">
       <xs:annotation>
           <xs:appinfo>
               <b:recordInfo structure="delimited" child_delimiter_type="char" child_order="infix" rootTypeName="Version_001" child_delimiter="," />
           </xs:appinfo>
       </xs:annotation>
       <xs:complexType>
           <xs:sequence>
               <xs:element name="Col1" type="xs:string" />
               <xs:element name="Col2" type="xs:string" />
               <xs:element name="Col3" type="xs:string" />
           </xs:sequence>
       </xs:complexType>
   </xs:element>
</xs:schema>

Импортированная схема "Version_002"

<!-- language: xml-schema -->

<?xml version="1.0" encoding="utf-16"?>
<xs:schema xmlns:b="http://schemas.microsoft.com/BizTalk/2003" xmlns="http://ACME.Version_002" targetNamespace="http://ACME.Version_002" xmlns:xs="http://www.w3.org/2001/XMLSchema">
    <xs:annotation>
        <xs:appinfo>
            <b:schemaInfo standard="Flat File" root_reference="Version_002" />
            <schemaEditorExtension:schemaInfo namespaceAlias="b" extensionClass="Microsoft.BizTalk.FlatFileExtension.FlatFileExtension" standardName="Flat File" xmlns:schemaEditorExtension="http://schemas.microsoft.com/BizTalk/2003/SchemaEditorExtensions" />
        </xs:appinfo>
   </xs:annotation>
   <xs:element name="Version_002">
       <xs:annotation>
           <xs:appinfo>
               <b:recordInfo structure="delimited" child_delimiter_type="char" child_order="infix" rootTypeName="Version_001" child_delimiter="," />
           </xs:appinfo>
       </xs:annotation>
       <xs:complexType>
           <xs:sequence>
               <xs:element name="Col1" type="xs:string" />
               <xs:element name="Col2" type="xs:string" />
               <xs:element name="Col3" type="xs:string" />
               <xs:element name="Col4" type="xs:string" />
           </xs:sequence>
       </xs:complexType>
   </xs:element>
</xs:schema>

(некоторые атрибуты по умолчанию опущены для удобства чтения)

...