EntityModel (Java, DXA 2.0) listesini almanın verimli yolu

Oct 28 2020

Varlıkları belirli kriterlere göre sorgulayan bir sayfamız var.

Bunu uygulama şeklimiz, varlık kimlikleri listesini almak, kimlikleri döngüye almak, kimlik başına varlık modelini almak ve listeye eklemektir.

Sözde kod:

Query query = new Query(...);
// Get list of ids from query
List<String> ids = Arrays.asList(query.executeQuery());

final WebComponentMetaFactory cmf = new WebComponentMetaFactoryImpl(brokerQuery.getPublicationId());

// Get component meta
List<ComponentMeta> componentMetas = ids.stream().map(cmf::getMeta)
            .collect(Collectors.toList());

// Get entity model per component and add it to the list
componentMetas.forEach(meta -> {
   EntityModel entityModel = contentProvider.getEntityModel(meta.getId() + templateId, webRequestContext.getLocalization())
   list.add(entityModel)
});

Bu işe yarıyor, ancak performans açısından çok yavaştır çünkü contentProvider.getEntityModel(...)her kimliği çağırması gerekir .

Bunun için daha iyi bir çözüm var mı? Belki de EntityModel listesini oluşturan DXA'dan bir API?

Yanıtlar

Velmurugan Nov 03 2020 at 06:06

Aşağıda verilen tek bir çağrı örneğiyle birden çok DCP içeriğini almak için aşağıdaki CIL API'sini kullanın, java'da da bulunan .NET benzeri API'ye dayanmaktadır.

string[] componentUris = query.ExecuteQuery();


            var components =
                componentUris
                    .Select(componentUri => { TcmUri uri = new TcmUri(componentUri); return (ComponentPresentation)new ComponentPresentationFactory(uri.PublicationId).FindAllComponentPresentations(componentUri)[0]; })
                    .Where(cp => cp != null)
                    .Select(cp => cp.Content)
                    .ToList();

Umut ediyorum bu yardım eder.