Alfresco:如何使用 javascript(和 FTL)获得 child 的 child

Alfresco: how get child of a child with javascript (and FTL)

我在执行自定义网络脚本时遇到性能时间问题。

webscript只通过uuid搜索一个节点,return一个JSON这个节点的children的一些属性,return的编号还有 subchild 个。

我在我的 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?size 时,webscript 会花费很多时间。

有什么方法可以快速知道这 200 个文件夹中 child 的数量? child.children 耗时太长。

如果这个方法不存在,我还有另一种可能性。 Returns 只有一个参数,如果这 200 个文件夹中的每一个都至少有一个 children。为此,我只需要每人获得一个children。我怎样才能做到这一点?我可以对每个 child 应用什么方法来获得第一个 child 或者知道这个 child 是否有 child?

非常感谢!

根据Alfresco-API documentation of findNode, you are dealing with instances of 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>