Дерево страниц

Сравнение версий

Ключ

  • Эта строка добавлена.
  • Эта строка удалена.
  • Изменено форматирование.

Постановка задачи

Добавить поиск для нового модуля.

Подсказка
iconfalse

Инструмент: Палитра XML, Плагин, Настройка системы

Свойства страницы
ГОТОВо
Статус

Статус
colourGreenBlue
titleДОРАБОТКА

РазделПоиск
КомментарийИнформация по настройкам параметра поиска находится здесь Описание конфигурации поиска





Реализация

Информация
iconfalse

Последовательность действий по реализации поиска:

  1. Редактирование конфигурации поиска applicationContext-config-search{Project}.xml
  2. Создание области поиска {Module}_area.xml
  3. Подключение области поиска к кастомным коллекциям {Module}_({Collection})Metadata.xml
  4. Загрузить конфигурацию поиска и перезагрузить сервер
  5. Загрузить область поиска
  6. Запуск плагина реиндексации ru.intertrust.cm_sochi.plugins.SolrReindexingPlugin
  7. Создание области поиска в системе
  8. Подключение области поиска в портальный профиль


Редактирование конфигурации поиска

Определение параметров поиска

Блок кода
languagexml
titleПараметр поиска
linenumberstrue
collapsetrue
    <!--Дата-->
	<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>

Подключение параметров поиска к форме

Блок кода
languagexml
titleОтображение на поисковой форме
linenumberstrue
collapsetrue
<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>

Определение модуля 

Блок кода
languagexml
titleПодключение модуля
linenumberstrue
collapsetrue
<bean id="attorneySearcher{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>

Определение объекта

Блок кода
languagexml
titleПодключение объекта
linenumberstrue
collapsetrue
<!-- Формирует список областей поиска путём вызова дочерних билдеров.  Если дочерний билдер является тоже 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>

Создание области поиска

Блок кода
languagexml
titleИндексация полей объекта
linenumberstrue
collapsetrue
<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>

Настройка соответствия параметров поиска и области поиска 

Блок кода
languagexml
titleКонфигурация поиска
linenumberstrue
collapsetrue
<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>

Подключение поиска к кастомной коллекции

Блок кода
languagexml
titleБин коллекции
linenumberstrue
collapsetrue
<?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>

Запуск реиндексации

  1. Открыть НБР-аминку
  2. Перейти в раздел Структура Системы\Инструменты\Плагины
  3. Ввести название плагина ru.intertrust.cm_sochi.plugins.SolrReindexingPlugin
  4. Нажать "Применить"
  5. Выделить найденный плагин
  6. Нажать кнопку Play
  7. Ввести SQL-запрос. SQL-запрос нужно делать по таблицам, которые определены в области поиска тегах target-domain-object и linked-domain-object.

Создать область поиска

  1. Открыть НБР-аминку
  2. Перейти в раздел  Структура системы\Каталог\Области поиска
  3. Нажать на кнопку "Создать"
  4. Заполнить название области поиска
  5. В качестве приложения указать Портал
  6. В поле "Область" указать приложение, по которому будет производиться поиск
  7. Сохранить

Подключить область поиска к портальному профилю

  1. Открыть НБР-аминку
  2. Перейти в раздел  Организация\Профили\Профили иерархии
  3. Выбрать портальный профиль
  4. Нажать на кнопку "Редактировать"
  5. Перейти в раздел "Добавленные области поиска"
  6. Выбрать область поиска
  7. Сохранить

панель
title<Название видео>

Подсказкаnote
iconfalse
titleЛегенда
  • {Project} - название проекта
  • {Module} - название модуля
  • {Collection} - название коллекции
  • {Basic Module} - базовый модуль
  • {Object} - название объекта
  • {Basic Object} - базовый объект