Как включить расширенный поиск по свойствам d:date в Alfresco?

У меня есть пользовательская модель контента, созданная для Alfresco, которая имеет тип со свойством d:date. Я могу создать репозиторий и поделиться проектами, казалось бы, без ошибок. Однако я не могу выполнять поиск по свойствам, используя тип данных d:date или d:int. Я решил проблему d:int, изменив тип данных на d:text и добавив ограничение регулярного выражения, но я не уверен, что это будет благоразумно для свойства d:date.

Есть ли какая-то дополнительная конфигурация, которую мне нужно предоставить или создать для поиска по свойствам, отличным от d:text?

Вот фрагмент, показывающий объявление типа:

<types>
    <!-- Enterprise-wide generic document type -->
    <type name="gl:x">
        <title>Document</title>
        <parent>cm:content</parent>
        <properties>
            <property name="gl:period">
                <type>d:text</type>
            </property>
            <property name="gl:year">
                <type>d:text</type>
                <constraints>
                    <constraint ref="gl:documentYears" />
                </constraints>
            </property>
            <property name="gl:docType">
                <type>d:text</type>
                <constraints>
                    <constraint ref="gl:documentTypeList" />
                </constraints>
            </property>
            <property name="gl:date">
                <type>d:date</type>
            </property>
        </properties>
    </type>
</types>

Формы поиска общего доступа и формы свойств отображаются правильно, поэтому я не думаю, что в них есть какие-либо проблемы.


person Kross    schedule 23.10.2014    source источник


Ответы (1)


Страница расширенного поиска принимает два типа параметров.

Одним из них является просто поле «ключевые слова». Это выполняет полнотекстовый поиск, т. е. ищет предоставленные ключевые слова в ЛЮБОМ текстовом свойстве. Нет необходимости настраивать полнотекстовый поиск для пользовательских типов (например, вашего gl:x) — он автоматически подбирает любое свойство текста в любой модели в системе.

Другая — это группа одиночных параметров: имя, заголовок, описание, MIME-тип, дата изменения, модификатор. Эти свойства могут быть любого типа. Свойство d:date было бы здесь вполне приемлемо, о чем свидетельствует параметр модифицированной даты. Но здесь пользовательские свойства не подхватываются автоматически. Они должны быть настроены явно.

Обратите внимание, что в верхней части страницы расширенного поиска находится раскрывающийся список «Искать» с двумя параметрами: содержимое и папки. Лучшим подходом было бы добавить опцию для вашего типа контента gl:x и настроить для него форму поиска.

Вы можете найти определение двух стандартных форм поиска в tomcat/webapps/share/WEB-INF/classes/alfresco/share-form-config.xml. Файл довольно длинный, поэтому вот два раздела для поиска:

<config evaluator="model-type" condition="cm:content">
  <forms>
     <!-- Default Create Content form -->
     <form>
     </form>
     <!-- Document Library Create Google Doc form -->
     <form id="doclib-create-googledoc">
     </form>
     <!-- Search form -->
     <form id="search">
     </form>
  </forms>
</config>

<!-- cm:folder type (creating nodes) -->
<config evaluator="model-type" condition="cm:folder">
  <forms>
     <!-- Document Library Common form -->
     <form id="doclib-common">
     </form>
     <!-- Search form -->
     <form id="search">
     </form>
  </forms>
</config>

Я пропустил подробности, но важно то, что «cm:content» и «cm:folder» определяют <form id="search"> с нужными свойствами/параметрами поиска.

В качестве эксперимента вы можете напрямую изменить файл share-form-config.xml и добавить собственное определение:

<config evaluator="model-type" condition="gl:x">
  <forms>
     <!-- Search form -->
     <form id="search">
        <field-visibility>
           <show id="gl:date" />
        </field-visibility>
        <appearance>
           <field id="gl:date">
              <control template="/org/alfresco/components/form/controls/daterange.ftl" />
           </field>
        </appearance>
     </form>
  </forms>
</config>

Также вам нужно добавить новую форму поиска в конфигурацию AdvancedSearch, которая находится в tomcat/webapps/share/WEB-INF/classes/alfresco/share-config.xml:

<config evaluator="string-compare" condition="AdvancedSearch">
  <advanced-search>
     <forms>
        <form labelId="search.form.label.cm_content" descriptionId="search.form.desc.cm_content">cm:content</form>
        <form labelId="search.form.label.cm_folder" descriptionId="search.form.desc.cm_folder">cm:folder</form>
        <form labelId="search.form.label.gl_x" descriptionId="search.form.desc.gl_x">gl:x</form>
     </forms>
  </advanced-search>
</config>

Не забывайте перезапускать alfresco после каждого изменения. Когда вы будете удовлетворены результатами, было бы лучше переместить ваши пользовательские определения в отдельный файл share-config-custom.xml в вашем проекте (share-config.xml и share-form-config.xml никогда не следует изменять напрямую). ).

Подробнее: https://wiki.alfresco.com/wiki/Share_Advanced_Search

person softwareloop    schedule 24.10.2014
comment
Я выполнял настройку через модули расширения, используя Alfresco-Maven SDK. Я также создал новую форму поиска для своего конкретного типа и имею поле для свойства d:date, которое я использую. Проблема в том, что когда я ищу по этому полю, я не получаю никаких результатов. У меня была такая же проблема с другим свойством, которое использовало d:int, но я решил ее, изменив его на свойство d:text. - person Kross; 24.10.2014
comment
Чтобы понять проблему, было бы полезно использовать браузер узлов по адресу localhost. :8080/share/page/console/admin-console/node-browser, чтобы выполнить несколько тестовых запросов для вашей пользовательской модели. Убедитесь, что ограничения нетекстовых свойств работают правильно и возвращают результаты. Если нет, то могут возникнуть проблемы с индексацией. - person softwareloop; 25.10.2014