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

Часовой пояс: 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 часа


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

Сейчас этот форум просматривают: Google [Bot]


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

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