使用ASSET API如何在AEM中迭代父节点?

时间:2018-02-20 10:18:25

标签: java adobe aem

我在AEM CRXDE(/ content / dam / parent)中有父资产节点。在父节点文件夹内有多个子节点。

使用Asset API如何迭代子节点。?

之后我必须读/写属性。!

此处的代码: -

AssetManager assetManager = resolver.adaptTo(AssetManager.class);

资产damAsset = assetManager.getAsset(“/ content / dam / parent”);

在父节点内部,我有多个子节点。 例如: -

  • /内容/坝/父/ child1
  • /内容/坝/父/的child2
  • /内容/坝/父/ child3 我需要访问和读/写这些节点的属性。!

2 个答案:

答案 0 :(得分:0)

您无法从非资产资源(文件夹)获取Asset对象。在代码中调用getAsset方法将返回null,这是正常的并且符合预期!

如果您需要获得大坝:资产儿童,请使用Sharath Madappa在您的问题的评论中建议的解决方案,甚至是SQL2查询:

final Iterator<Resource> allAssetChildren = resolver.findResources( String.format("SELECT * FROM [dam:Asset] AS node WHERE ISDESCENDANTNODE(node,'%s')", "/content/dam/parent"), javax.jcr.query.Query.JCR_SQL2 );

最后,您可以使用adaptTo框架将任何获取的资源调整为Asset对象。

答案 1 :(得分:0)

一般来说坝:资产不会有类型的孩子:资产。子资产例外。子资产是在主要资产为复合资产的情况下生成的。几个例子

  • PDF,每个页面都被提取为子资产。
  • PSD,每个图层都被提取为子资产。
  • 子资产是从AI故事板中提取的。

在所有这些情况下,惯例是将这些内容放在名为 subassets 的特定子文件夹中。处理Asset时,您可以使用getSubAssets方法。

您无法通过将文件夹节点调整为资产来获取有效的资产对象。要获取文件夹中的资源,请在资源上使用getChildren。

如果需要查看子文件夹,请尝试使用节点迭代/树遍历来处理更简单的用例。您可以使用Sling Query和正确的搜索策略。

JCR查询不是最高性能的选择,只有在树遍历不是用例的选项时才应该使用。