Как я могу получить весь список активов, представленных в AEM DAM - PullRequest
0 голосов
/ 23 мая 2019

У нас есть api-ресурсы для получения списка, но для этого нам нужно предоставить учетные данные пользователя AEM.

Есть ли у нас какой-либо интерфейс для извлечения всего списка активов из плотины так же, как все страницы с помощью диспетчера страниц.

Ответы [ 2 ]

1 голос
/ 23 мая 2019

Для этого вы можете использовать API QueryManager JCR и ваш конкретный запрос совместно. Ниже приведен пример сервлета, в котором перечислены все пути, указанные ниже: / content / dam / we-retail / en / features


import javax.jcr.Session;
import javax.jcr.query.Query;
import javax.jcr.query.QueryManager;
import javax.jcr.query.QueryResult;
import javax.jcr.query.Row;
import javax.jcr.query.RowIterator;
import javax.servlet.Servlet;

import org.apache.sling.api.SlingHttpServletRequest;
import org.apache.sling.api.SlingHttpServletResponse;
import org.apache.sling.api.resource.ResourceResolver;
import org.apache.sling.api.servlets.HttpConstants;
import org.apache.sling.api.servlets.SlingSafeMethodsServlet;
import org.osgi.service.component.annotations.Component;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

@Component(immediate = true, service = Servlet.class, property = { "sling.servlet.methods=" + HttpConstants.METHOD_GET,
        "sling.servlet.paths=" + "/bin/learning/assetlister" })
public class AssetListerServlet extends SlingSafeMethodsServlet {

    // Generated serialVersionUID
    private static final long serialVersionUID = 7762806638577908286L;

    // Default logger
    private final Logger log = LoggerFactory.getLogger(this.getClass());

    // Instance of ResourceResolver
    private ResourceResolver resourceResolver;

    // JCR Session instance
    private Session session;

    @Override
    protected void doGet(SlingHttpServletRequest request, SlingHttpServletResponse response) {

        try {

            // Getting the ResourceResolver from the current request
            resourceResolver = request.getResourceResolver();

            // Getting the session instance by adapting ResourceResolver
            session = resourceResolver.adaptTo(Session.class);

            QueryManager queryManager = session.getWorkspace().getQueryManager();
            String queryString = "SELECT * FROM [dam:Asset] AS asset WHERE ISDESCENDANTNODE(asset ,'/content/dam/we-retail/en/features')";
            Query query = queryManager.createQuery(queryString, "JCR-SQL2");

            QueryResult queryResult = query.execute();

            response.getWriter().println("--------------Result-------------");

            RowIterator rowIterator = queryResult.getRows();

            while (rowIterator.hasNext()) {
                Row row = rowIterator.nextRow();
                response.getWriter().println(row.toString());
            }

        } catch (Exception e) {
            log.error(e.getMessage(), e);
        } finally {
            if (resourceResolver != null) {
                resourceResolver.close();
            }
        }
    }

}

Аналогично вашему конкретному требованию, вы можете использовать эту логику в компоненте, сервисе и т. Д. Надеюсь, это поможет.

0 голосов
/ 09 июля 2019

Если вы ищете решение Python, здесь - это инструмент Python, который я создал для подключения к AEM DAM и выполнения большинства операций DAM, включая список всех активов DAM илиактивы по заданному пути

...