Cara yang efisien untuk mendapatkan daftar EntityModel (Java, DXA 2.0)
Oct 28 2020
Kami memiliki halaman yang menanyakan entitas dengan kriteria tertentu.
Cara kita mengimplementasikannya adalah dengan mendapatkan daftar ID entitas, loop ID mengambil model entitas per ID dan menambahkannya ke dalam daftar.
Kode semu:
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)
});
Ini berfungsi, namun dari sudut pandang kinerja sangat lambat karena perlu memanggil contentProvider.getEntityModel(...)setiap ID.
Apakah ada solusi yang lebih baik untuk ini? Mungkin API dari DXA yang menghasilkan daftar EntityModel?
Jawaban
Velmurugan Nov 03 2020 at 06:06
Gunakan ini di bawah CIL API untuk mengambil beberapa konten DCP dengan satu contoh panggilan yang diberikan di bawah ini didasarkan pada API serupa .NET juga tersedia di java.
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();
Saya harap ini membantu.
Kiat Pemilik Anjing yang Bermanfaat: Mengapa Penting untuk Membiarkan Anjing Anda Mengendus di Jalan
Jana Duggar: Semua yang Dia Katakan Tentang Cinta dan Jendela 5 Tahunnya untuk Menemukan 'Yang Satu'