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

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

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

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

Статус

ВЫПОЛНЕН

Автор
Комментарий

На этой странице:



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

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

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

Пример написан таким образом, что можно брать приведенный код и заменять в нем значения: <module>, <Module>, <Модуль>.

Главное его внимательно вставлять в уже существующие схемы.

Инструмент

Палитра 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_Report">
            <!-- Модуль -->
            <indexed-field name="Module">
                <doel>Module</doel>
            </indexed-field>
    
            <!-- Дата регистрации -->
            <indexed-field name="regDate">
                <doel>HierRoot.regDate</doel>
            </indexed-field>
            <!-- Автор отчета -->
            <indexed-field name="Author" search-by="substring" language="">
                <doel>Author.orig_shortname</doel>
            </indexed-field>
            <!-- Дата исполнения -->
            <indexed-field name="reportDate">
                <doel>ExecDate</doel>
            </indexed-field>
            <!-- Текст отчета -->
            <indexed-field name="reportText">
                <doel>Text</doel>
            </indexed-field>
    
            <target-collection name="F_DP_Report_(search)"/>
    
            <filter>
                <conditions-script>
                    <![CDATA[
                        var result = false;
                        var typeName = session.find(ctx.get('HierRoot')).getDomainObject().getTypeName();
                        var qqz=ctx.get('Module.Type.Alias');
                        if (typeName.equals('F_DP_IntRkk') && (qqz.equals('NewModule'))){
                            result=true;
                        }
                        ctx.setResult(result);
                        ]]>
                </conditions-script>
            </filter>
        </target-domain-object>
    
        <!-- Резолюция -->
        <target-domain-object type="F_DP_Resolution">
            <!-- Модуль -->
            <indexed-field name="Module">
                <doel>Module</doel>
            </indexed-field>
    
            <!-- Контрольный -->
            <indexed-field name="isControl">
                <doel>CtrlIsControlled</doel>
            </indexed-field>
            <!-- Исполнен -->
            <indexed-field name="isExecuted">
                <doel>CtrlDateExecution</doel>
            </indexed-field>
            <!-- Дата регистрации -->
            <indexed-field name="regDate">
                <doel>HierRoot.regDate</doel>
            </indexed-field>
            <!-- Автор резолюции -->
            <indexed-field name="Superior" search-by="substring" language="">
                <doel>Author.orig_shortname</doel>
            </indexed-field>
            <!-- Дата резолюции -->
            <indexed-field name="resDate">
                <doel>Date</doel>
            </indexed-field>
            <!-- Срок резолюции -->
            <indexed-field name="resExDate">
                <doel>CtrlDeadline</doel>
            </indexed-field>
            <!-- Текст резолюции -->
            <indexed-field name="resText">
                <doel>Resolution</doel>
            </indexed-field>
            <!-- Рег. номер документа -->
            <indexed-field name="docNumber" search-by="substring">
                <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>
            <!-- Исполнитель резолюции -->
            <linked-domain-object type="F_DP_ResltnBase_ExecCurr">
                <indexed-field name="Executor" search-by="substring" language="">
                    <doel>ExecutorCurr.orig_shortname</doel>
                </indexed-field>
                <parent-link>
                    <doel>Owner</doel>
                </parent-link>
            </linked-domain-object>
            <linked-domain-object type="F_DP_ResltnBase_ExecExt">
                <indexed-field name="execpeoples" search-by="substring" language="">
                    <doel>ExecutorExt.orig_shortname</doel>
                </indexed-field>
                <indexed-field name="ORGANISATIONNAME" search-by="substring" language="">
                    <doel>ExecutorExt.OrgName</doel>
                </indexed-field>
                <parent-link>
                    <doel>Owner</doel>
                </parent-link>
            </linked-domain-object>
    
            <!-- Контролер резолюции -->
            <linked-domain-object type="F_DP_ResltnBase_Cntrller">
                <indexed-field name="ControlPeopleRes" search-by="substring" language="">
                    <doel>Controller.orig_shortname</doel>
                </indexed-field>
                <parent-link>
                    <doel>Owner</doel>
                </parent-link>
            </linked-domain-object>
    
            <target-collection name="F_DP_Resolution_(search)"/>
    
            <filter>
                <!--conditions-script>session.find(ctx.get('HierRoot')).getDomainObject().getTypeName() == 'F_DP_IntRkk'</conditions-script-->
                <conditions-script>
                    <![CDATA[
                        var result = false;
                        var typeName = session.find(ctx.get('HierRoot')).getDomainObject().getTypeName();
                        var qqz=ctx.get('Module.Type.Alias');
                        if (typeName.equals('F_DP_IntRkk') && (qqz.equals('NewModule'))){
                            result=true;
                        }
                        ctx.setResult(result);
                        ]]>
                </conditions-script>
            </filter>
        </target-domain-object>
    
        <!-- РКК -->
        <target-domain-object type="F_DP_IntRkk">
    
            <indexed-field name="Module">
                <doel>Module</doel>
            </indexed-field>
    
            <!--Содержание-->
            <indexed-content type="F_ContentRichText_Rkk"/>
            <indexed-content type="F_ContentFiles_Rkk"/>
            <indexed-content type="F_AddFiles_Rkk"/>
    
            <indexed-field name="Comments"/>
    
            <!-- Заголовок -->
            <indexed-field name="subject" search-by="substring">
                <doel>Subject</doel>
            </indexed-field>
    
            <!-- Вид документа -->
            <indexed-field name="reqType" search-by="substring" language="">
                <doel>Type</doel>
            </indexed-field>
    
            <!-- Номер проекта -->
            <indexed-field name="PNumber_Full" search-by="substring" language="">
                <script>
                    var rn = ctx.get('prjnumcounter'); if (rn == null) rn; else {
                    var prist = ctx.get('prjnumprist'); if (prist == null) prist = '';
                    var fin = ctx.get('prjnumfin'); if (fin == null) fin = '';
                    prist + rn + fin + ' ' + rn }
                </script>
            </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>
    
            <!-- Контрольный -->
            <indexed-field name="isControl">
                <script>ctx.get("RkkCtrlState") > 0 ? 1 : null;</script>
            </indexed-field>
    
            <!-- Исполнен -->
            <indexed-field name="isExecuted">
                <doel>CtrlDateExecution</doel>
            </indexed-field>
    
            <!-- Дата регистрации -->
            <indexed-field name="regDate"/>
    
            <!-- Дата документа -->
            <indexed-field name="docDate">
                <doel>RegDate</doel>
            </indexed-field>
    
            <!-- Дата документа -->
            <indexed-field name="docDateSimple">
                <doel>RegDate</doel>
            </indexed-field>
    
            <!-- Зарегистрирован -->
            <indexed-field name="isRegistered">
                <doel>RegNumCnt</doel>
            </indexed-field>
    
            <!-- Исполнение контролируют -->
            <linked-domain-object type="F_DP_RkkBase_Controller">
                <indexed-field name="ControlPeople" search-by="substring" language="">
                    <doel>Controller.orig_shortname</doel>
                </indexed-field>
                <parent-link>
                    <doel>Owner</doel>
                </parent-link>
            </linked-domain-object>
    
            <!-- Срок исполнения -->
            <indexed-field name="extControlDate">
                <doel>CtrlDeadline</doel>
            </indexed-field>
    
            <!-- Место регистрации -->
            <indexed-field name="Registration" search-by="substring" language="">
                <doel>RegCode.orig_shortname</doel>
            </indexed-field>
    
            <!-- Тематика -->
            <linked-domain-object type="F_DP_RkkBase_Theme">
                <indexed-field name="Theme" search-by="substring"/>
                <parent-link>
                    <doel>Owner</doel>
                </parent-link>
            </linked-domain-object>
    
            <!-- Подпись -->
            <linked-domain-object type="F_DP_Rkk_SigningInfo">
                <indexed-field name="UserFrom" search-by="substring" language="">
                    <doel>signer.orig_shortname</doel>
                </indexed-field>
                <parent-link>
                    <doel>Owner</doel>
                </parent-link>
            </linked-domain-object>
    
            <!-- Исполнитель -->
            <linked-domain-object type="F_DP_IntRkk_Executor">
                <indexed-field name="Mast" search-by="substring" language="">
                    <doel>Executor.orig_shortname</doel>
                </indexed-field>
                <parent-link>
                    <doel>Owner</doel>
                </parent-link>
            </linked-domain-object>
    
            <!-- Адресат -->
            <linked-domain-object type="F_DP_IntRkk_Addressee">
                <indexed-field name="To" search-by="substring" language="">
                    <doel>Addressee.orig_shortname</doel>
                </indexed-field>
                <parent-link>
                    <doel>Owner</doel>
                </parent-link>
            </linked-domain-object>
    
            <!-- linkedDoc -->
            <linked-domain-object type="F_DP_RkkWORegAndCtrl_ULnk">
                <indexed-field name="linkedDocs">
                    <script>ctx.get('docname') + ' ' + ctx.get('docsubjects')</script>
                </indexed-field>
                <parent-link>
                    <doel>Owner</doel>
                </parent-link>
            </linked-domain-object>
    
            <!-- SpecMark -->
            <linked-domain-object type="F_DP_RkkWORegAndCtrl_SMrk">
                <indexed-field name="specMark" search-by="substring">
                    <doel>specmark</doel>
                </indexed-field>
                <parent-link>
                    <doel>Owner</doel>
                </parent-link>
            </linked-domain-object>
    
            <target-collection name="InternalDocs_(search)"/>
    
            <filter>
                <conditions-script>ctx.get('Module.Type.Alias') == '<Module>'</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


  • Нет меток