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

Use ASSET API how to iterate a parent node in AEM?

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

使用资产 API 我如何迭代子节点。?

之后我必须 read/write 属性。!

代码在这里:-

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

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

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

您无法从非资产资源(文件夹)中获取资产 object。在您的代码中调用 getAsset 方法将 return 为 null,这是正常的,符合预期!

如果您需要获得 dam:Asset children,请使用 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 框架将任何获取的资源改编为资产 object。

通常 dam:Asset 不会有类型 dam:Asset 的 children。一个例外是子资产。子资产是在主资产复合的情况下产生的。几个例子

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

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

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

如果您需要在子文件夹中查找,请尝试节点 iteration/tree 遍历以获得更简单的用例。您可以使用 Sling Query 和正确的搜索策略。

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