- Создатель Васильев Антон, отредактировано 05.12.2021
Вы просматриваете старую версию данной страницы. Смотрите текущую версию.
Сравнить с текущим просмотр истории страницы
« Предыдущий Версия 5 Следующий »
Статус | ВЫПОЛНЕН |
---|---|
Автор | |
Комментарий |
На этой странице:
Постановка задачи
Добавить в папку search настройку поиска и область поиска для нового произвольного модуля на базе ВнД
- <module> - идентификатор модуля в нижнем регистре
- <Module> - идентификатор модуля в регистре, соответствующем типе программы
- <Модуль> - название модуля
Пример написан таким образом, что можно брать приведенный код и заменять в нем значения: <module>, <Module>, <Модуль>.
Главное его внимательно вставлять в уже существующие схемы.
Инструмент
Палитра XML
Реализация
Доработать конфигурацию настройки поиска
Настройка поиска Развернуть исходный код<?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_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>
Результаты поиска выводятся в представление ВнД InternalDocs_(search)
- Запустить ru.intertrust.cm_sochi.plugins.SolrReindexingPlugin по таблицам: F_DP_Report, F_DP_Resolution,F_DP_IntRkk
- Нет меток