BizTalk принудительно создает пустые элементы без использования шаблона вызова xslt - PullRequest
2 голосов
/ 03 ноября 2010

Есть ли в любом случае на карте BizTalk принудительное создание элементов назначения, когда исходные элементы не существуют без использования шаблона вызова xslt?

Я сопоставляю родительский / дочерний xml с wcf-Схема sql, сгенерированная адаптером, которая имеет табличные параметры для хранимых параметров процесса.

Итак, мой исходный код xml:

<Category>
  <CategoryId>1</CategoryId>
  <CategoryName>Test</CategoryName>
</Category>

и / или Категория со СМИ

<Category>
  <CategoryId>1</CategoryId>
  <CategoryName>Test</CategoryName>
  <Media>
    <Medium>
      <MediumId>1</MediumId>
      <MediumName>test.jpg</MediumName>
    </Medium>
  </Media>
</Category>

Схема для TypedProcedure выглядит примерно так:

<ImportCategoryRequest>
  <Category>
    <CategoryId>1</CategoryId>
    <CategoryName>Test</CategoryName>
  </Category>
  <Media>
    <Medium>
      <MediumId>1</MediumId>
      <MediumName>test.jpg</MediumName>
    </Medium>
  </Media>
</ImportCategoryRequest>

Так что ему не нравится, когда все это появляется в целевом XML.Вместо передачи значения null для табличного параметра требуется не менее 1 строки и для передачи значений NULL для столбцов в tvp.Я могу создать фиктивный xml с помощью шаблона вызова xslt, но я бы хотел этого избежать.

1 Ответ

3 голосов
/ 03 ноября 2010

Картограф BizTalk, похоже, использует <xsl:for-each> и в результате не будет генерировать выходной элемент, если нет ввода.

Но использовать xslt действительно просто - см. здесь , как вычистить xslt из вашей существующей карты (и просто удалить экранирование вокруг двойных кавычек и слешей) и изменить карту на пользовательский XSLT.

Бит, который вам нужно изменить, связан со СМИ:

        <xsl:choose>
            <xsl:when test="count(ns0:Media)!=0">
                <!-- Copy the mapper generated XSLT in the for each here-->
                <xsl:foreach >
                    </xsl:for-each>
                </xsl:when>
            <xsl:otherwise>
                <Media>
                    <Medium>
                        <MediumId>1</MediumId>
                        <MediumName>test.jpg</MediumName>
                    </Medium>
                </Media>
            </xsl:otherwise>
        </xsl:choose>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...