Изменить URL-адрес результатов на многогранной странице поиска Alfresco AIkau

У меня есть некоторые трудности с настройкой многогранной страницы поиска Aikau на Alfresco, что может быть связано с недостатком моих знаний о dojo/AMD.

Что я хочу сделать, так это заменить URL-адрес страницы сведений о документе на URL-адрес загрузки.

Я расширил виджет результатов поиска, включив в него собственный модуль:

var searchResultWidget = widgetUtils.findObject(model.jsonModel, "id", "FCTSRCH_SEARCH_RESULT");

if(searchResultWidget) {
    searchResultWidget.name = "mynamespace/search/CustomAlfSearchResult";
}

Я понимаю, что URL-адреса результатов поиска отображаются следующим образом: модуль AlfSearchResult => использует модуль SearchResultPropertyLink => миксины _SearchResultLinkMixin renderer => привнесите функцию «generateSearchLinkPayload» => отображает URL-адреса в зависимости от типа результата

Я хочу переопределить эту функцию «generateSearchLinkPayload», но не могу понять, как это лучше всего сделать.

Заранее спасибо за помощь !


person Tony Rivet    schedule 04.04.2016    source источник


Ответы (2)


Этот ответ предполагает, что вы можете использовать последнюю версию Aikau (на момент написания это 1.0.61). В более старых версиях может потребоваться немного другое переопределение...

Для этого вам потребуется переопределить функцию createDisplayNameRenderer функции AlfSearchResult в вашем виджете CustomAlfSearchResult. Это позволит вам создать расширение alfresco/search/SearchResultPropertyLink.

Если вы хотите воспользоваться возможностями загрузки, предоставляемыми alfresco/services/DocumentService для загрузки как документов, так и папок (в виде zip-архива), вам нужно изменить как publishTopic, так и publishPayload в SearchResultPropertyLink.

Вы должны расширить функции getPublishTopic и generateSearchLinkPayload. Для функции getPublishTopic вы захотите изменить возвращаемое значение на "ALF_SMART_DOWNLOAD" (в модуле alfresco/core/topics для этих строк доступны константы). Этот раздел можно использовать, чтобы сообщить DocumentService, чтобы он позаботился о выяснении, является ли узел папкой или документом, и сделает запрос XHR для полных метаданных узла (чтобы получить атрибут contentUrl, который не включен в возвращаемые данные). API поиска.

Вы должны расширить функцию generateSearchLinkPayload, чтобы для типов документов или папок полезная нагрузка содержала атрибут nodes, представляющий собой единый массив, в котором объект представляет собой объект результатов поиска, который вы хотите загрузить.

Я бы порекомендовал вам сначала вызвать this.inherited, чтобы получить полезные данные по умолчанию, и обновить их только для документов и папок.

Надеюсь, все понятно. Если нет, добавьте комментарий, и я постараюсь оказать дальнейшую помощь!

person Dave Draper    schedule 04.04.2016
comment
Спасибо за помощь, Дэйв! Мне нужно было указать, что я использую Alfresco 5.1.2.5, которая поставляется вместе с Aikau 1.0.25. К сожалению, функция createDisplayNameRenderer недоступна в этой версии... Есть ли другой чистый способ расширения SearchResultPropertyLink в более старых версиях? - person Tony Rivet; 05.04.2016
comment
Хорошо... Сегодня я еще раз взгляну на это и посмотрю, какие есть варианты. Умная загрузка определенно не будет доступна, и, как вы говорите, AlfSearchResult не будет так аккуратно разбит. Можно использовать более поздние версии Aikau (очевидно, здесь есть небольшой элемент риска, поскольку они не прошли через полностью интегрированный процесс обеспечения качества). Но более поздние пакеты обновлений (для 5.0 и 5.1) в любом случае обычно используют последнюю версию Aikau. - person Dave Draper; 05.04.2016

Это ответ для 1.0.25.2 - к сожалению, это не так просто...

Вам все еще нужно расширить виджет alfresco/search/AlfSearchResult, однако на этот раз вам нужно расширить функцию postCreate (не забывая вызывать this.inherited(arguments)). Невозможно остановить создание исходного виджета alfresco/search/SearchResultPropertyLink... поэтому необходимо будет найти его и уничтожить.

Виджет не привязан к переменной, поэтому его нужно будет найти с помощью dijit /регистр. Используйте функцию byNode из dijit/registry, чтобы найти виджет, назначенный this.nameNode, а затем вызовите для него команду destroy (не забудьте передать аргумент true, чтобы сохранить DOM). Однако затем вам нужно будет очистить узел DOM, чтобы вы могли начать снова...

Теперь вам нужно добавить расширение в alfresco/search/SearchResultPropertyLink. К сожалению, поскольку функция интеллектуальной загрузки недоступна, вам придется проделать дополнительную работу. Разница здесь в том, что вам нужно будет сделать запрос XHR для получения полных метаданных узла, чтобы получить contentURL. Возможна публикация запроса в DocumentService(через тему "ALF_RETRIEVE_SINGLE_DOCUMENT_REQUEST"). Однако вы должны знать, что наличие шага XHR не позволит вам продолжить загрузку как есть. Вместо этого вам нужно будет использовать решение для загрузки iframe, я предлагаю вам взглянуть на изменения в pull request, который мы недавно сделали, чтобы решить эту проблему и перенести их в ваше собственное решение.

person Dave Draper    schedule 05.04.2016
comment
Я понял, что ответ был только частично правильным, поэтому я отредактировал, чтобы описать, как реализовать пользовательскую ссылку SearchResultPropertyLink - ранее этого не было в исходном ответе. - person Dave Draper; 06.04.2016