/// <summary> /// Populates a Content List (of Teasers) by executing the query it specifies. /// </summary> /// <param name="contentList">The Content List which specifies the query and is to be populated.</param> /// <param name="localization">The context Localization.</param> public virtual void PopulateDynamicList <T>(ContentList <T> contentList, Localization localization) where T : EntityModel { using (new Tracer(contentList, localization)) { BrokerQuery query = new BrokerQuery { Start = contentList.Start, PublicationId = Int32.Parse(localization.LocalizationId), PageSize = contentList.PageSize, SchemaId = MapSchema(contentList.ContentType.Key, localization), Sort = contentList.Sort.Key }; // TODO: For now BrokerQuery always returns Teasers IEnumerable <Teaser> queryResults = query.ExecuteQuery(); ILinkResolver linkResolver = SiteConfiguration.LinkResolver; foreach (Teaser item in queryResults) { item.Link.Url = linkResolver.ResolveLink(item.Link.Url); } contentList.ItemListElements = queryResults.Cast <T>().ToList(); contentList.HasMore = query.HasMore; } }
/// <summary> /// Populates a Dynamic List by executing the query it specifies. /// </summary> /// <param name="dynamicList">The Dynamic List which specifies the query and is to be populated.</param> /// <param name="localization">The context Localization.</param> public void PopulateDynamicList(DynamicList dynamicList, Localization localization) { using (new Tracer(dynamicList, localization)) { SimpleBrokerQuery simpleBrokerQuery = dynamicList.GetQuery(localization) as SimpleBrokerQuery; if (simpleBrokerQuery == null) { throw new DxaException($"Unexpected result from {dynamicList.GetType().Name}.GetQuery: {dynamicList.GetQuery(localization)}"); } BrokerQuery brokerQuery = new BrokerQuery(simpleBrokerQuery); string[] componentUris = brokerQuery.ExecuteQuery().ToArray(); Log.Debug($"Broker Query returned {componentUris.Length} results. HasMore={brokerQuery.HasMore}"); if (componentUris.Length > 0) { Type resultType = dynamicList.ResultType; ComponentMetaFactory componentMetaFactory = new ComponentMetaFactory(localization.GetCmUri()); dynamicList.QueryResults = componentUris .Select(c => ModelBuilderPipeline.CreateEntityModel(CreateEntityModelData(componentMetaFactory.GetMeta(c)), resultType, localization)) .ToList(); } dynamicList.HasMore = brokerQuery.HasMore; } }