- Создатель Васильев Антон, отредактировано 15.01.2024
Постановка задачи
Добавить поиск для нового модуля.
Инструмент: Палитра XML, Плагин, Настройка системы
Статус | ДОРАБОТКА |
---|---|
Раздел | Поиск |
Комментарий | Информация по настройкам параметра поиска находится здесь Описание конфигурации поиска |
Реализация
Последовательность действий по реализации поиска:
- Редактирование конфигурации поиска applicationContext-config-search{Project}.xml
- Создание области поиска {Module}_area.xml
- Подключение области поиска к кастомным коллекциям {Module}_({Collection})Metadata.xml
- Загрузить конфигурацию поиска и перезагрузить сервер
- Загрузить область поиска
- Запуск плагина реиндексации ru.intertrust.cm_sochi.plugins.SolrReindexingPlugin
- Создание области поиска в системе
- Подключение области поиска в портальный профиль
Редактирование конфигурации поиска
Определение параметров поиска
Параметр поиска
Развернуть исходный код
<!--Дата--> <bean id="exampleDate" class="ru.intertrust.cmj.af.search.dp.CmParameter" c:id="testDate" c:name="Дата:" c:messageSource-ref="cmj_af_search_messageSource" c:type-ref="tdateinterval"/> <!--Сотрудник--> <bean id="exampleVCard" class="ru.intertrust.cmj.af.search.dp.CmParameter" c:id="testVCard" c:name="Сотрудник:" c:messageSource-ref="cmj_af_search_messageSource" c:type-ref="tvcard"> <constructor-arg name="classifier"> <list value-type="ru.intertrust.cmj.af.search.Classifier"> <ref bean="fvCurrHumanHH"/> <ref bean="clCurSysEmps"/> <ref bean="clNosys"/> </list> </constructor-arg> </bean>
Подключение параметров поиска к форме
Отображение на поисковой форме
Развернуть исходный код
<bean id="rkkSuperBundle{Module}" abstract="true" class="ru.intertrust.cmj.af.search.dp.CmBundle"> <constructor-arg index="0" value="rkk"/> <constructor-arg index="1" value="{Object}"/> <constructor-arg index="2"> <list> <ref bean="exampleDate"/> <ref bean="exampleVCard"/> </list> </constructor-arg> <constructor-arg index="3" ref="cmj_af_search_messageSource"/> </bean>
Определение модуля
Подключение модуля
Развернуть исходный код
<bean id="{module}Searcher" class="ru.intertrust.cm_sochi.srv.connector.sochi.search.SochiSolrSearcher"> <constructor-arg name="cmAppSystemId" value="{Module}"/> <constructor-arg name="isNamed" value="true"/> <constructor-arg name="searchArea" value="{Module}_area"/> <constructor-arg name="targetCollectionName" value="(search)"/> <constructor-arg> <bean class="ru.intertrust.cm_sochi.srv.connector.sochi.search.{Basic Module}SearchFilterCreator"/> </constructor-arg> <constructor-arg> <bean class="ru.intertrust.cmj.af.search.dp.docinfo.CustomModuleInfoExtractor" c:messageSource-ref="cmj_af_search_messageSource" c:ident="{Module}"/> </constructor-arg> </bean>
Определение объекта
Подключение объекта
Развернуть исходный код
<!-- Формирует список областей поиска путём вызова дочерних билдеров. Если дочерний билдер является тоже ScopeTreeBuilder, то созданный им список областей делается дочерним к последней созданной области. Если список сделать дочерним невозможно, то список просто добавляется к общему списку областей первого уровня. --> <bean id="rootScopeBuilder" class="ru.intertrust.cmj.af.search.ScopeTreeBuilder"> <property name="childs"> <list> <bean class="ru.intertrust.cmj.af.search.dp.CmDocTypesScopeBuilder"> <constructor-arg index="0" value="{Module}"/> <constructor-arg index="1" value="{Module}"/> <constructor-arg index="2"> <list> <ref bean="subject"/> </list> </constructor-arg> <constructor-arg index="3"> <set> <ref bean="rkkSuperBundle{Module}"/> </set> </constructor-arg> <constructor-arg index="4"> <list> <ref bean="{Module}Searcher"/> </list> </constructor-arg> <constructor-arg index="5"> <ref bean="cmSearchScopeCompositExBuilder"/> </constructor-arg> </bean> </list> </property> </bean>
Создание области поиска
Индексация полей объекта
Развернуть исходный код
<search-area name="{Module}_area"> <target-domain-object type="F_DP_OutputRkk"> <linked-domain-object type="Tn_Field_Datetime" nested="true"> <indexed-field name="tDate" solr-prefix="cm_dt"> <script>if (ctx.get('cmjfield').equals('DateControl')){ ctx.get('value'); }</script> </indexed-field> </linked-domain-object> <linked-domain-object type="F_DP_Rkk_SigningInfo"> <indexed-field name="tVCard" search-by="substring" language=""> <doel>signer.orig_shortname</doel> </indexed-field> <parent-link> <doel>Owner</doel> </parent-link> </linked-domain-object> </target-domain-object> </search-area>
Настройка соответствия параметров поиска и области поиска
Конфигурация поиска
Развернуть исходный код
<bean id="dominoRequestConfig{Module}" class="ru.intertrust.cmj.af.search.dp.request.DominoRequestConfig"> <!-- Отображение ID параметров запроса на поля notes документа --> <property name="nsFieldsByParamByBundleID"> <map merge="true"> <entry key="rkk#testDate" value="tDate"/> <entry key="rkk#testVCard" value="tVCard"/> </map> </property> <!-- Отображение ID бандла на имя формы notes документа --> <property name="formsByBundleID"> <map merge="true"> <entry key="rkk" value="{Basic Object}"/> </map> </property> </bean>
Подключение поиска к кастомной коллекции
Бин коллекции
Развернуть исходный код
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:p="http://www.springframework.org/schema/p" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd" default-lazy-init="true"> <bean id="{Module}_({Collection})Metadata" class="ru.intertrust.cm_sochi.srv.connector.sochi.collections.CollectionMetadataNew" p:caseSensitiveFieldNames="true" p:searchArea="{Module}_area"> <constructor-arg> <list value-type="ru.intertrust.cm_sochi.srv.connector.sochi.collections.Field"> <bean class="ru.intertrust.cm_sochi.srv.connector.sochi.collections.Field" p:name="self"> <property name="virtualField"> <bean class="ru.intertrust.cm_sochi.srv.connector.sochi.collections.BuildVirtualField"> <property name="realFields"> <list> <value>self_1</value> <value>Module</value> <value>self_2</value> <value>ID</value> <value>created_date</value> <value>self_3</value> </list> </property> <property name="pattern" value="<id>([0-9]{16}):([0-9A-F]{32})</>" /> <property name="separator" value=""/> <property name="emptySeparator" value="true"/> </bean> </property> </bean> </list> </constructor-arg> </bean> </beans>
Запуск реиндексации
- Открыть НБР-аминку
- Перейти в раздел Структура Системы\Инструменты\Плагины
- Ввести название плагина ru.intertrust.cm_sochi.plugins.SolrReindexingPlugin
- Нажать "Применить"
- Выделить найденный плагин
- Нажать кнопку Play
- Ввести SQL-запрос. SQL-запрос нужно делать по таблицам, которые определены в области поиска тегах target-domain-object и linked-domain-object.
Создать область поиска
- Открыть НБР-аминку
- Перейти в раздел Структура системы\Каталог\Области поиска
- Нажать на кнопку "Создать"
- Заполнить название области поиска
- В качестве приложения указать Портал
- В поле "Область" указать приложение, по которому будет производиться поиск
- Сохранить
Подключить область поиска к портальному профилю
- Открыть НБР-аминку
- Перейти в раздел Организация\Профили\Профили иерархии
- Выбрать портальный профиль
- Нажать на кнопку "Редактировать"
- Перейти в раздел "Добавленные области поиска"
- Выбрать область поиска
- Сохранить
<Название видео>
Легенда
- {Project} - название проекта
- {Module} - название модуля
- {Collection} - название коллекции
- {Basic Module} - базовый модуль
- {Object} - название объекта
- {Basic Object} - базовый объект