【问题标题】:Use ASSET API how to iterate a parent node in AEM?使用 ASSET API 如何在 AEM 中迭代父节点?
【发布时间】:2018-07-30 16:11:36
【问题描述】:

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

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

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

代码在这里:-

AssetManagerassetManager=resolver.adaptTo(AssetManager.class);

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

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

  • /content/dam/parent/child1
  • /content/dam/parent/child2
  • /content/dam/parent/child3 我需要访问和读取/写入这些节点的属性。!

【问题讨论】:

  • 向我们展示您的所作所为 - 如果不向我们展示您的实际操作,您将无法做很多事情。
  • @OcelotcR 我已经更新了问题!
  • /content/dam/parent 节点的类型是什么?
  • /content/dam/父节点是 sling 文件夹
  • 为什么要访问 sling 文件夹作为资产?你能不做 resolver.getResource('/content/dam/parent') 并做 getChildren 吗?

标签: java adobe aem


【解决方案1】:

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

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

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

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

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

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

【讨论】:

    【解决方案2】:

    您无法从非资产资源(文件夹)中获取资产对象。在你的代码中调用getAsset方法会返回一个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 框架将任何获得的资源调整为 Asset 对象。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-01-03
      • 1970-01-01
      • 2018-09-02
      • 2023-04-01
      • 1970-01-01
      相关资源
      最近更新 更多