Как создать массив записей в BizTalk - PullRequest
0 голосов
/ 09 сентября 2011

У меня есть тип xsd, который состоит из нескольких элементов. Один из элементов определяется как <xs:element name="Parameters" type="ParametersType" />, где ParametersType равно

<xs:complexType name="ParametersType">
    <xs:sequence>
        <xs:element name="Parameter"
                    type="ParameterType"
                    minOccurs="0"
                    maxOccurs="unbounded" />
        <xs:element name="UserDefinedParameter"
                    type="xs:base64Binary"
                    minOccurs="0"
                    maxOccurs="1">
        </xs:element>
    </xs:sequence>
</xs:complexType>

То есть у меня есть массив записей типа Parameter. Итак, у меня есть 2 вопроса:

  1. Как инициализировать такой массив и как с ним работать в блоке Expression;
  2. Как настроить отображение из входящего сообщения того же типа в мое сообщение?

1 Ответ

3 голосов
/ 09 сентября 2011

Когда мы говорим о массивах здесь, мы на самом деле говорим о вложенных повторяющихся узлах в вашем сообщении.

Одно из решений - это декомпозировать ваш массив внутри цикла в вашей оркестровке.

Этоне просто, но вот пример:

Deconstructing nested repeatable message section inside biztalk orch

Код внутри различных форм выражений:

Внутри «Подсчета элементов массива»

intCountArrayItems = xpath(MyMessage, "count(XpathToParameterNodeInYourMessage)");

Внутри "элемента массива foreach"

intLoopIndex < intCountArrayItems 

Внутри "Использование элемента массива"

strXPathToArrayItem = System.String.Format("XpathToParameterNodeInYourMessage[{0}]", intLoopIndex + 1);
MyXmlDocument = xpath(MyMessage, strXPathToArrayItem);
// Now you can do what you want with the xml document.

Внутри "Индекса цикла приращения"

intLoopIndex = intLoopIndex + 1;

Вышедает вам возможность разложить массив внутри вашей оркестровки и получить доступ к каждому из ваших типов «Paramter» в виде xml-документа (с которым вы потом сможете делать что-то).

Надеюсь, это поможет.

...