2015-08-14 104 views
2

我有一個自定義Web腳本,我正在做一個表現時間問題。Alfresco:如何讓孩子的孩子與JavaScript(和FTL)

web腳本只通過uuid搜索節點,並返回一個帶有該節點的子節點屬性的JSON,並返回它們的子節點數。

我做這在我的JS:

function main() 
{ 
var node = []; 
node = search.findNode("workspace://SpacesStore/"+args["uuid"]); 
model.childResults = node.children; 
} main(); 

而且我FTL我這樣做:

<#macro parseChild objectModel> 
<#assign loop = 0 /> 
<#list objectModel as child> 
    <#if (loop > 0) >, </#if> 
    { 
     "ID" : "${child.id}", 
     "PROP_NAME" : "${child.properties["name"]}", 
     <#if child.properties["cf:author"]?exists> 
      "AUTHOR" : "${child.properties["cf:author"]}", 
     </#if> 
     <#if child.properties["cf:data_cf"]?exists> 
      "PROP_CREATED" : "${xmldate(child.properties["cf:date_cf"]?datetime)}", 
     </#if> 
     "TYPE" : "${child.type}", 
      "NUMBER_CHILDS" : ${child.children?size} 

    <#assign loop = loop + 1 /> 
    } 
</#list> 

<#if (childResults?size > 0)> 
{ 
"nodes" : 
[ 
    <@parseChild childResults/> 
] 
} 
<#else> 
Empty 
</#if> 

問題是...我有超過200文件夾,每個文件夾也有30或40個子文件夾。當我做child.children?尺寸的webscript需要很多時間。

有沒有什麼快速的方法知道這200個文件夾上的孩子數量? child.children需要很長時間。

如果這種方法不存在,我有另一種可能性。如果這200個文件夾中的每個文件夾都至少有一個子項,則只返回一個參數。爲此,我只需要獲得每一個孩子。我怎樣才能做到這一點?我可以向每個孩子申請哪種方法來獲得第一個孩子,或知道這個孩子是否有孩子?

非常感謝!

+0

Freemarker的提示(也許這是不是在發佈的問題,當你一直在使用的Freemarker版本):您可以使用[SEP-指令(HTTP:// freemarker.org/docs/ref_directive_list.html#autoid_96)而不是使用'loop'變量的機制。 –

回答

0

根據Alfresco-API documentation of findNode,您正在處理ScriptNode的實例。

您可以使用child.hasChildren來確定ScriptNode是否至少有一個孩子。所以,你可以做這樣的事情:

<#macro parseChild objectModel> 
    <#list objectModel as child> 
    { 
     "ID" : "${child.id}", 
     "PROP_NAME" : "${child.properties["name"]}", 
     <#if child.properties["cf:author"]?exists> 
     "AUTHOR" : "${child.properties["cf:author"]}", 
     </#if> 
     <#if child.properties["cf:data_cf"]?exists> 
     "PROP_CREATED" : "${xmldate(child.properties["cf:date_cf"]?datetime)}", 
     </#if> 
     "TYPE" : "${child.type}", 
     "HAS_CHILDREN" : ${child.hasChildren} 
    }<#sep>, </#sep> 
    </#list> 
</#macro>