Alfresco:如何用javascript(和FTL)获得孩子的孩子

时间:2015-08-14 12:25:29

标签: alfresco freemarker

我的自定义webscript遇到了性能问题。

webscript仅通过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个文件夹中的每个文件夹至少有一个子项,则返回该参数。为此,我只需要获得每个孩子。我怎样才能做到这一点?我可以用什么方法让每个孩子获得第一个孩子或知道这个孩子是否有孩子?

非常感谢!

1 个答案:

答案 0 :(得分: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>