Текущее время: Чт, мар 28 2024, 20:10

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 14 ] 
Автор Сообщение
 Заголовок сообщения: Глюки процессора XSLT
СообщениеДобавлено: Чт, июл 02 2015, 07:47 
Старший специалист
Старший специалист
Аватара пользователя

Зарегистрирован:
Пн, авг 29 2011, 08:54
Сообщения: 318
Откуда: Владивосток, Россия
Пол: Мужской
Коллеги, добрый день!

Продолжается борьба с XSLT в PI :-)

Есть трансформация, где есть такой фрагмент:

Code:
<xsl:variable name="materialslist">
   <xsl:for-each select="ns0:MT_NVT_Supply_Message/SalesDocument/Goods">
      <Item>
         <xsl:value-of select="MaterialCode"/>
      </Item>
   </xsl:for-each>
</xsl:variable>


Переменная определяется в корневом контексте.

Использую Stylus Studio, для сценария специально настроил использование саповского процессора из XMLToolkit (т.к. нужны параметры из OM).

Command line: java com.sap.engine.lib.xsl.Process -xsl=%2 -xml=%1 -out=%3
Path: C:\JRE\jre6\bin
Classpath: C:\JRE\sap.com~tc~sapxmltoolkit~sapxmltoolkit.jar

Переменная понадобится дальше, пока для проверки вставил в шаблон:

Code:
<xsl:template match="/*">
   <xsl:copy>
      <xsl:element name="Materials">
         <xsl:value-of select="$materialslist"/>
      </xsl:element>
      <xsl:apply-templates select="*"/>
   </xsl:copy>
</xsl:template>


Запускаю на выполнение в Stylus Studio, все хорошо:
<Materials>460389208675446038920867784603892086822</Materials>

Переношу в ESR, запускаю OM с этим преобразованием, используя XMLToolkit, получаю:
<Materials/>

Отключаю XMLToolkit:
<Materials>460389208675446038920867784603892086822</Materials>

Библиотеку брал на сервере, где и тестирую:
\\...\DVEBMGS09\j2ee\cluster\bin\ext\sapxmltoolkit\lib\

Вот что ему опять не нравится? :-)

_________________
У меня два правила:
1. Не говорить всего, что знаю.


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Глюки процессора XSLT
СообщениеДобавлено: Чт, июл 02 2015, 09:05 
Старший специалист
Старший специалист
Аватара пользователя

Зарегистрирован:
Пн, авг 29 2011, 08:54
Сообщения: 318
Откуда: Владивосток, Россия
Пол: Мужской
Пока искал решение проблемы, наткнулся на неизвестный мне до этого времени способ писать ява-мэппинг - прямо в графическом мэппинге. Прикольно, в простых случаях вполне себе подходит :-)

_________________
У меня два правила:
1. Не говорить всего, что знаю.


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Глюки процессора XSLT
СообщениеДобавлено: Чт, июл 02 2015, 13:55 
Директор
Директор

Зарегистрирован:
Вт, июл 18 2006, 17:44
Сообщения: 1001
Откуда: что и все
Пол: Мужской
пруф в студию!
то есть минимальный пример XSLT и входного XML.

_________________
Telegram-chat: PO, CPI-PI, java, groovy


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Глюки процессора XSLT
СообщениеДобавлено: Чт, июл 02 2015, 14:03 
Старший специалист
Старший специалист
Аватара пользователя

Зарегистрирован:
Пн, авг 29 2011, 08:54
Сообщения: 318
Откуда: Владивосток, Россия
Пол: Мужской
Пруф чего? Разных результатов?
Завтра с утра сделаю, сейчас уже не на работе.

_________________
У меня два правила:
1. Не говорить всего, что знаю.


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Глюки процессора XSLT
СообщениеДобавлено: Чт, июл 02 2015, 14:11 
Старший специалист
Старший специалист
Аватара пользователя

Зарегистрирован:
Пн, авг 29 2011, 08:54
Сообщения: 318
Откуда: Владивосток, Россия
Пол: Мужской
Да к тому же, сам факт, что явовский транслятор и XMLToolkit по-разному обрабатывают совершенно нехитрый шаблон, уже смущает :-)

_________________
У меня два правила:
1. Не говорить всего, что знаю.


Последний раз редактировалось Chaser009 Пт, июл 03 2015, 07:55, всего редактировалось 1 раз.

Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Глюки процессора XSLT
СообщениеДобавлено: Пт, июл 03 2015, 03:49 
Старший специалист
Старший специалист
Аватара пользователя

Зарегистрирован:
Пн, авг 29 2011, 08:54
Сообщения: 318
Откуда: Владивосток, Россия
Пол: Мужской
XSLT-преобразование:

<?xml version='1.0'?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:ns0="http://www.novatour.ru">

<xsl:output indent="yes" method="xml" encoding="UTF-8" omit-xml-declaration="yes"/>

<xsl:variable name="materialslist">
<xsl:for-each select="ns0:MT_NVT_Supply_Message/SalesDocument/Goods">
<Item>
<xsl:value-of select="MaterialCode"/>
</Item>
</xsl:for-each>
</xsl:variable>

<xsl:template match="/*">
<xsl:copy>
<xsl:element name="Materials">
<xsl:value-of select="$materialslist"/>
</xsl:element>
<xsl:apply-templates select="*"/>
</xsl:copy>
</xsl:template>

<!--Copy document nodes-->
<xsl:template match="*">
<xsl:copy> <xsl:apply-templates/> </xsl:copy>
</xsl:template>

<xsl:template match="Goods">
<xsl:copy>
<xsl:attribute name="party_code"> <xsl:value-of select="MaterialCode"/> </xsl:attribute>
<xsl:attribute name="party_plant"> <xsl:value-of select="Plant"/> </xsl:attribute>
<xsl:apply-templates/>
</xsl:copy>
</xsl:template>

<!--Get partner texts-->
<xsl:template match="//Partner">
<xsl:copy>
<xsl:apply-templates select="@* | node()"/>
<xsl:if test="Type='Consignee'">
<xsl:element name="PartnerTexts">
<xsl:call-template name="recusivetexts"> <xsl:with-param name="selnode" select="."/> </xsl:call-template>
</xsl:element>
</xsl:if>
</xsl:copy>
</xsl:template>


<!--split Partner node contents into text lines with defined length and format option-->
<xsl:template name="recusivetexts">
<xsl:param name="selnode"/>
<xsl:for-each select="*">
<xsl:element name="TextLine">
<xsl:element name="Format">/*</xsl:element>
<xsl:element name="Text"><xsl:value-of select="local-name()"/></xsl:element>
</xsl:element>
<xsl:if test="*">
<xsl:call-template name="recusivetexts"> <xsl:with-param name="selnode" select="."/> </xsl:call-template>
</xsl:if>
<xsl:if test="normalize-space(.) != ''">
<xsl:call-template name="splitstring"> <xsl:with-param name="str" select="normalize-space(.)"/> <xsl:with-param name="splitlength" select="130"/> </xsl:call-template>
</xsl:if>
<xsl:element name="TextLine">
<xsl:element name="Format">/*</xsl:element>
<xsl:element name="Text"><xsl:value-of select="concat('/', local-name())"/></xsl:element>
</xsl:element>
</xsl:for-each>
</xsl:template>

<xsl:template name="splitstring">
<xsl:param name="str"/>
<xsl:param name="splitlength"/>

<xsl:choose>
<xsl:when test="string-length($str) &gt; $splitlength">
<xsl:element name="TextLine">
<xsl:element name="Format">/</xsl:element>
<xsl:element name="Text"><xsl:value-of select="substring($str, 1, $splitlength)"/></xsl:element>
</xsl:element>

<xsl:variable name="newstr" select="substring($str, $splitlength+1)"/>
<xsl:call-template name="splitstring"> <xsl:with-param name="str" select="$newstr"/> <xsl:with-param name="splitlength" select="$splitlength"/> </xsl:call-template>
</xsl:when>
<xsl:otherwise>
<xsl:element name="TextLine">
<xsl:element name="Format">/</xsl:element>
<xsl:element name="Text"><xsl:value-of select="$str"/></xsl:element>
</xsl:element>
</xsl:otherwise>
</xsl:choose>

</xsl:template>

</xsl:stylesheet>

_________________
У меня два правила:
1. Не говорить всего, что знаю.


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Глюки процессора XSLT
СообщениеДобавлено: Пт, июл 03 2015, 03:50 
Старший специалист
Старший специалист
Аватара пользователя

Зарегистрирован:
Пн, авг 29 2011, 08:54
Сообщения: 318
Откуда: Владивосток, Россия
Пол: Мужской
Входной XML:

<?xml version="1.0" encoding="UTF-8"?>
<ns0:MT_NVT_Supply_Message xmlns:ns0="http://www.novatour.ru">
<MESSAGE_HEADER>
<MESTYP>MT_NVT_Supply_Message</MESTYP>
<MESID>00001140062015</MESID>
<MESDATE>20150702</MESDATE>
<SNDPRN>NOVATOUR</SNDPRN>
<RCVPRN>VLL</RCVPRN>
</MESSAGE_HEADER>
<SalesDocument>
<OrderNumber>Пе002177</OrderNumber>
<DeliveryNumber>000114006</DeliveryNumber>
<Partner>
<Type>Supplier</Type>
<Code>NOVATOUR</Code>
</Partner>
<Partner>
<Type>Consignee</Type>
<Code>03443</Code>
<Name>Эм Дю Хок</Name>
<Address>693000, Сахалинская обл, Южно-Сахалинск г, Мира пр, дом № 19 магазин «Рыболов-Элит»</Address>
<ContactInfo>
<PhoneNumber>(4242) 50-57-41</PhoneNumber>
<EMail/>
<ContactPerson>
<Phone>(4242) 50-57-41</Phone>
<Person/>
</ContactPerson>
</ContactInfo>
<AdditionalInfo/>
</Partner>
<Partner>
<Type>Forwarder</Type>
<Code/>
<Name>Протек Лоджистик (Уссурийск)</Name>
<Address>г.Уссурийск, ул.Чичерина, д.152</Address>
<ContactInfo>
<PhoneNumber>8-4234-355-500</PhoneNumber>
<EMail/>
</ContactInfo>
<AdditionalInfo/>
</Partner>
<DeliveryDate>06.07.2015</DeliveryDate>
<OrderDate>02.07.2015</OrderDate>
<AdditionalInfo/>
<DeliveryToDoor/>
<Goods>
<MaterialCode>4603892086693</MaterialCode>
<MaterialName>Лимерик 3 v.2 палатка</MaterialName>
<MaterialCharactristics>Зеленый</MaterialCharactristics>
<BaseUOM>шт</BaseUOM>
<Quantity>5</Quantity>
<Plant>00026</Plant>
</Goods>
<Goods>
<MaterialCode>4603892086709</MaterialCode>
<MaterialName>Лимерик 4 v.2 палатка</MaterialName>
<MaterialCharactristics>Зеленый</MaterialCharactristics>
<BaseUOM>шт</BaseUOM>
<Quantity>5</Quantity>
<Plant>00026</Plant>
</Goods>
</SalesDocument>
</ns0:MT_NVT_Supply_Message>

_________________
У меня два правила:
1. Не говорить всего, что знаю.


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Глюки процессора XSLT
СообщениеДобавлено: Пт, июл 03 2015, 13:36 
Директор
Директор

Зарегистрирован:
Вт, июл 18 2006, 17:44
Сообщения: 1001
Откуда: что и все
Пол: Мужской
$materialslist ты формируешь как дерево а используешь оттуда тексты, без Item -- зачем?

Вместо <xsl:template match="/"....> проще так:

<xsl:template match="/ns0:MT_NVT_Supply_Message">
<xsl:copy>
<Materials><xsl:apply-templates mode="m1" select="SalesDocument/Goods/MaterialCode"></xsl:apply-templates></Materials>
<xsl:apply-templates select="*"/>
</xsl:copy>
</xsl:template>

Или если хочешь через переменную то
<xsl:template match="/ns0:MT_NVT_Supply_Message">
<xsl:copy>
<Materials><xsl:copy-of select="$materialslist"/></Materials>
<xsl:apply-templates select="*"/>
</xsl:copy>
</xsl:template>

_________________
Telegram-chat: PO, CPI-PI, java, groovy


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Глюки процессора XSLT
СообщениеДобавлено: Пт, июл 03 2015, 14:13 
Старший специалист
Старший специалист
Аватара пользователя

Зарегистрирован:
Пн, авг 29 2011, 08:54
Сообщения: 318
Откуда: Владивосток, Россия
Пол: Мужской
Насчет переменной уже писал выше - это просто для проверки правильности заполнения. Использоваться она будет позже, еще не реализовал.
Но сам факт: при включенном xmltoolkit текст не выводится.

Я уже переписал без использования toolkit. Почему-то был уверен, что без него параметры не выдерну из DC. Но все получилось.

_________________
У меня два правила:
1. Не говорить всего, что знаю.


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Глюки процессора XSLT
СообщениеДобавлено: Пт, июл 03 2015, 14:14 
Директор
Директор

Зарегистрирован:
Вт, июл 18 2006, 17:44
Сообщения: 1001
Откуда: что и все
Пол: Мужской
а почему бы не

<xsl:variable name="materialslist">
<xsl:for-each select="/ns0:MT_NVT_Supply_Message/SalesDocument/Goods">
<Item>
<xsl:value-of select="MaterialCode"/>
</Item>
</xsl:for-each>
</xsl:variable>

? Или у тебя этот код будет ещё в мультимеппинге?

_________________
Telegram-chat: PO, CPI-PI, java, groovy


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Глюки процессора XSLT
СообщениеДобавлено: Пт, июл 03 2015, 14:26 
Старший специалист
Старший специалист
Аватара пользователя

Зарегистрирован:
Пн, авг 29 2011, 08:54
Сообщения: 318
Откуда: Владивосток, Россия
Пол: Мужской
А у меня вроде же так и есть?

_________________
У меня два правила:
1. Не говорить всего, что знаю.


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Глюки процессора XSLT
СообщениеДобавлено: Пт, июл 03 2015, 15:20 
Директор
Директор

Зарегистрирован:
Вт, июл 18 2006, 17:44
Сообщения: 1001
Откуда: что и все
Пол: Мужской
у тебя без слеша первого

_________________
Telegram-chat: PO, CPI-PI, java, groovy


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Глюки процессора XSLT
СообщениеДобавлено: Пт, июл 03 2015, 17:18 
Старший специалист
Старший специалист
Аватара пользователя

Зарегистрирован:
Пн, авг 29 2011, 08:54
Сообщения: 318
Откуда: Владивосток, Россия
Пол: Мужской
А, понятно.

_________________
У меня два правила:
1. Не говорить всего, что знаю.


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Глюки процессора XSLT
СообщениеДобавлено: Сб, июл 04 2015, 07:05 
Старший специалист
Старший специалист
Аватара пользователя

Зарегистрирован:
Пн, авг 29 2011, 08:54
Сообщения: 318
Откуда: Владивосток, Россия
Пол: Мужской
Нет, мультимэппинга не будет.
Да, согласен, так оптимальнее.

_________________
У меня два правила:
1. Не говорить всего, что знаю.


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 14 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB