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

Вы просматриваете старую версию данной страницы. Смотрите текущую версию.

Сравнить с текущим просмотр истории страницы

« Предыдущий Версия 11 Следующий »

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

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


Инструмент: Палитра XML

Статус

ГОТОВО

Комментарий

Реализация

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

    Настройка поиска
    <?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>
     
  2. Доработать область поиска

    Область поиска
    <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>


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

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

Легенда

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