0

我有一个为 Alfresco 创建的自定义内容模型,其类型具有 ad:date 属性。我能够构建存储库并共享项目,似乎没有错误。但是,我无法使用数据类型 d:date 或 d:int 按属性进行搜索。我通过将数据类型更改为 d:text 并添加正则表达式约束来解决 d:int 问题,但我不确定这对于 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>

共享搜索表单和属性表单似乎可以正确呈现,所以我认为其中没有任何问题。

4

1 回答 1

1

高级搜索页面接受两种类型的参数。

一个是简单的“关键字”字段。这将执行全文搜索,即它在任何文本属性中查找提供的关键字。无需为自定义类型(例如您的 gl:x)配置全文搜索 - 它会自动获取系统中任何模型中的任何文本属性。

另一个是单个参数组:名称、标题、描述、mime-type、modified-date、modifier。这些属性可以是任何类型。d:date 属性在这里是完全可以接受的,正如 modified-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>

您还必须将新的搜索表单添加到 tomcat/webapps/share/WEB-INF/classes/alfresco/share-config.xml 中的 AdvancedSearch 配置中:

<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

于 2014-10-24T08:02:04.293 回答