如何使用 Alfresco Search WebScript 按 JavaScript 控制器中的属性过滤类型?

How to filtering types by properties in JavaScript controller using the Alfresco Search WebScript?

比如我有一个类型"Contract":

<type name="some-prefix:contract">
    <title>Contract</title>
    <parent>cm:content</parent>
    <mandatory-aspects>
        ...
        <aspect>some-prefix:resolution</aspect>
    </mandatory-aspects>
</type>

此类型包含一个方面:

<aspect name="some-prefix:resolution">
    <title>Resolution</title>
    <properties>
        ...
        <property name="some-prefix:isCoordinated">
            <type>d:boolean</type>
            <default>false</default>
        </property>
    </properties>
</aspect>

通过使用这个方面,我设置了合约的状态并尝试检索适当的节点:

...
getParameters : function Contract_getParameters() {
    var param = "term=";
    var query = "+TYPE:some-prefix\:contract";
    if (this.widgets.filter.value == "inactive")
        query += " +@some-prefix\:isCoordinated:false";
    else
        query += " +@some-prefix\:isCoordinated:true";
    param += encodeURIComponent(query);
    return param;
},

getWebscriptUrl : function Contract_getWebscriptUrl() {
    return Alfresco.constants.PROXY_URI + "slingshot/search";
},
...

如果我只使用这一部分,那么我会得到整个合同列表:

var query = "+TYPE:some-prefix\:contract";

但是如果我添加一个额外的条件,例如:

query += " +@some-prefix\:isCoordinated:true";

然后在这种情况下我得到一个空列表。

通过使用我发现的 Node Browser,我的查询有效:

+TYPE:some-prefix\:contract +@some-prefix\:isCoordinated:true

但是当我从 JavaScript 控制器调用 Alfresco Search WebScript 时,我得到以下信息:

{
    "totalRecords": 0,
    "totalRecordsUpper": 0,
    "startIndex": 0,
    "numberFound": 0,
    "facets":
    {
    },
   "highlighting":
   {
   },
    "items":
    [
    ],
    "spellcheck":
    {
    }
}

可能是什么原因?..

如果能提供信息,我将不胜感激。感谢大家。

Martin Ehe gave an exhaustive answer: How to filtering types by properties in JavaScript controller using the Alfresco Search WebScript?

它解决了我的问题。

如果使用此查询,过滤器有效:

...
getParameters : function Contract_getParameters() {
    var param = "query=";
    var query = "{\"datatype\":\"some-prefix:contract\",";
    if (this.widgets.filter.value == "inactive")
        query += "\"prop_some-prefix_isCoordinated\":\"false\"}";
    else
        query += "\"prop_some-prefix_isCoordinated\":\"true\"}";
    param += encodeURIComponent(query);

    return param;
},
...

this情况下,过滤器不工作:

...
getParameters : function Whitepaper_getParameters() {
    var param = "term=";
    var query = "+TYPE:some-prefix\:contract";
    if (this.widgets.filter.value == "inactive")
        query += " +some-prefix\:isCoordinated:false";
    else
        query += " +some-prefix\:isCoordinated:true";
    param += encodeURIComponent(query);
    return param;
},
...

..并注意 CMIS 查询:如果您使用连字符,则应将其转义:

some-prefix -> some_x002D_prefix

否则你会得到一个例外:CMISQueryException: no viable alternative at character ...