- Создатель Васильев Антон, отредактировано 01.03.2023
Постановка задачи
Добавить в папку 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
- Нет меток