Дерево страниц

Сравнение версий

Ключ

  • Эта строка добавлена.
  • Эта строка удалена.
  • Изменено форматирование.

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

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

Инструмент


Подсказка
iconfalse

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

Свойства страницы
Статус
tip

Статус

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

    colour

    Легенда

    Green
    titleГотово

    Комментарий

    Реализация

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

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

      Блок кода
      languagexml
      titleОбласть поиска
      collapsetrue
      <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
      Image Modified
    Примечание
    iconfalse
    titleЛегенда
    • {module} - идентификатор модуля в нижнем регистре
    • {Module} - идентификатор модуля в регистре, соответствующем типе программы
    • {Модуль} - название модуля