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>
我在执行自定义网络脚本时遇到性能时间问题。
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>