Я получаю поведение другого компонента, когда он вызывается через веб-службу odata, чем то, как оно отображается на странице


2

Я запускаю Tridion 2013sp1. У меня есть компонент меню на моем сайте, который публикуется с использованием шаблона rel. Он используется совместно с внешними приложениями, а также используется на страницах нашего сайта Tridion. Одним из требований является то, что внешние ссылки открываются в новом окне/вкладке. Когда мы публикуем наш компонент, он создает XML-ссылки в меню, а затем анализирует их для меню. Одна точка логики ведет себя по-разному при вызове через веб-службу, чем на странице. При создании XML мы добавляем цель для внешних ссылок.

Вот пример XML генерируемой:

<siteMapNode type="additional" level="3" title="Additional Link (External)" url="https://www.google.com" target="_blank" /> 

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

target="<c:choose><c:when test="thirdItem.target"><c:out value="thirdItem.target" /></c:when><c:otherwise>_top</c:otherwise></c:choose>" 

Просто, чтобы сделать вещи интересно, URL для ссылки генерируется таким же образом:

href="<c:choose><c:when test="thirdItem.url"><c:out value="thirdItem.url" /></c:when><c:otherwise>#</c:otherwise></c:choose>" 

URL-адрес работает правильно каждый раз.

Это не публикуется для разных целей публикации, но публикация делает его доступной как для моих страниц Tridion, так и через веб-службу. Кто-нибудь видел что-то подобное раньше? Есть ли разница в машинах, которые анализируют службу Odata и страницы Tridion?

  0

Хотя вы указываете, что URL-адрес для этой ссылки генерируется таким же способом_ - подтвердили ли вы, что .target не является виновником? (например, форсирование цели на основе .url, а не .target) 20 май. 152015-05-20 22:28:19

+1

Есть ли какая-либо разница в кешировании между сервисом odata и веб-приложением, правильно ли используются кеш-брокера и служба канала кеша? 21 май. 152015-05-21 07:54:20

2

Я предполагаю, что ваша конфигурация настроена на публикацию компонента меню в Брокерской БД (а не в файловой системе). В этом случае попробуйте проверить, какое значение возвращается, когда вы выполняете простой вызов ComponentPresentationAssembler.getContent (id, ctId) в рудиментарном jsp, чтобы вытащить его, и проверите/распечатайте возвращаемую строку, чтобы увидеть, соответствует ли она тому, что выходит веб-службы. Я ожидаю, что он будет таким же, если служба OData действительно указывает на ту же Брокерскую БД, что и на странице.

Если это то же самое, то виновник лежит в вашем пользовательском коде, поэтому посмотрите на слои над Tridion. Если это не одно и то же, сравните ваш сайт с конфигурациями odata: cd_storage_conf.xml и cd_deployer_conf.xml обоих.