Дерево страниц
Skip to end of metadata
Go to start of metadata

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

Добавить в папку search настройку поиска и область поиска для нового произвольного модуля на базе ВнД

Статус

ГОТОВО

РазделПроизвольный модуль
Комментарий

Реализация

Легенда

  • {module} - идентификатор модуля в нижнем регистре
  • {Module} - идентификатор модуля в регистре, соответствующем типе программы
  • {Модуль} - название модуля

Доработать конфигурацию настройки поиска

Настройка поиска
<?xml version="1.0" encoding="UTF-8" ?>
<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:c="http://www.springframework.org/schema/c"
       xmlns="http://www.springframework.org/schema/beans"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

    <!-- {Модуль} -->
    <bean id="newModuleSearcher" 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}"/>
        <constructor-arg name="targetCollectionName" value="(search)"/>
        <constructor-arg>
            <bean class="ru.intertrust.cm_sochi.srv.connector.sochi.search.InternalDocsSearchFilterCreator"/>
        </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>
    <!-- Модуль end-->

    <!-- {Модуль} -->
    <!-- Иерархия билдеров областей поиска -->
    <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="rkkInternalBundle"/>
                            <ref bean="resolutionBundle"/>
                            <ref bean="reportBundle"/>
                            <ref bean="mainDocBundleForCustom"/>
                        </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>
                <!-- {Модуль} end-->
            </list>
        </property>
    </bean>

    <!-- Иерархия билдеров простого поиска -->
    <bean id="rootScopeBuilderSimple" 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="mainDocBundleSimple"/>
                        </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>
                <!-- {Модуль} end-->
            </list>
        </property>
    </bean>

    <!-- Иерархия билдеров однострочного поиска. Однострочный поиск повторяет структуру расширенного поиска, но урезан по бандлам -->
    <bean id="oneLineRootScopeBuilder" 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="mainDocBundleOneLine"/>
                        </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>
                <!-- {Модуль} end-->
            </list>
        </property>
    </bean>

    <!-- Конфигурация параметров запроса ({Модуль}) -->
    <bean id="dominoRequestConfig{Module}" parent="dominoRequestConfigSuper">
        <!-- Отображение ID параметров запроса на поля notes документа -->
        <property name="nsFieldsByParamByBundleID">
            <map merge="true">
                <entry key="rkk#regDate" value="outdate"/>
                <entry key="rkk#addressees" value="To"/>
                <entry key="rkk#signer" value="UserFrom"/>
                <entry key="rkk#executor" value="Mast"/>
                <entry key="resolution#regDate" value="outdate"/>
                <entry key="mainDoc#regDate" value="outdate"/>
                <entry key="mainDoc#signer" value="UserFrom"/>
                <entry key="mainDoc#docDate" value="outdate"/>
                <entry key="mainDoc#docDateSimple" value="outdate"/>
                <entry key="report#regDate" value="outdate"/>
            </map>
        </property>
        <!-- Отображение ID бандла на имя формы notes документа -->
        <property name="formsByBundleID">
            <map merge="true">
                <entry key="rkk" value="Input"/>
                <entry key="mainDoc" value="Input"/>
            </map>
        </property>
    </bean>

    <!--Параметры сортировки результатов поиска ({Модуль}) -->
    <bean id="sortingParams{Module}Date" class="ru.intertrust.cmj.af.search.dp.docinfo.SortingParams">
        <property name="columnName" value="regDate"/>
        <property name="sortingFieldType" value="String"/>
        <property name="default" value="true"/>
        <property name="defaultSortingDirection" value="descendant"/>
        <property name="sortingDirections">
            <set>
                <value>descendant</value>
                <value>ascendant</value>
            </set>
        </property>
    </bean>

    <!-- Конфигурация отображения результатов поиска ({Модуль}) -->
    <bean id="moduleExtractorConfig{Module}" parent="moduleExtractorConfigSuper">
        <!-- Отображение формы документа на имя корневого типа -->
        <property name="rootTypesByBundleID">
            <map merge="true">
                <entry key="rkk" value="rkk-search-result"/>
            </map>
        </property>
        <!-- Отображение имя формы notes документа на ID бандла -->
        <property name="bundleIDsByForm">
            <map merge="true">
                <entry key="Input" value="rkk"/>
            </map>
        </property>
        <property name="nsFieldsByClTypeByBundleID">
            <map merge="true">
                <entry key="rkk#regDate" value="outdate"/>
                <entry key="rkk#to" value="S"/>
                <entry key="rkk#from" value="S2"/>
                <entry key="mainDoc#regDate" value="outdate"/>
                <entry key="mainDoc#signer" value="S2"/>
            </map>
        </property>
        <property name="formulasByClTypeByBundleID">
            <map merge="true">
                <entry key="rkk#hasAttachments" value="doc.getItemValueString('IsHasContent').trim() == '1'"/>
                <entry key="rkk#id" value="ctx.getString('Links_DocReplID').trim() == '' ? '' : (ctx.getString('Links_DocReplID').trim() + ':' + ctx.getString('Links_DocUNID').trim())"/>
            </map>
        </property>
    </bean>
</beans>
 

Доработать область поиска

Область поиска
<search-area name="{Module}">
    <target-domain-object type="F_DP_OutputRkk">

        <indexed-field name="Module">
            <doel>Module</doel>
        </indexed-field>

        <linked-domain-object type="Tn_Field_String" nested="true">

            <indexed-field name="ReasonDeliv" language="" search-by="substring">
                <script>if (ctx.get('cmjfield').equals('ReasonDeliv')){ ctx.get('value'); }</script>
            </indexed-field>

            <indexed-field name="ReasonCanc" language="" search-by="substring">
                <script>if (ctx.get('cmjfield').equals('ReasonCanc')){ ctx.get('value'); }</script>
            </indexed-field>

            <indexed-field name="ReestrNum" language="" search-by="substring">
                <script>if (ctx.get('cmjfield').equals('ReestrNum')){ ctx.get('value'); }</script>
            </indexed-field>

            <indexed-field name="Srok" language="" search-by="substring">
                <script>if (ctx.get('cmjfield').equals('Srok')){ ctx.get('value'); }</script>
            </indexed-field>

            <indexed-field name="confidant" language="" search-by="substring">
                <script>if (ctx.get('cmjfield').equals('confidant')){ ctx.get('value').split('%')[0]; }</script>
            </indexed-field>

            <parent-link>
                <doel>Owner</doel>
            </parent-link>

        </linked-domain-object>

        <linked-domain-object type="Tn_Field_Datetime" nested="true">

            <indexed-field name="DateControl" solr-prefix="cm_dt">
                <script>if (ctx.get('cmjfield').equals('DateControl')){ ctx.get('value'); }</script>
            </indexed-field>

            <indexed-field name="DateControlEnd" solr-prefix="cm_dt">
              <script>if (ctx.get('cmjfield').equals('DateControlEnd')){ ctx.get('value'); }</script>
            </indexed-field>

            <indexed-field name="dateAttorney" solr-prefix="cm_dt">
                <script>if (ctx.get('cmjfield').equals('dateAttorney')){ ctx.get('value'); }</script>
            </indexed-field>

            <parent-link>
                <doel>Owner</doel>
            </parent-link>
        </linked-domain-object>

        <!-- Заголовок -->
        <indexed-field name="Subject" search-by="substring"/>

        <!--Подпись -->
        <linked-domain-object type="F_DP_Rkk_SigningInfo">
            <indexed-field name="Superior" search-by="substring" language="">
                <doel>signer.orig_shortname</doel>
            </indexed-field>
            <parent-link>
                <doel>Owner</doel>
            </parent-link>
        </linked-domain-object>

        <!-- Вид документа -->
        <indexed-field name="reqType" search-by="substring" language="">
            <doel>Type</doel>
        </indexed-field>

        <!-- Регистрационный номер -->
        <indexed-field name="regFullNumber" search-by="substring" language="">
            <script>var rn = ctx.get('regnumcnt'); if (rn == null) rn; else {
                var prist = ctx.get('regnumprist'); if (prist == null) prist = '';
                var fin = ctx.get('regnumfin'); if (fin == null) fin = '';
                prist + rn + fin + ' ' + rn }
            </script>
        </indexed-field>

        <!-- Регистрационный номер, по точному совпадению -->
        <indexed-field name="regNumberExact" search-by="exactmatch">
            <script>var rn = ctx.get('regnumcnt'); if (rn == null) rn; else {
                var prist = ctx.get('regnumprist'); if (prist == null) prist = '';
                var fin = ctx.get('regnumfin'); if (fin == null) fin = '';
                prist + rn + fin }
            </script>
        </indexed-field>

        <target-collection name="(search)"/>

        <filter>
            <conditions-script>ctx.get('Module.Type.Alias') == 'Attorney'</conditions-script>
        </filter>

    </target-domain-object>
</search-area>

Результаты поиска

Результаты поиска выводятся в представление ВнД InternalDocs_(search)

Индексация таблиц

Запустить ru.intertrust.cm_sochi.plugins.SolrReindexingPlugin по таблицам: F_DP_Report, F_DP_Resolution,F_DP_IntRkk

  • Нет меток