如何使用 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 ...
比如我有一个类型"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 ...